• 91098
  • 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
3980

Загрузка...
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

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

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Известный казахстанский бизнесмен становится первопроходцем и создает школу, о которой можно только мечтать. То, что мы, как взрослые, делаем в бизнесе, дети будут делать в этой школе.
Zhumanova
24 апр. 2017 / 16:29
  • 21781
  • 5
Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Всё ли так хорошо у жителей Казахстана? Почему-то наша страна сохраняет твёрдые позиции в первых строчках мировых рейтингов по числу самоубийств.
openqazaqstan
24 апр. 2017 / 16:54
  • 4295
  • 20
«Казпочта» отжигает. Редкий шанс вспомнить агрессивные советские очереди

«Казпочта» отжигает. Редкий шанс вспомнить агрессивные советские очереди

Люди старшего и среднего поколений помнят шумные, недобрые, грубо ругающиеся очереди советских лет. Увидеть, как это было, можно теперь разве что в каком-нибудь фильме. Хотя не только.
openqazaqstan
26 апр. 2017 / 16:14
  • 2979
  • 33
Любовница. «Мне часто доставались мужчины, поломанные браком»

Любовница. «Мне часто доставались мужчины, поломанные браком»

Мне часто доставались мужчины, поломанные браком. Таких почти сразу видно – у них маска состоявшегося мужчины по швам трещит. И каждый из них реагирует по-своему. Поясню на паре примеров.
Jamiklisa
28 апр. 2017 / 14:21
Юный алматинец покорил Первый канал на шоу Максима Галкина

Юный алматинец покорил Первый канал на шоу Максима Галкина

Житель Алматы по имени Марк Усачев недавно оказался на телепрограмме "Лучше всех", с успехом идущей на Первом канале России. 9-летний алматинец покорил публику своими недюжинными знаниями.
Seattle
24 апр. 2017 / 16:59
  • 2647
  • 2
Президент велел делиться. Почему бы казахстанским миллиардерам не послушаться?

Президент велел делиться. Почему бы казахстанским миллиардерам не послушаться?

Президент Назарбаев призвал крупных бизнесменов делиться с народом, следуя примеру своих коллег из развитых стран. В Казахстане, действительно, сегодня много богатых людей.
openqazaqstan
27 апр. 2017 / 14:09
  • 2515
  • 26
Преподаватели и ЭКСПО: «Пока газеты пишут одно, нас заставляют покупать билеты на выставку»

Преподаватели и ЭКСПО: «Пока газеты пишут одно, нас заставляют покупать билеты на выставку»

Чтобы вы знали, чем занимаются в сфере образования - педагоги являются основой массовок. Какое отношение к учителям со стороны государства, такого же уровня и качество образования.
SaukovV
26 апр. 2017 / 16:05
  • 2443
  • 16
Инстаграм – это «рынок девушек» и он круче любой базы данных

Инстаграм – это «рынок девушек» и он круче любой базы данных

Для меня Инстаграм – это рынок. Почему? Ничего не изменилось, девушки все так же бьются в попытках наиболее выгодно себя продать, посредством привлечения внимания.
Annette_Scherer
24 апр. 2017 / 22:35
  • 2460
  • 5
Как стать караоке-шлюхой в Корее? Твои обязанности – развлекать гостя, вот и всё

Как стать караоке-шлюхой в Корее? Твои обязанности – развлекать гостя, вот и всё

Я думаю, многие видели различные объявления в интернете о наборе девушек в караоке-клубы в Южную Корею. Садитесь поудобнее, я вам сейчас расскажу что это за шняга.
savira6
28 апр. 2017 / 17:02
  • 2390
  • 20