Шаблонизатор Dextep

Руководство пользователя

Скачать
dextep_v1.0.zip,  ~21 кб
  1. Что это такое?
  2. Установка и настройка
  3. Dextep в действии
  4. Синтаксис шаблонов
  5. Приложение. Выражения и операторы
  6. Лицензионное соглашение

Что это такое?

Dextep — довольно простой движок для работы с шаблонами на PHP. Он создавался как легкий инструмент для применения архитектурной парадигмы MVC. Другими словами, вы сможете отделить логику приложения от пользовательских интерфейсов.

Движок поддерживает базовую логику — простейшие выражения, условный оператор {if}, циклы {for} и {foreach}, а также подключение подшаблонов. Синтаксис Dextep напоминает Smarty, однако он гораздо проще, учитывая меньшее количество функций и предлагаемых возможностей. Dextep также компилирует шаблон и кэширует его для достижения максимальной скорости работы.

Установка и настройка

Для работы Dextep требуется веб-сервер с PHP 4.4.9 или выше. Предыдущие версии должны поддерживаться вплоть до PHP 4.0.6, но тестирование не проводилось. Можете попробовать запустить test.php, чтобы проверить это самостоятельно.

Чтобы установить Dextep, скачайте архив, после чего:

Вы можете включить/отключить кэширование, изменить пути к папкам шаблонов и кэша, а также расширения файлов шаблонов. Для этого измените соответствующие значения свойств класса Dextep. Значения по умолчанию:

$cacheEnabled = true; #true = кэширование включено, false = отключено
$cachePath = 'cache/'; #путь к папке кэша
$templatePath = 'templates/'; #путь к папке шаблонов
$templateExt = '.html'; #расширение файлов шаблонов

Убедитесь, что папки $cachePath и $templatePath существуют. Если вы используете кэширование, то установите права на запись папке кэша.

Dextep в действии

Основы

Во-первых, необходимо создать объект класса Dextep:

require_once "Dextep.class.php";
$template = new Dextep();

Шаблоны — в сущности файлы с расширением .html (определяется в свойстве $templateExt), хранимые в папке для шаблонов (определяется в свойстве $templatePath) или ее подпапках. Метод getTemplate($tpl) возвращает выполненный код шаблона, где $tpl — имя файла с шаблоном без расширения. Например, следующий код выводит шаблон из файла page.html:

echo $template->getTemplate('page');

А этот пример присвоит строку с выполненным шаблоном blocks/header.html переменной $content:

$content = $template->getTemplate('blocks/header');

Переменные

Вы можете передать в шаблон переменную любого типа (включая ассоциативные и числовые массивы) с помощью метода setVar($key, $value):

$template->setVar('title', 'Привет, мир!');

$test = array('foo', 'sub' => array('bar', true, 3.5));
$template->setVar('test', $test);

Значение переменной может быть изменено в процессе выполнения шаблона. Чтобы получить новое значение используйте метод getVar($key):

echo $template->getVar('title');

Для извлечения определенного элемента массива применяется точечный синтаксис:

echo $template->getVar('test.0'); #foo
echo $template->getVar('test.sub.2'); #3.5

Точечный синтаксис можно использовать и с методом setVar(), для того чтобы добавить в массив новый элемент или изменить значение существующего, не затрагивая массив целиком:

$template->setVar('test.sub.0', 'Новое значение'); #заменяет "bar" на "Новое значение"

ЗАМЕТКА: Ассоциативные ключи приоритетней числовых. Например, если в массиве содержатся элементы с ключами 2 и "2", то точечный синтаксис указывает на последний.

Кэширование

Шаблон кэшируется (если кэширование включено) при первом вызове метода getTemplate(). При последующих вызовах будет использован кэш. Он не имеет ограничений по времени или каких-либо проверок актуальности. Все просто — если кэш существует, то он будет использован. Таким образом, если вы изменили шаблон (или подключенный к нему подшаблон), то чтобы получить актуальный результат существует три варианта:

  1. Отключить кэширование, установив $cacheEnabled = false;
  2. Удалить закэшированный файл из папки кэша;
  3. Вызвать метод getTemplate(), указав вторым параметром true. Это означает, что вы хотите обновить кэш шаблона.

Обработка ошибок

Установить уровень отображения ошибок можно с помощью PHP функции error_reporting(). Однако, два типа ошибок обрабатываются непосредственно движком Dextep. Это ошибки «шаблон не найден» и «зацикленное подключение подшаблона». При возникновении одной из них Dextep просто останавливает выполнение скрипта командой die(). Вы можете переопределить поведение по умолчанию, переписав метод error() с учетом своих потребностей.

Синтаксис шаблонов

Теги Dextep обрамляются фигурными скобками { и }. Содержимое шаблонов вне этих скобок отображается без изменений. Чтобы отобразить фигурную скобку { или }, используйте специальный тег {lb} или {rb} соответственно.

Комментарии

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

{* Это комментарий *}

Переменные и выражения

Чтобы отобразить значение переменной, просто укажите ее имя с префиксом $, заключив все это в фигурные скобки. Элемент массива может быть отображен с помощью точечного синтаксиса, описанного выше. Например:

{$title}
{$test.sub.0}

Кроме того, вы можете использовать выражения и присваивать значения переменным:

{$var = $array.key + 5}
{$a * (2 + $b)}

Первое выражение присвоит вычисленное значение переменной $var и отобразит его. Второе — только отобразит вычисленное значение без каких-либо присвоений. Если вам необходимо установить значение переменной, не отображая его, воспользуйтесь префиксом @ перед выражением:

{@$b = 5}

