InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте



Свежая информация куплю песню у автора у нас.



Размещение сквозной ссылки

 

PHP-шаблоны или, как помирить программиста с верстальщиком

А. Чекалов


Современный Web-сайт - это продукт совместного труда дизайнера, программиста, верстальщика и контентщика (автора публикуемого на сайте материала). При разработке HTML протокола такое разделение труда не предполагалось. Другими словами, HTML позволяет формировать статические документы, изменение фрагментов которых со временем возможно только с привлечением верстальщика. При необходимости динамического изменения фрагментов документа (например, совмещение на одной странице новостей с презентацией фирмы, владельца сайта) такое решение проблемы трудоемко. А для отображения результатов запроса поисковых серверов – это просто недопустимо.

Как было показано Web-документ можно сгенерировать, используя PHP "на лету". Текст скрипта записывается непосредственно в текст web-страницы, а потом "вылавливается" оттуда Web-сервером, перенаправляется транслятору, а результаты работы возвращаются в web-страницу, которую сервер передает пользователю. Но в случае большой сложности проекта или когда над ним работают несколько специалистов (программист, дизайнер, контент-мастер) довольно сложно разобраться, где чей "фрагмент" кода. Другими словами, где заканчивается код РНР и начинается HTML.

Одно из решений этой задачи: использование шаблонов для разделения кода мы здесь рассмотрим [1].

Как это работает

В своей работе С. Шуманн переработал известный Perl пакет FastTemplate в соответствующий PHP класс. Методы assigne и parse этого класса позволяют определить значения переменных файла шаблона и сформировать Web-документ, соответственно. Схема генерации Web-документа приведена на следующем рисунке:

inet204_01
Здесь 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");
}
?>

Во время выполнения приложения форма будет иметь следующий вид:

inet204_02

В окне браузера отображены данные поля 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');

Литература и ресурсы

  • 1. Sascha Schumann. Templates - why and how to use them in PHP3 - http://www.phpbuilder.com/columns/
  • 2. Денис Давыдов. Использование шаблонов в PHP4 - http://www.webscript.ru/print.php3?story=01/04/19/3683838
  • 3. Ian Felton. PHP Fast Template - http://www.devshed.com/Server_Side/PHP/PHPFastTemplate/

P. S. Выражаю особую благодарность Литвиненко А. Ю.


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua