[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шаблонизатор.
Страницы: 1, 2
twin
По мотивам этой темы.

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

Так вот, идея в двух словах была такая - убрать нафиг логику из шаблона. Как оказалось, это уже реализовано в таком шаблонизаторе, как Xtemplate. Но я хотел сделать немного не то, а хотел найти золотую середину между нативными шаблонами и "классическими" шаблонизаторами.

И вот что получилось. Собственно все очень просто - используются всего 5 методoв. Вернее их шесть, но два взаимоисключающие.

В чем фишка. Вернее фишки.

1. В шаблонах совершенно нет логической составляющей. Это упрощает работу с ними, они немногословны и их можно править даже без сервера.

2. А посему ничего не нужно "учить". Нет там никакого синтаксиса шаблонов.

3. Для любителей натива - он никуда не делся. И при желании можно использовать в шаблонах всю мощь PHP.

4. Для них же - не нужно инициализировать переменные, всё делается автоматически. Можно не бояться нотисов.

5. Ну и на десерт для гурманов - работает наследование шаблонов.

6. А уж для полных адептов - можно запретить PHP в шаблонах и пользоваться псевдопеременными. Какими-нибудь {var}. Ну практически аналог XTemplate, только с наследованием и немного более простым синтаксисом.

Компиляции тут нету - в ней нет смысла. Он и так довольно шустрый, потому что маленький и нативный. :) А кэширование, это не профильная задача для шаблонизатора. Как и мультиязычность.


Как это работает. Берем два шаблона. Родитель:
parent.html
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
IRB_Template Example</title>
</head>

<!-- Пример вывода переменной в родителя -->
<?=$var; ?>

<!-- Этот блок будет заменен шаблоном-дочкой -->
<!--// table_parent -->

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
Пример наследования шаблона</td>
</tr>
</table>

<!--// table_parent end -->

<!-- Этим блоком можно управлять из дочки -->
<!--// example_parent -->

Пример управления родительским шаблоном <?php echo $i; ?><br />
<!--// example_parent end -->

<!-- А это неопределенная вроде как переменная. Нотиса не будет. -->

<?=$dummy; ?>

<!-- А это просто php, как в обычных нативных шаблонах -->
<?php if(date('H') > 8 && date('H') < 22) : ?>
<strong>
Сейчас день</strong>
<?php
else : ?>
<strong>
Пора спать</strong>
<?php
endif; ?>

</body>
</html>

И дочка:
child.html
<!--// table -->
<table border="1" >
<!--// row -->
<tr>
<!--// cell -->
<td><?=$num; ?></td>
<!--// cell end -->
</tr>
<!--// row end -->
</table>
<!--// table end -->


Ну и сам скриптик:
index.php
<?php

include 'irb_template.php';
$tpl = new IRB_Template('child');

$num = 25;
// Подготовка таблицы.
for ($i = 0; $i < 6; $i++)
{
for ($j = 0; $j < 5; $j++)
{
$num = (--$num < 0) ? ' ' : $num;
// Заряжаем переменные в ячейку
$tpl->assign('num', $num);
// Устанавливаем ячейку
$tpl->setBlock('cell');
}
// Устанавливаем ряд
$tpl->setBlock('row');
// Очищаем ячейки
$tpl->clearBlock('cell');
}
// Устанавливаем таблицу
$tpl->setBlock('table');

//////////////////////////////////////////////
// Это для гурманов - наследование шаблонов
//////////////////////////////////////////////
// Заряжаем переменную в родительский шаблон
$tpl->assign('var', 'Пример вставки переменной в родительский шаблон');

//Пример управления родительским шаблоном
for ($i = 1; $i <= 3; $i++)
{
$tpl->assign('i', $i);
$tpl->setBlock('example_parent');
}

// Рендерим шаблоны. parent(.html) - родитель, table_parent - блок, куда вставлять дочку
$tpl->extendsTpl('parent', 'table_parent')->renderTpl();


Вообще при желании можно отказаться от натива, есть вариант переключить шаблонизатор на псевдотеги. Такие:
{var}
{arr.val}
{file template}

Но теряется весь смак.

По ссылке есть архив с более полными примерами. На картинке результат. Кому интересно поковыряться, вот тут есть рабочий пример.

Что скажите? :)

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.