PHP-шаблоны или, как помирить программиста с верстальщиком.
Современный Web-сайт - это продукт совместного труда дизайнера, программиста, верстальщика и контентщика (автора публикуемого на сайте материала). При разработке HTML протокола такое разделение труда не предполагалось. Другими словами, HTML позволяет формировать статические документы, изменение фрагментов которых со временем возможно только с привлечением верстальщика. При необходимости динамического изменения фрагментов документа (например, совмещение на одной странице новостей с презентацией фирмы, владельца сайта) такое решение проблемы трудоемко. А для отображения результатов запроса поисковых серверов - это просто недопустимо.
А. Чекалов
Современный Web-сайт - это продукт совместного труда дизайнера, программиста, верстальщика и контентщика (автора публикуемого на сайте материала). При разработке HTML протокола такое разделение труда не предполагалось. Другими словами, HTML позволяет формировать статические документы, изменение фрагментов которых со временем возможно только с привлечением верстальщика. При необходимости динамического изменения фрагментов документа (например, совмещение на одной странице новостей с презентацией фирмы, владельца сайта) такое решение проблемы трудоемко. А для отображения результатов запроса поисковых серверов - это просто недопустимо.
Как было показано Web-документ можно сгенерировать, используя PHP "на лету". Текст скрипта записывается непосредственно в текст web-страницы, а потом "вылавливается" оттуда Web-сервером, перенаправляется транслятору, а результаты работы возвращаются в web-страницу, которую сервер передает пользователю. Но в случае большой сложности проекта или когда над ним работают несколько специалистов (программист, дизайнер, контент-мастер) довольно сложно разобраться, где чей "фрагмент" кода. Другими словами, где заканчивается код РНР и начинается HTML.
Одно из решений этой задачи: использование шаблонов для разделения кода мы здесь рассмотрим [1].
Как это работает
В своей работе С. Шуманн переработал известный Perl пакет FastTemplate в соответствующий PHP класс. Методы assigne и parse этого класса позволяют определить значения переменных файла шаблона и сформировать Web-документ, соответственно. Схема генерации Web-документа приведена на следующем рисунке:
Здесь tpl обозначен наследник класса FastTemplate.
Помещение FastTemplate переменных в HTML шаблон
HTML шаблон - это текстовый файл, который содержит HTML теги и переменные. Переменные могут состоять из алфавитно-цифровых символов и знака подчеркивания {(A-Я 0-9) _} - тех символов, которые может анализировать класс FastTemplate. Здесь важно понимать, что переменная "должна бросаться в глаза" верстальщику. Иначе он ее может удалить из шаблона.
Создадим в папке templates три шаблона main.tpl, rows.tp и table.tpl:
<!-- main.tpl --> <HTML><HEAD><TITLE>Формирование таблицы из данных базы</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"> <BODY> <!-- Поле для фантазий дизайнера и работы верстальщика --> <P><B>Фамилия</B> =FieldRECORD= <!-- Поле для фантазий дизайнера и работы верстальщика --> </BODY></HTML> <!-- rows.tpl --> <TR> <TD>=LastVar=</TD> </TR> <!-- table.tpl --> <TABLE> =ROW= </TABLE>
Здесь =FieldRECORD=, =LastVar= и =ROW= - переменные файлов шаблонов.
Определение переменных шаблонов и формирование HTML документа
Поместим вне папки templates файл класса FastTemplate и скрипт index.php, который будет содержать следующий код:
<? Header("Content-type: text/html; charset=windows-1251"); // включаем файл класса FastTemplate в PHP код include("class.fasttemplate.php"); // создаем новый экземпляр tpl класса FastTemplate $tpl = new FastTemplate("./templates"); // отобразим имена файлов шаблонов на имена-константы, чтобы // по ним ссылаться на шаблоны $tpl->define(array("toplevel" => "main.tpl", "table" =>"table.tpl", "rows" => "rows.tpl")); // соединяемся с сервером mySQL $db = mysql_connect("localhost", "root", ""); // выбираем базу данных learndb mysql_select_db("learndb",$db); // выбираем данные из поля Lastname базы $GetData = mysql_query("SELECT Lastname FROM Personnel"); // Формирование документа resHTML if ($myRow = mysql_fetch_array($GetData)) { do { // сохранение значения поля Lastname первой //записи в переменной $Name = $myRow["Lastname"]; // определим значение переменной =LastVar= // (шаблон rows.tpl) равным текущему значению $Name $tpl->assign("=LastVar=", $Name); // конкатенируем образованные по шаблону // rows.tpl строки в таблицу $tpl->parse("=ROW=", ".rows"); }while ($myRow= mysql_fetch_array($GetData)); // "собираем" таблицу $tpl->parse("=FieldRECORD=", "table"); // "собираем" HTML документ и отправляем его браузеру $tpl->parse(resHTML, "toplevel"); $tpl->FastPrint(); } // если данные отсутствуют в таблице Personnel, то сообщаем об ошибке else { print("Error obtaining data"); } ?>
Во время выполнения приложения форма будет иметь следующий вид:
В окне браузера отображены данные поля Lastname таблицы Personnel. Она создавалась скриптом.
CONNECT learndb CREATE TABLE personnel ( id int NOT NULL AUTO_INCREMENT, firstname varchar(25), lastname varchar(20), nick varchar(12), email varchar(35), PRIMARY KEY (id), UNIQUE id (id) ); INSERT INTO personnel VALUES ('1','John','Lever','John', 'john@everywhere.net'); INSERT INTO personnel VALUES ('2','Лариса','Муштай', 'Ивановна','rose@flower.com');
P. S. Выражаю особую благодарность Литвиненко А. Ю.
Нет комментариев. Ваш будет первым!