Операторы выражений в Dextep практически идентичны операторам в PHP. Полный список приведен в приложении.

ЗАМЕТКА: Строковые выражения поддерживаются не полностью. Можно соединять строковые переменные оператором . (точка), но нельзя использовать строковые константы. Также необходимо оставлять пробел перед оператором . (точка), чтобы избежать путаницы с точечным синтаксисом в массивах:

{$s = $test.0 . $test.sub.0}

Переменные с префиксом $ в основном используются для передачи значений из скрипта в шаблон. Однако, как можно увидеть в выше, позволяется изменять значения и даже определять новые переменные внутри шаблона в процессе его выполнения. Все эти переменные доступны из скрипта благодаря методу getVar. Если же необходимо определить переменную, недоступную извне, то вместо $ следует применять префикс %:

{%var = 2*$var}

Заметьте, что переменные %var и $var не идентичны. Переменные с префиксом % также используются с циклами for и foreach (см. ниже).

ЗАМЕТКА: Вероятно, вам понадобится использовать какую-либо переменную в качестве индекса для поиска нужного элемента массива. Здесь необходимо запомнить, что это возможно только с %-переменными. Чтобы обойти это ограничение, можно поступить следующим образом:

{%i = $i}
{$array.%i}

Условия {if}

Конструкция {if} аналогична if в PHP. Каждому тегу {if} должен соответствовать закрывающий тег {/if}. В качестве условия допускаются любые выражения или переменные:

{if $bool} Этот текст будет отображен, только если выражение $bool истинно {/if}

Также допускается применение тегов {else} и/или {elseif}:

{if $a < 5}
   Низкий
{elseif $a > 10}
   Высокий
{else}
   Средний
{/if}

Циклы {foreach}

Опять же, конструкция {foreach} в шаблоне практически соответствует foreach в PHP. Она используется для обхода ассоциативного или числового массива. Каждому тегу {foreach} должен соответствовать закрывающий тег {/foreach}:
{foreach $array as %item}
   Элемент = {%item},
{/foreach}

На этом пример строка внутри {foreach} повторяется столько раз, сколько элементов в массиве $array. Обратите внимение на префикс % второй переменной. В каждой итерации переменной %item присваивается значение соответствующего элемента массива. Если она была определена до {foreach}, то первоначальное значение будет утеряно. Доступ к ключам массива реализуется так же, как и в PHP:

{foreach $array as %key => %value}
   Заметьте, что здесь {$array.%key} — тоже, что и {%value}
{/foreach}

Циклы {for}

Тег {for} применяется для повторения какой-либо части шаблона определенное число раз. Он обладает четырмя обязательными аттрибутами: var определяет изменяемую переменную, from и to — границы повторений, а step — насколько будет изменяться значение var с каждой итерацией. Тегу {for} также должен соответствовать закрывающий тег {/for}:

{for var=%i from=9 to=0 step=-2}
   {%i}
{/for}

Этот пример вернет результат «9 7 5 3 1».

ЗАМЕТКА: Аттрибуты from и to могут быть также выражениями или переменными, но step может быть только числом.

Подшаблоны

Наконец, Dextep позволяет подключать в шаблон подшаблоны с помощью тега {include}:

{include "subtemplate"}

Имя шаблона может быть заключено в одинарные (') или двойные кавычки ("), хотя это и не обязательно. Область видимости переменных распространяется на подшаблоны.

Приложение. Выражения и операторы

$a, $b и $c, используемые ниже, являются переменными, но могут представлять константы и подвыражения (за некоторыми исключениями, аналогичными синтаксису PHP).

Арифметические операторы:

ВыражениеОписание
$a = $bПрисваивает переменной $a значение $b
$a . $bОбъединяет строковые переменные $a и $b
$a + $bСкладывает $a и $b
$a - $bВычитает $b из $a
$a * $bУмножает $a на $b
$a / $bДелит $a на $b
$a % $bДелит $a на $b и возвращает остаток деления
-$aВозвращает число, противоположное $a
++$aПрибавляет единицу к $a до вычисления всего выражения
--$aВычитает единицу из $a до вычисления всего выражения
$a++Прибавляет единицу к $a после вычисления всего выражения
$a--Вычитает единицу из $a после вычисления всего выражения
$a += $bТо же, что и $a = $a + b
$a -= $bТо же, что и $a = $a - b
$a *= $bТо же, что и $a = $a * b
$a /= $bТо же, что и $a = $a / b

Логические операторы:

ВыражениеОписание
$a ? $b : $cЕсли $a истинно, то $b, в противном случае — $c
$a && $bВыражение истинно, если истинны оба $a и $b
$a || $bВыражение истинно, если истинно хотя бы $a или $b
!$aВыражение истинно, если $a ложно
$a == $bВыражение истинно, если значения равны
$a === $bВыражение истинно, если значения и типы данных равны
$a != $bВыражение истинно, если значения не равны
$a !== $bВыражение истинно, если значения или типы данных не равны
$a < $bВыражение истинно, если $a меньше $b
$a > $bВыражение истинно, если $a больше $b
$a <= $bВыражение истинно, если $a меньше либо равно $b
$a >= $bВыражение истинно, если $a больше либо равно $b

Также вы можете переопределять порядок вычисления частей выражения с помощью скобок ( и ).

Лицензионное соглашение

Этот класс распространяется на условиях лицензии BSD (license.txt в архиве)

2 комментария

$a = $b Устанавливает переменную $a в значение $b

может чуть чуть по-другому?:
Устанавливает переменную в $a значение $b

Саша @ 15 сентября 2011

Переформулировал, чтобы не было двусмысленности. Спасибо.

Алексей @ 15 сентября 2011