• 92645
  • 417
  • 44
Нравится блог?
Подписывайтесь!

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).

9 июля 2008, 13:15
4010

Загрузка...
Loading...

Комментарии

Это удобно, но в тоже время парсинг - это дополнительная нагрузка на сервер.
eudj1n
0
0
когда нагрузка на сервер является критичной - всегда есть кэширование, которое кстати есть и в XTemplate.
NeD
0
0
самый лучший шаблонизатор это сам php
eudj1n
0
0
а самый лучший эдитор это тогда блокнот?
NeD
0
0
мы тут про шаблоны вроде?
пример про блокном привел в контексте удобства использования.
пример даже близко не подходит.
Это ты не в тему привел.
{бла}

удебней чем

?
Админы убейте свой парсер;)

[!--бегин блок--]{бла}[!--енд блок--]

удобней

[?$бла;?] ?
lEx0kz
0
0
полностью солидарен, по быстроте ничего не сравнится из библиотек представленных в данный момент. Пример шаблонизатора: всегда идет инклад или присоединение библиотеки шаблонизатора, потом создаем класс и вызываем определенный метод или он заложен в конструкторе. Дальше идет, получение данных шаблона, проверяется на изменения с кешем если он есть иначе компилит. это все нагрузка, даже если просто кеш, не спорю когда проект маленький, то без разницы. Но всегда стоит смотреть на перспективу, что когда нить если проект раскрутится то узким местом может оказаться именно шаблонизатор, который вы присоединили и забыли((((
NeD
0
0
посмотрел на аватар автора и возник вопрос: почему на аватаре Ruby, а пост про шаблонизаторы в php?
eudj1n
0
0
потому что по мере необходимости приходится писать не только на PHP, все зависит от целей и задач.
Darmen
0
0
Не понимаю некоторых личностей, кто тут отписался. Юджин - молодец, ждем еще статьи.

Дело даже не в удобстве тегов в виде комментариев - это все фигня и если покопаться в исходниках, то можно поменять.

Самое главное - формат вывода данных у xtemplate лежит полностью на плечах шаблонов, а сами данные для вывода - на php.
NeD
0
0
я всего лишь выразил свою точку зрения про шаблонизаторы в php
ээээ, что это такое?
omg
0
0
жывтоне чочо! котэ на глагне!!111
velero
0
0
ЕБАНАРОТ! хватит уже!!!
eudj1n
0
0
кто не понял - этим баловством занимался не я.
скоро верну статью.

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

Инцидент с пьяным киргизским гостем на борту Air Astana, наверное, остался бы только во внутренних сводках авиакомпании, если бы г-н Доган, не поднял громкий крик о государственном языке.
openqazaqstan
17 авг. 2017 / 14:43
  • 11791
  • 177
Казахский национализм раньше выглядел несовременно. Теперь он другой

Казахский национализм раньше выглядел несовременно. Теперь он другой

Националисты стали совсем другими. По-английски хорошо говорят, русскую классику цитируют. Очень современные, образованные, адекватные. А после Крыма в националисты уже чуть ли не любой казах готов был записаться.
Aidan_Karibzhanov
16 авг. 2017 / 16:52
Дайте Байбеку сломать и переделать город. Он хочет шагнуть вверх, а не бабло украсть

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

Я в тогдашней Алма-Ате родился, вырос. В школу начал ходить пешком. Весь центр опползал. Все эти знаковые места помню как ещё не знаковые места. Никаких этих ностальгических страданий у меня нет.
Aidan_Karibzhanov
вчера / 16:25
  • 3767
  • 28
Имеющий уши да услышит. Латиница касается только казахского языка

Имеющий уши да услышит. Латиница касается только казахского языка

Президент Назарбаев наконец-то разъяснил для всех, кто ещё не понял, очевидный вопрос, который всем в Казахстане очевиден. Елбасы повторил: на латиницу мы переводим казахский язык, и это не означает отказ от русского языка.
openqazaqstan
18 авг. 2017 / 16:23
  • 3432
  • 52
«Доехать до Алтын Орды» – как мошенники обманывают алматинцев

«Доехать до Алтын Орды» – как мошенники обманывают алматинцев

Из множества грустных откровений постепенно сложился перечень самых распространённых уловок охотников за нашими деньгами. В нём ожидаемо лидировали профессиональные попрошайки.
caravan_kz
16 авг. 2017 / 15:05
  • 2320
  • 4
Надо научиться видеть скрытые экономические процессы за вспышкой национального гнева

Надо научиться видеть скрытые экономические процессы за вспышкой национального гнева

При полном отсутствии бюджетного жилищного строительства, целые аулы оседают в ветхих домишках, сквозь заборы которых насмешливо возвышаются башни "коктемов", "риц карлтонов" и "есентаев".
niyazov
19 авг. 2017 / 11:16
  • 2485
  • 67
Подземная Акмечеть Бекет-Ата в Атырауской области – одно из самых сакральных мест

Подземная Акмечеть Бекет-Ата в Атырауской области – одно из самых сакральных мест

Его отцом был Мырзагул, матерью Жания, оба глубоко верующие. По рассказам, Бекет-Ата обладал богатырской силой, что в том числе помогало выбивать мечети в крепких скалах.
theYakov
вчера / 17:21
  • 2133
  • 3
В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

Общая площадь парка составляет 25 гектаров. На территории предусмотрено устройство прогулочных дорожек, площадок для установки аттракционов и павильонов различного назначения, цветников.
zhasakmola
17 авг. 2017 / 17:13
  • 2133
  • 1
«Нас и здесь неплохо кормят», или почему я не собираюсь уезжать из Казахстана

«Нас и здесь неплохо кормят», или почему я не собираюсь уезжать из Казахстана

Я всегда теряюсь, когда слышу этот вопрос, потому что я так и не сумел выразить причину одной фразой. Давайте рассмотрим популярные варианты, и я объясню, что именно мне в них не нравится.
convoluted
вчера / 12:29