В листинге 27.3 представлен простейший шаблон. Обратите внимание на маркеры, заключенные в фигурные скобки. В этом шаблоне их три: TITLE, SIDENAV и MAIN. Это фрагмент содержимого, сгенерированного в основном сценарии PHP. Первый является прототипом присвоения переменной, а второй будет содержать другой шаблонный файл. Последний является стандартным именем, используемым проектом FastTemplate для отображения главного содержимого любого сценария. В листингах 27.4-27.6 отображено несколько других шаблонов, используемых в этом примере.
Как можно ожидать, боковая навигация представляет собой простой набор ссылок. Таблица содержит три столбца, предназначенных для числа, квадрата и куба этого числа. Шаблон, сохраненный в файле row.tpl, в дальнейшем определяет строки таблицы. Сценарий PHP, представленный в листинге 27.7, вызывает этот шаблон для отображения строк таблицы.

Листинг 27.4. Боковая навигация

<a href="home.php">Home</a><br>
<a href="about.php">About Us</a><br>
<a href="contact.php">Contact Us</a><br>

Листинг 27.5. Шаблон таблицы

<table border="1">
<tr><th>n</th> <th>n*2</th> <th>n*3</th></tr>
{ROWS}
</table>

Листинг 27.6. Шаблон строки

<tr>
<td>{NUMBER}</td> <td>{SQUARE}</td> <td>{CUBE}</td> </tr>

Листинг 27.7. Сценарий, использующий шаблоны

<?php
//получить класс FastTemplate require_once("class.FastTemplate.php"),-// проиллюстрировать
// использование шаблонов в текущем каталоге $tpl = new FastTemplateC'."),-//задать список использованных шаблонов $tpl->define( array(
"main"=>"27-3.tpl",
"side"=>"27-4.tpl",
"table"=>"27-5.tpl",
"row"=>"27-6.tpl" 
)
);
//Задать значение переменной TITLE
$tpl->assign(array("TITLE"=>"FastTemplate Test")); // получить боковую навигацию $tpl->parse("SIDENAV", "side"); // создать строки для таблицы for($n=1; $n <= 10; $n++)
{
//задать значения $tpl->assign( array(
"NUMBER"=>$n,
"SQUARE"=>pow($n,2),
"CUBE"=>pow($n,3)
)
);
//проанализировать шаблон и присоединить их к ROWS $tpl->parse("ROWS",".row");
}
// использовать шаблоны table и main и разместить их в MAIN $tpl->parse("MAIN", array("table","main")); // отправить все содержимое в браузер $tpl->FastPrint("MAIN");
?>

Программный код, представленный в этом примере, отслеживать достаточно легко. Как понятно из всего сказанного, файлы шаблонов должны находиться в подкаталоге. Метод assign задает фиксированное значение одной или нескольких переменных, а метод parse анализирует шаблон. Конечно, до синтаксического анализа шаблона необходимо определить значения маркеров.
Сценарий в этом примере выводит в цикле таблицу с числами. Все строки таблицы добавляются к переменной ROWS путем присвоения значений переменных и анализом шаблона. Заметим, что в вызове parse перед именем шаблона row используется точка. Это дает знать FastTemplate, что вместо замещения необходимо делать дополнение.
Проект FastTemplate также использует другой синтаксис для повторяющихся блоков. Вы обозначаете часть HTML-кода HTML-комментариями, которые должны задаваться в строгой форме. Место для добавления дополнительных пробелов или разбиения комментария на две строки не предусмотрено. Такие блоки называются динамическими блоками.
Проект PHPLib представляет собой хорошую основу для создания Web-приложе-ний. Он включает класс, использующий шаблоны, во многом аналогичные шаблонам проекта FastTemplate. Для того чтобы получить класс шаблона, необходимо загрузить весь пакет, но он может использоваться и сам по себе. Подобно FastTemplate, класс шаблонов PHPLib для выделения маркеров использует фигурные скобки, а также позволяет использовать повторяющиеся блоки с использованием синтаксиса комментариев HTML. Не принимая во внимание различие в именах методов, этот класс работает аналогично проекту FastTemplate.
Два других подобных решения - AvantTemplate и TemplatePower. В этих классах используется тот же подход к созданию шаблонов, который применялся в проекте FastTemplate, - использование для обозначения замещаемых значений маркеров.