| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
PHP-шаблоны или, как помирить программиста с верстальщиком Современный Web-сайт - это продукт совместного труда дизайнера, программиста, верстальщика и контентщика (автора публикуемого на сайте материала). При разработке HTML протокола такое разделение труда не предполагалось. Другими словами, HTML позволяет формировать статические документы, изменение фрагментов которых со временем возможно только с привлечением верстальщика. При необходимости динамического изменения фрагментов документа (например, совмещение на одной странице новостей с презентацией фирмы, владельца сайта) такое решение проблемы трудоемко. А для отображения результатов запроса поисковых серверов – это просто недопустимо. Как было показано Web-документ можно сгенерировать, используя PHP "на лету". Текст скрипта записывается непосредственно в текст web-страницы, а потом "вылавливается" оттуда Web-сервером, перенаправляется транслятору, а результаты работы возвращаются в web-страницу, которую сервер передает пользователю. Но в случае большой сложности проекта или когда над ним работают несколько специалистов (программист, дизайнер, контент-мастер) довольно сложно разобраться, где чей "фрагмент" кода. Другими словами, где заканчивается код РНР и начинается HTML. Одно из решений этой задачи: использование шаблонов для разделения кода мы здесь рассмотрим [1]. Как это работает В своей работе С. Шуманн переработал известный Perl пакет FastTemplate в соответствующий PHP класс. Методы assigne и parse этого класса позволяют определить значения переменных файла шаблона и сформировать Web-документ, соответственно. Схема генерации Web-документа приведена на следующем рисунке:
Помещение 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. Выражаю особую благодарность Литвиненко А. Ю. |
|
| ||||||||||||||||
|