Довідник управління_і_передача_значень Документація InstantCMS 1
Примітка. З моменту написання цієї статті пройшло вже досить багато часу, тому деякі ядерні методи InstantCMS вже не використовуються, або вважаються застарілими та не рекомендуються до використання. Наприклад, метод request() досі є в ядрі (файл /core/cms.php) на рядку 994 (для версії інстанта 1.10.3) і, безумовно, працюватиме, як описано нижче. Проте звернення до цього методу дещо змінилося. Тепер до цього методу варто звертатися так:
Тому, перш ніж бездумно намагатися використовувати методи ядра, описані у цій статті, рекомендується переконатися, що ці методи в ядрі є і їх алгоритм не змінився. Загалом принципи передачі значень між різними частотами Інстанту змін поки що не зазнали.
Дуже часто при створенні компонента або модуля програміст-початківець стикається з дещо заплутаним механізмом передачі значень змінних або масивів між скриптами InstantCMS. Насправді нічого складного немає, вся «хитрощі» виникає з абсолютно логічної моделі Модель-Уявлення-Контролер (МПК) або, англійською, Model-View-Controller (MVC).
Спрощення та угоди
передбачається, що метод request класу cmsCore вже раніше проініціалізований рядком
та екземпляр $inCore класу cmsCore створено. Аналогічне міркування можна застосувати до ініціалізації інших методів.
Наведені нижче приклади, звичайно, працюють, і передають інформацію так само. Суфікс .html у викладі був опущений просто для зручності розуміння.
Декілька зауважень перед початком
Для того, щоб потрапити на свою сторінку з БУДЬ-ЯКОГО місця Інстанта, вам слід знайти та відкрити шаблон сторінки того компонента, куди Ви хочете поставити посилання. Наприклад, Ви хочете поставитипосилання на свій компонент із Універсального Каталогу. Відкрийте файл com_catalog_view.tpl і в те місце, де хочете бачити своє посилання, вставте рядок виду
Я вважаю, Ви знайомі з доступом до елементів масиву із шаблонізатора SMARTY і в php, тому докладно зупинятись на цьому не буду.
Метод GET та метод POST
Як бути, якщо Ви хочете передати до свого компонента складнішу інформацію? У вашому розпорядженні два методи - GET і POST, причому вони обидва застосовні. Метод GET дуже зручний тим, що дозволяє сконструювати URL так, щоб в залежності від значення змінних можна було потрапити на різні сторінки. Недоліків у методу лише два.
Передача даних методом GET
У більшості компонентів Інстанта змінна $do визначає дію, що здійснюється на різних сторінках цих компонентів. У разі збігу url посилання з регулярним виразом роутера змінної $do надається значення 'view_exponat'. Тепер, написавши вираз виду
Ви можете всередині фігурних дужок отримати або обчислити значення всіх змінних, які мають бути відображені на сторінці, або вплинути на зовнішній вигляд сторінки. Крім того, ви можете звернутися через модель до бази даних (докладніше про це у відповідній статті). Після того, як Ви підготували всі значення, ці дані слід передати шаблонизатору.
Тепер розглянемо метод POST.
Передача даних методом POST
Як і у випадку з методом GET, дані завжди передаються із файлу шаблонизатора *.tpl через роутер у файл компонента frontend.php. Для цього використовується форма
Зверніть увагу на значення якості форми enctype=«multipart/form-data». Цю властивість можна не згадувати, якщо Ви не збираєтеся надсилати цією формою на сервер файлів. Усерешта даних передаватиметься, як належить. Але при відправці файлів ця властивість є обов'язковою – якщо Ви забули її вказати, файли на сервер відправлятися не будуть.
Природно, елементи масиву $LANG (написи на кнопках) повинні бути заздалегідь визначені у мовному файлі languages/ru/components/museum.php У роутер вставляємо запис
Як бачимо, параметр action форми має значення, що збігається з регулярним виразом роутера. У разі збігу змінної $do присвоюється значення 'load_exponat'. Природно, всередині файлу frontend.php має бути код if($do=='load_exponat'), що включає отримання та обробку даних, переданих усередині форми.
Зупинимося на цьому трохи докладніше. Всі наведені нижче приклади вписуються у форму в тому порядку, який Ви определите, до кнопки SUBMIT.
Галка (чекбокс)
Наприклад, ми хочемо передати одиницю чи нуль залежно від встановленої чи скинутої галки чекбокса. У формі пишемо:
У файлі frontend.php тоді має бути рядок
Передача файлу на сервер та подальша обробка
При передачі файлу (наприклад, фотографії) у формі записуємо
У файлі frontend.php тоді:
Оскільки файл зберігається в тимчасовій папці, його слід перемістити на місце зберігання. Для цього можна скористатися методом ядра Інстанта:
Передача тексту
Для передачі тексту пишемо всередині форми:
Передача прихованого параметра
Якщо необхідно передати прихований параметр, наприклад, той самий id експонату в базі даних, який користувачу, що завантажує фото експонату, зовсім не цікавий, у формі пишемо:
У frontend.php тоді:
Звичайно, змінна $max_id і елемент масиву $field['value'] повинні бути визначені та передані вшаблонізатор заздалегідь. Змінна $max_id в даному випадку містить id останнього запису в базу і стане нам у нагоді при збереженні тексту в базу даних. Елемент масиву $field['value'] може містити раніше збережений текст, який тепер передається шаблонизатору для редагування wysiwyg.
Тут є один "підводний камінь". Якщо Ви, за звичкою, прийматимете у фронтенді дані через метод request() ядра Інстанта:
Передача масивів
Іноді потрібно передати кілька однотипних значень. Можна передати ці значення як масиву:
Отримуємо дані у frontend.php:
Передача значень шаблонизатор SMARTY
Цей шаблонизатор інтегрований в Інстант і є зручною підмогою конструювання компонентів. Про сам SMARTY написані тонни мануалів, вивчивши які можна створювати цілком пристойні сторінки. Особисто для себе я бачу зручність цього шаблонизатора в тому, що він містить обробку логіки, таким чином, від значень змінних, що передаються в нього, може залежати зовнішній вигляд сторінки. Ми раніше кілька разів натикалися на згадку, деякі дані необхідно заздалегідь сформувати перед передачею в шаблонизатор. Тепер покажемо, як дані передаються у цей шаблонизатор із файлу frontend.php. Природно, щоб дані кудись передати, необхідний приймач інформації. Цим приймачем служить написаний Вами файл із розширенням *.tpl. Наприклад, файл com_museum_exponat.tpl був написаний мною для відображення компонентом Музей різних завантажених експонатів. Тоді у файлі frontend.php пишемо:
Як бачите, перший рядок містить ініціалізацію екземпляра класу, об'єкта $smarty, якому передається вказівка, що слід відкрити файл templates/поточний_шаблон/components/com_museum_exponat.tpl.
Нагадаю, щодвигун шукає цей файл спочатку в папці з поточним (включеним) шаблоном. Якщо знаходить, відкриває та передає управління йому. Якщо не знаходить, шукає у папці із дефолтним шаблоном. Це особливо зручно, якщо Ви написали шаблон, де зовнішній вигляд сторінок компонентів відрізняється від дефолтного. Однак, якщо Ви помістите файли *.tpl тільки у свій шаблон, не помістивши їх копії в дефолтний, у разі включення дефолтного (або іншого) шаблону Ви «втратите» свої сторінки, а SMARTY напише Вам про помилку.
Всі наступні рядки, крім останньої, містять вказівку на передачу в шаблонизатор значень змінних. В даному випадку шаблонізатор передається масив $items. Кількість цих рядків має бути стільки, скільки імен змінних і масивів використовується в шаблонизаторі. Таким чином, якщо Ви бажаєте використовувати у файлі *.tpl вісім змінних і масивів, у Вас має бути вісім рядків, аналогічних другому рядку наведеного прикладу.
Останній рядок містить вказівку відобразити сторінку.