Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
01:15, 09 июля 2008

XTemplate - отделяем код от дизайна

xtemplateХорошим тоном, да и удобным инструментом при разработке сайтов является отделение функциональной части от графической. Проще говоря - отделение PHP кода от HTML за счет использования шаблонизаторов. Это может быть либо своя функция (класс), заточенная под конкретные нужды, либо же готовая библиотека, которых сейчас достаточно много.

Одним из популярных шаблонизаторов является XTemplate, о котором сегодня и пойдет речь.

XTemplate позволяет полностью отделить HTML код от PHP. У библиотеки есть много возможностей для, например, обработки блоков данных и переменных, за счет чего код становится легкочитаемым, коротким, а главное – оптимизированным. Кроме того, есть возможности снижения нагрузки на сервер, за счет использования кэширования.

Чтобы понять как работает XTemplate рассмотрим несколько примеров.

Некоторые замечания: работа с классом проводится с шаблоном example.xtpl, который по сути является обычным HTML-файлом. Исходный код приведен ниже.

Пример 1: Парсинг переменных и простых блоков

include_once('./xtemplate.class.php');

$xtpl = new XTemplate('example.xtpl');

$xtpl->assign('VARIABLE', 'TEST'); //Присвовение переменной {VARIABLE} значения ТЕST

$xtpl->parse('main.block1'); //Простая обработка блока1

$xtpl->parse('main.block2'); //Простая обработка блока2

Стоит добавить, что при обработке блоков вся логика находится именно в PHP коде, в отличии от того же Smarty.

Пример 2: Обработка блоков с передачей в качестве параметра массива с данными.

$row = array('ID'=>'38', //Объявляем массив с данными
'NAME'=>'cocomp',
'AGE'=>'33'
);

$xtpl->assign('DATA',$row); //Присваиваем нашим данным переменную DATA. При этом в блоке эти самые переменные объявляются как {DATA.ID}, {DATA.NAME} и {DATA.AGE}, т.е. названия соответсвуют ключам массива $row.

$xtpl->parse('main.block3'); //Обрабатываем блока3

Такая обработка может понадобиться, например, при выводе данных, полученных из базы данных.

Пример 3: Парсинг многоуровневых блоков данных для динамического создания таблиц.

$rows = array(); //Объявление пустого массива

// Добавление некоторых данных в массив.
$rows[1]=array('ID'=>'38',
'NAME'=>'cocomp',
'AGE'=>'33'
);
$rows[2]=array('ID'=>'27',
'NAME'=>'linkhogthrob',
'AGE'=>'34'
);
$rows[3]=array('ID'=>'56',
'NAME'=>'pingu',
'AGE'=>'23'
);

$rowsize = count($rows);

for (
$i = 1; $i <= $rowsize; $i++) {

// Присваиваем блоку DATA текущий ряд массива
$xtpl->assign('DATA', $rows[$i]);
$xtpl->assign('ROW_NR', $i);

// Обрабатываем текуший ряд таблицы
$xtpl->parse('main.table.row');

}

// Обрабатываем всю таблицу
$xtpl->parse('main.table');

Теперь, чтобы увидеть что получилось нужно обработать главный блок main и вывести его на экран:

$xtpl->parse('main'); //Парсинг главного блока, в котором у нас все содержимое шаблона
$xtpl->out('main'); //Вывод результатов парсинга на экран

Исходный текст шаблона, использованного в примерах (example.xtpl):

<!-- BEGIN: main -->
<p>Простая замена значения переменной "TEST": <b>{VARIABLE}</b><br />
<!-- BEGIN: block1 -->
Это блок 1.<br />
<!-- END: block1 -->
<!-- BEGIN: block2 -->
Это блок 2.<br />
<!-- END: block2 -->
</p>
<!-- BEGIN: block3#Для удобства, блоки можно коментировать подобно этому-->
<table border="1">
<tr>
<td>id</td>
<td>{DATA.ID}</td>
</tr>
<tr>
<td>name</td>
<td>{DATA.NAME}</td>
</tr>
<tr>
<td>age</td>
<td>{DATA.AGE}</td>
</tr>
</table>
<!-- END: block3 -->

<!-- BEGIN: table -->
<table border="1">
<tr>
<th>row nr.</th>
<th>id</th>
<th>name</th>
<th>age</th>
</tr>
<!-- BEGIN: row -->
<tr>
<td>{ROW_NR}</td>
<td>{DATA.ID}</td>
<td>{DATA.NAME}</td>
<td>{DATA.AGE}</td>
</tr>
<!-- END: row --> </table>
<!-- END: table -->
<!-- END: main -->

Этими простыми примерами работа с шаблонизатором не ограничивается. Более подробные примеры можно найти на сайте проекта XTemplate., там же можно найти и свежую версию библиотеки (на момент создания топика - 0.4.0).

0