• 88558
  • 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
3749

Загрузка...

Комментарии

Это удобно, но в тоже время парсинг - это дополнительная нагрузка на сервер.
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

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

Что дал Казахстану переход к трехступенчатой судебной системе?

Что дал Казахстану переход к трехступенчатой судебной системе?

С 1 января 2016 года Казахстан перешел на трехступенчатую судебную систему. Данные изменения действуют уже более 8 месяцев, и в данной публикации мы попробуем разобраться, что это дало Казахстану?
RuSnake
24 сент. 2016 / 11:50
  • 13119
  • 3
США открыла у нас лабораторию смерти. Даже Есимов не знал о её существовании

США открыла у нас лабораторию смерти. Даже Есимов не знал о её существовании

Думаю, не многие знают, что 9 сентября этого года в городе Алматы была открыта сверхсовременная биолаборатория, предназначенная для хранения опаснейших патогенов. Конечно же, с ее строительством...
Duraton
26 сент. 2016 / 18:50
  • 15707
  • 77
В октябре 2016 года состоится VII съезд судей Казахстана

В октябре 2016 года состоится VII съезд судей Казахстана

Проведение съездов судей позволяет принимать стратегические решения по вопросам развития судебной системы и способствует укреплению принципов независимости судейского сообщества.
elawkz
23 сент. 2016 / 13:45
  • 11119
  • 0
О законе законов: Замолвите слово о справедливости

О законе законов: Замолвите слово о справедливости

Акимат г. Астаны предлагал собственнику компенсацию...4 тенге 13 тиын за землю. Потолкуем о справедливости?
mirabeisenova
23 сент. 2016 / 16:39
  • 10937
  • 5
Я –живой пример того, что для начала собственного дела не нужны большие деньги

Я –живой пример того, что для начала собственного дела не нужны большие деньги

Сегодня утром ко мне позвонила тетя и сообщила, что хочет открыть свое дело, но не знает с чего начать и не уверена, хватит ли ей первоначального капитала. Вы не представляете, как она удивилась, когд
toskanbayev_a
21 сент. 2016 / 16:45
  • 10647
  • 28
Кызылорда: перезагрузка, или что изменилось за последние несколько лет

Кызылорда: перезагрузка, или что изменилось за последние несколько лет

В преддверии Дня города мы решили вспомнить, как росла и развивалась наша родная Кызылорда в последние годы. Хотим поделиться своей любовью к родному городу с читателями Юви в этой фотоподборке ...
socium_kzo
22 сент. 2016 / 10:09
  • 6944
  • 9
Сватовство в Казахстане или Заберите скорее мою дочь к себе

Сватовство в Казахстане или Заберите скорее мою дочь к себе

Всю мою сознательную жизнь мне приходилось ходить в гости. В гостях неплохо, не спорю. Бесплатная еда и напитки. В особо продвинутых семьях ещё предоставляются услуги Free Wi-Fi. В особо весёлых...
almatinec_92
23 сент. 2016 / 9:33
Apple – это уже прошлое. XIAOMI тихо стал настоящим и будущим

Apple – это уже прошлое. XIAOMI тихо стал настоящим и будущим

Безусловно мы все относимся с большим уважением с Стив Джобсу. Но его уже больше 5 лет нет с нами. Бессмысленно продолжать фанатеть от продукции Apple...
GALAN
22 сент. 2016 / 23:19
  • 3926
  • 14
Оралманка из Китая! Надеюсь, ты встретила того, кто по достоинству оценил тебя...

Оралманка из Китая! Надеюсь, ты встретила того, кто по достоинству оценил тебя...

В один прекрасный день я все же подошел к ней и попытался с ней нормально поговорить и пригласить куда-нибудь погулять или поужинать. Мы разговаривали с ней минут 20, я использовал весь свой...
Timurkhan
23 сент. 2016 / 12:26
  • 3745
  • 11