Работа с шаблонами


Прислал: Евгений А. Кучеров [ 28.01.2002 @ 21:26 ]
Раздел:: [ Статьи по PHP ]


Фуух, наконец-то я решил проблему шаблонов :). Я перепробовал многие классы, такие как, FastTemplate, IT[X] - IntegratedTemplate (PEAR), но большинство из них, либо слишком громоздкие (IT), либо с ошибками, например у меня не получилось использовать динамические шаблоны в FastTemplate. Мой класс, естесственно, не является сразу решением многих проблем шаблонов, но хотя бы, избавляет от некоторых из них, т.е. отделение кода от представления, что является очень важным для хотя бы более менее крупного сайта. Мне кажется приводить здесь весь класс не стоит, т.к. Вы можете его скачать и посмотреть, а здесь, я лишь привожу его описание с комментариями и примерами. Итак,

1. Описание класса.

1.1. Создание объекта. При создании нового экземпляра класса нужно указать директорию, где хранятся файлы-шаблоны. Можно указывать как относительный путь, так и абсолютный. Расширение этих файлов должно быть .tpl.

$tpl = new Template("./templates");

1.2. Загрузка шаблонов. Перед тем, как использовать шаблоны по назначению, их сначала необходимо загрузить (в память). Если требуется указать сразу несколько шаблонов, то здесь используется запятая. Для того, чтобы проверить, загружен ли шаблон, используется функция isLoaded($name). Для удаления шаблона (из памяти!) - unload($name). Где $name - имя шаблона.

$tpl->load("main");
$tpl->load("banner,counter,menu");


Примечание: в более новой версии, подгружать шаблоны при старте скрипта необязательно, т.к. ф-я get проверяет загружен ли шаблон, если нет, то загружает. Это, на мой взгляд, лучше, т.к. загрузка лишних шаблонов при старте скрипта, понижает его скорость.

1.3. Получение содержимого шаблона. Для его извлечения используется функция get($name), где $name - имя шаблона (без указания расширения, т.е. без .tpl).

2. Примеры.

2.1. Простой текст. Функции.

Шаблон.
text.tpl:
Hello world
Скрипт.

print $tpl->get("text"); 

или например

function message($str) {
   print 
$str."<br />";
}
eval(
"message("".$tpl->get("text")."");"); 

В браузере в обоих случаях появится:

Hello world

2.2. Использование переменных.

Шаблон.
vars.tpl:
Welcome $name. now is $time<br />
Скрипт.
$name "Your name";
$time date("H:i");
eval(
"print "".$tpl->get("vars")."";");
$name "My name";
eval(
"$str = "".$tpl->get("vars")."";");
$str .= " another text";
print 
$str;

Результат:

Welcome Your name. Now is 22:30
Welcome My Name. Now is 22:30 another text

2.3. Таблицы. Вывод результатов.

Шаблоны.
table.tpl:
<table width="100" cellspacing="0" cellpadding="0" border="1">
<tr>
<td>Число</td>
<td>Квадрат</td>
</tr>
$rows
</table>

table_row.tpl:
<tr>
<td>$number</td>
<td>$square</td>
</tr>

Скрипт.
$rows "";
for(
$i=0;$i<10;$i++) {
   
$number $i;
   
$square $i*$i;
   eval(
"$rows .= "".$tpl->get("table_row")."";");
}
eval(
"print "".$tpl->get("table")."";");


Результат будет следующим:

Число Квадрат
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81

2.4. Применение буферизации.

Представляете, если уже есть большие участки кода (php/html), где идет прямой вывод в бразуер, т.е. такие функции, как print/printf/echo. Не переписывать же, например, целый скрипт. Есть решение - использование буферизации, т.е. перехват выходного потока. Пример:

ob_start();
....
$content ob_get_contents();
ob_end_clean();


или например

ob_start();
....
include 
"somefile.inc.php";
include 
"somepage.html";
....
$content ob_get_contents();
ob_end_clean();


3. Приложения.

3.1. Редактор для шаблонов.

Я также разработал онлайн редактор на мой взгляд довольно удобный, Найти рабочую ссылку можно на тематических форумах и ресурсах. его можно установить в любую директорию на Вашем сайте. Настраивается он довольно просто, там можно поменять (необязательно) переменную $def_path, в которой записана директория по умолчанию, откуда будет выводиться список всех шаблонов, при старте скрипта редактора. Можете ее поменять, например на $def_path $DOCUMENT_ROOT."/templates";. И не забудьте закрыть его .htaccess'ом, иначе любой зайдет и отредактирует все шаблоны Вашего сайта ;)

3.2. Замечания.

a) Расширения для шаблонов. Измените в классе переменную $m_extension, по умолчанию она равна tpl
b) Win32/*nix. Если Вы используете операционную систему семейства *nix (Linux, Unix...), то значение переменной $m_win32 должно быть равно false. Если семейства win32 (windows 9x и т.д.), то true.
c) Обработка ошибок. Если возникла ошибка при загрузке шаблона, то возможны два варианта - 1) продолжить работу скрипта 2) немедленно остановить. В 1-ом случае переменная $m_die должны быть установлена в true. Да, и еще есть возможность настройки вывода сообщений об ошибках на экран $m_showErrors (также тип boolean)

3.3. Где скачать.

Каталог скриптов Webscript.Ru Network ( http://webscript.ru///webscript.ru/scripts/Detailed/344.php3 ) (Здесь находится сам класс (class.Template.php), пример (/demo) и редактор (/editor))

Евгений А. Кучеров aka Razor, //eugeny.com ( http://webscript.ru///eugeny.com )