Комп'ютерна документація від а до я

Програмування на PHP. Сьомий випуск. Робота з шаблонами. Розробка власних і використання існуючих рішень.

У цьому випуску ми поговоримо про таку річ як темплейти (templates) - що це таке, навіщо це потрібно і чому майже всі це використовують. Але спочатку, як зазвичай, трохи новин.

А новини такі, що версія PHP 4.1.0. про створення якої я говорив в попередньому випуску вийшла. Правда поки що вона доступна лише у вигляді вихідних текстів (тобто windows binaries в розділі downloads на www.php.net шукати поки марно). До речі, крім усього іншого користувачів PHP на платформі Windows порадує той факт, що розробники PHP в цій версії говорять про цю версію як про значно більш швидко і стабільно рабоать під Windows. Повний список змін можна подивитися в офіційному анонсі (англійською). Запитуйте нову версію PHP на www.php.net і www.php4win.com.

А тепер повернемося безпосередньо до теми цього випуску.

Що таке templates

Як ви вже знаєте (про це було сказано ще в першому випуску), PHP - це вбудований (embedded) мову. Тобто його код поміщається всередину HTML сторінки і займається генерацією динамічного вмісту. Наведу простий приклад:

Отже, templates - це механізм, який дозволить вам в більшій чи меншій мірі позбутися від тісної прив'язки вашого коду до зовнішнього вигляду вашого сайту і допоможе вам полегшити задачу генерації динамічного HTML коду сторінок. Основна ідея цього механізму полягає в тому, щоб мати безліч "шматочків" HTML коду з яких ви потім, як з кубиків в конструкторі, зберете будь-яку сторінку вашого сайту.

найпростіші templates

Найпростіший спосіб використання tempates - це створення безлічі змінних, що містять шматочки HTML коду. Код самої сторінки при цьому самостійно займається об'єднанням HTML коду з цих змінних з необхідними даними для отримання результату. Подивимося, наприклад, як могла б виглядати генерація тієї ж самої сторінки за допомогою найпростіших темплейтов. Тут я не став використовувати жоден з поширених пакетів, тому що просто хочу продемонструвати вам основну ідею.

Файл templates.php содежіт опис всіх необхідних темплейтов. Якщо подивитися на вміст змінних, описаних в цьому файлі, то можна помітити, що це просто та ж сама сторінка, але розбита на безліч частин, між якими повинні бути вставлені дані.

Файл index.php містить сам код побудови сторінки

Звичайно цей коду виглядає просто жахливо і так (я сподіваюся) насправді ніхто не робить. Але основну ідею "збирання" HTML коду сторінки зі шматочків цей приклад демонструє досить добре.

Насправді основна проблема наведеного вище коду полягає в тому, що він не дозволяє вам повністю позбутися від HTML коду всередині PHP коду, адже тут кожна частинка HTML коду зберігається в окремій змінної. Уявіть, скільки довелося б мати подібних змінних для більш-менш складною сторінки. І, крім того, не дивлячись на те, що безпосередньо HTML код винесено в окремий файл, але його зв'язок з результатами роботи PHP коду жорстко задана всередині самого PHP коду (адже все об'єднання HTML і PHP коду жорстко прописані).

Більшість цих проблем можуть бути вирішені шляхом використання нескладної системи для підстановок даних в HTML темплейти. Одну з них ми розглянемо в наступному розділі.

Використання templates з підстановкою даних

Основною відмінністю систем, заснованих на підстановці даних, є те, що вони дозволяють, використовуючи певний синтаксис, визначати місця вставки даних в HTML темплейти. По суті всі наявні системи роботи з темплейт засновані саме на цьому принципі і єдине, що їх відрізняє - синтаксис, який використовується для завдання темплейтов і набір можливостей, що надається системою.

Але спочатку короткий опис синтаксису для опису шаблонів, що застосовується в даній системі. Я приведу його в EBNF-подібній системі і потім дам необхідні пояснення.

"Ключ" для підстановки:

Ключем для підстановки тут називається частина тексту темплейта, яка буде згодом замінена на деякі дані, передані функції - обробника темплейтов. Він складається з двох основних частин: імені (унікального в межах даного темплейта) і необов'язкового значення за умовчанням. Воно буде використовуватися в разі, якщо при обробці темплейта для нього не було задано значення. У разі, якщо значення за замовчуванням також не було задано - цей ключ буде замінений на порожній рядок.

Значення за замовчуванням може також бути використано для завдання спеціальної обробки. Нижче наведено 3 різних типи синтаксису, допустимі для використання стандартних значень:

Як бачите, тип обробки для використання стандартних значень вказується в першому символі.

Якщо це символ '#'. то все значення розглядається як "вставити результат обробки темплейта з ім'ям