В этой статье мы поговорим о такой вещи как темплейты (templates) - что это такое, зачем это нужно и почему почти все это используют.
Templates
Что такое templates
Как вы уже знаете (об этом было сказано еще в первом выпуске), PHP - это встраиваемый (embedded) язык. Т.е. его код помещается внутрь HTML страницы и занимается генерацией динамического содержимого. Приведу простейший пример:
На первый взгляд это очень удобно. И это действительно удобно, но как правило только в случае, если страница несложная и динамического кода в ней немного. А теперь посмотрите на современные сайты в интернете - на каждой странице собрано множество разнообразной информации, причем как правило эта информация представляет собой различную функциональность: Например меню сайта, последние новости, голосование, поиск, ссылки, реклама и т.п. и все это на одной странице. Да и струртура HTML кода подобной страницы довольно сложна. Я думаю, что вы понимаете, что использование метода "встраивания" PHP кода в подобную страницу ничего кроме головной боли и кучи трудноуловимых глюков вам не принесет. Более того, web-программисты (да и не только они) повсеместно стремятся как можно сильнее отделить код сайта от его визуальной части, чтобы не приходилось переписывать код при каждом изменении внешнего вида сайта (а вы знаете, что на больших сайтах внешний вид меняется достаточно часто). Вот здесь-то и возникает идея использования templates как средства разделения внешнего вида и внутреннего кода сайта.
Итак, templates - это механизм, который позволит вам в большей или меньшей степени избавиться от тесной привязки вашего кода к внешнему виду вашего сайта и поможет вам облегчить задачу генерации динамического HTML кода страниц. Основная идея этого механизма состоит в том, чтобы иметь множество "кусочков" HTML кода из которых вы потом, как из кубиков в конструкторе, соберете любую страницу вашего сайта.
Простейшие templates
Простейший способ использования tempates - это создание множества переменных, содержащих кусочки HTML кода. Код самой страницы при этом самостоятельно занимается объединением HTML кода из этих переменных с необходимыми данными для получения результата. Посмотрим, например, как могла бы выглядеть генерация той же самой страницы с помощью простейших темплейтов. Здесь я не стал использовать ни один из распространенных пакетов, потому что просто хочу продемонстрировать вам основную идею.
Файл templates.php содежит описание всех необходимых темплейтов. Если посмотреть на содержимое переменных, описанных в этом файле, то можно заметить, что это просто та же самая страница, но разбитая на множество частей, между которыми должны быть вставлены данные.
<?php
// Начало заголовка страницы
$pageHeaderStart = '<HTML><head><title>';
// Конец заголовка страницы
$pageHeaderEnd = '</title><head><body>';
// Начало меню
$menuStart = '<table width="100%" border="0" cellspacing="0" cellpadding="1"><tr>';
// Конец меню
$menuEnd = '</tr></table>';
// Начало пункта меню
$menuItemCellStart = '<td>';
// Конец пункта меню
$menuItemCellEnd = '</td>';
// Начало content'а страницы
$pageContentStart = '<p>';
// Конец content'а страницы
$pageContentEnd = '</p>';
Конечно этот кода выглядит просто ужасно и так (я надеюсь) на самом деле никто не делает. Но основную идею "собирания" HTML кода страницы из кусочков этот пример демонстрирует достаточно хорошо.
На самом деле основная проблема приведенного выше кода состоит в том, что он не позволяет вам полностью избавиться от HTML кода внутри PHP кода, ведь здесь каждая частичка HTML кода хранится в отдельной переменной. Представьте, сколько пришлось бы иметь подобных переменных для более-менее сложной страницы. И, кроме того, несмотря на то, что непосредственно HTML код вынесен в отдельный файл, но его связь с результатами работы PHP кода жестко задана внутри самого PHP кода (ведь все объединения HTML и PHP кода жестко прописаны).
Большинство этих проблем могут быть решены путем использования несложной системы для подстановок данных в HTML темплейты. Одну из них мы рассмотрим в следующем разделе.