Шаблонизатор Dextep
Руководство пользователя
dextep_v1.0.zip, ~21 кб
- Что это такое?
- Установка и настройка
- Dextep в действии
- Синтаксис шаблонов
- Приложение. Выражения и операторы
- Лицензионное соглашение
Что это такое?
Dextep — довольно простой движок для работы с шаблонами на PHP. Он создавался как легкий инструмент для применения архитектурной парадигмы MVC. Другими словами, вы сможете отделить логику приложения от пользовательских интерфейсов.
Движок поддерживает базовую логику — простейшие выражения, условный оператор {if}
, циклы {for}
и {foreach}
, а также подключение подшаблонов. Синтаксис Dextep напоминает Smarty, однако он гораздо проще, учитывая меньшее количество функций и предлагаемых возможностей. Dextep также компилирует шаблон и кэширует его для достижения максимальной скорости работы.
Установка и настройка
Для работы Dextep требуется веб-сервер с PHP 4.4.9 или выше. Предыдущие версии должны поддерживаться вплоть до PHP 4.0.6, но тестирование не проводилось. Можете попробовать запустить test.php
, чтобы проверить это самостоятельно.
Чтобы установить Dextep, скачайте архив, после чего:
- распакуйте
Dextep.class.php
на сервер, если вы используете PHP 5 или выше; - если у вас PHP 4, то вам следует использовать файл
Dextep-php4.class.php
(при желании вы можете переименовать его вDextep.class.php
).
Вы можете включить/отключить кэширование, изменить пути к папкам шаблонов и кэша, а также расширения файлов шаблонов. Для этого измените соответствующие значения свойств класса 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()
. При последующих вызовах будет использован кэш. Он не имеет ограничений по времени или каких-либо проверок актуальности. Все просто — если кэш существует, то он будет использован. Таким образом, если вы изменили шаблон (или подключенный к нему подшаблон), то чтобы получить актуальный результат существует три варианта:
- Отключить кэширование, установив
$cacheEnabled = false
; - Удалить закэшированный файл из папки кэша;
- Вызвать метод
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
Саша @ 15 сентября 2011
Алексей @ 15 сентября 2011