XanderBass/quadbraces
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
1. Что это?
Парсер QuadBraces - это реализация парсера-шаблонизатора MODX / Etomite.
Реализация отдельная, что позволяет использовать синтаксис MODX без установки
этого движка на проект. Также следует отметить, что синтаксис расширенный.
2. Поддерживаемые элементы
[+ +] - ЛОКАЛЬНЫЕ ПЛЕЙСХОЛДЕРЫ
В большинстве случаев используются для переменных сниппетов,
в циклах. При установке аргументов любого элемента, кроме
сниппетов, локальные плейсхолдеры элемента заменяются значениями
из аргументов.
{{ }} - ЧАНКИ
Куски HTML-кода. В одном файле содержится один чанк.
Один из основных элементов шаблонизации.
{[ ]} - ОДНОСТРОЧНЫЕ ЧАНКИ ИЗ БИБЛИОТЕК
Куски HTML-кода. В одном файле содержится несколько чанков.
На каждой строке один чанк.
{( )} - МНОГОСТРОЧНЫЕ ЧАНКИ ИЗ БИБЛИОТЕК
Куски HTML-кода. В одном файле содержится несколько чанков.
Чанки разделяются конструкцией "<!-- tags:splitter -->".
{* *} - КОНСТАНТЫ PHP
Выводят определённые в системе константы PHP.
[( )] - НАСТРОЙКИ
Переменные из массива SETTINGS. Обычно служат для вывода
переменных CMS, использующей парсер.
[* *] - ПЛЕЙСХОЛДЕРЫ
Переменные парсера. Один из основных элементов шаблонизации.
[^ ^] - ОТЛАДОЧНЫЕ ДАННЫЕ
Отладочные данные парсера.
[% %] - ЯЗЫКОВЫЕ ЭЛЕМЕНТЫ
Словарно-языковые переменные. Заменяются в зависимости от текущего
языка при включённой языковой системе.
[! !] - СНИППЕТЫ
Выполняемые куски кода.
[[ ]] - СНИППЕТЫ С ФЛАГОМ КЕШИРОВАНИЯ
Выполняемые куски кода. Отличаются от предыдущего вида тегов установленным
флагом кеширования.
[~ ~] - ССЫЛКИ ПО ИДЕНТИФИКАТОРАМ РЕСУРСОВ
Превращают помещённое внутрь число в ссылку на ресурс.
[: :] - КАСТОМНЫЕ ОБРАБОТЧИКИ ПЕРЕМЕННЫХ
Общий синтаксис элемента внутри управляющих скобок:
ключ_элемента:расширение1=`значение`:расширение2 &арг1=`знач` &арг2=`знач`
Иными словами сначала идёт ключ элемента. Затем используемые расширения,
если таковые используются. Затем ряд аргументов, если таковые используются.
ОБРАТИТЕ ВНИМАНИЕ:
- Точка в названиях чанков, сниппетов и шаблонов заменяется при поиске файла
на системный разделитель каталогов. Это позволяет создавать шаблонные
структуры любого уровня вложенности. Притом последний элемент однострочных
и многострочных библиотечных чанков означает уже порядковый номер чанка
в библиотеке. Точка в названии переменных и "настроек" интерпретируется,
как разделитель уровня вложенности (см. CHANGE.LOG). Точка в названиях
остальных элементов интерпретируется, как точка.
- У некоторых расширений есть дополнительные "расширения". Например, у
базовой логики есть расширения "then" и "else".
- При обработке внутренних плейсхолдеров расширений обрабатываются только
базовые расширения логики оных
- В целях совместимости с MODX/Etomite после расширений перед аргументами
может следовать знак вопроса
3. Поддерживаемые расширения
is, eq - равенство (сравниваемое значение, then, else)
isnot, neq - неравенство (сравниваемое значение, then, else)
lt - меньше, чем (сравниваемое значение, then, else)
lte - меньше, чем, или равно (сравниваемое значение, then, else)
gt - больше, чем (сравниваемое значение, then, else)
gte - больше, чем или равно (сравниваемое значение, then, else)
even - признак чётности (сравниваемое значение, then, else)
odd - признак нечётности (сравниваемое значение, then, else)
empty - признак пустого значения (значение "тогда", else)
notempty - признак непустого значения (значение "тогда", else)
null, isnull - является ли значение NULL (значение "тогда", else)
notnull - является ли значение не NULL (значение "тогда", else)
isarray - является ли значение массивом (значение "тогда", else)
for - целочисленный итератор (количество итераций, start, splitter)
foreach - индексный итератор (список индексов через запятую, splitter)
js-link - превращает значение в ссылку на скрипт
css-link - превращает значение в ссылку на таблицу стилей
import - превращает значение в ссылку на таблицу стилей (@import для CSS)
link - превращает значение в ссылку (заголовок)
link-external - превращает значение во внешнюю ссылку (заголовок)
links - преобразует все URL-ы в значении в ссылки (атрибуты ссылок)
ul, ol - превращает многострочное значение в список (шаблон элемента списка) *
* - имеет два внутренних плейсхолдера:
[+classes+] - классы элемента (first, last)
[+item+] - собственно строка
- Для расширения for доступен внутренний плейсхолдер [+iterator+],
содержащий номер текущей итерации
- Для расширения foreach доступны внутренние плейсхолдеры:
[+iterator.index+] - номер позиции текущей итерации
[+iterator+] - текущий индекс
4. События
init($p) - Завершение конструктора
$p - парсер
beforeChangeData($v,$p) - До изменения данных переменных
$v - устанавливаемые переменные
$p - парсер
changeData($v,$p) - Изменение данных переменных
$v - устанавливаемые переменные
$p - парсер
beforeChangeSettings($v,$p) - До изменения данных настроек
$v - устанавливаемые настройки
$p - парсер
changeSettings($v,$p) - Изменение данных настроек
$v - устанавливаемые настройки
$p - парсер
beforeLoadDictionary($v,$p) - До загрузки словаря
$v - словарь
$p - парсер
loadDictionary($v,$p) - Загрузка словаря
$v - словарь
$p - парсер
methodNotFound($n,$p) - Метод не найден
$n - Название метода
$p - парсер
beforeSetLanguage($v,$p) - До установки языка
$v - язык
$p - парсер
setLanguage($v,$p) - При установке языка
$v - язык
$p - парсер
setContent($v,$p) - При установке контента
$v - контент
$p - парсер
setResources($v,$p) - При установке ресурсов
$v - данные ресурсов
$p - парсер
invalidHandler($n,$a,$p) - При отсутствии обработчика событий
$n - название обработчика
$a - переданные аргументы
$p - парсер
setResources($v,$p) - При установке ресурсов
$v - данные ресурсов
$p - парсер
defaultTemplate($p) - Дефолтный шаблон (попытка установить пустой шаблон)
$p - парсер
loadTemplate($v,$p) - При установке шаблона
$v - название шаблона
$p - парсер
templateMotFound($v,$p) - При отсутствии шаблона
$v - название шаблона
$p - парсер
templateFields($v,$p) - Получение полей шаблонов
$v - поля шаблона
$p - парсер
templateData($v,$p) - Получение данных шаблона
$v - данные шаблона
$p - парсер
beforeLocalParse($v,$d,$p) - До локальной обработки
$v - шаблон
$d - данные
$p - парсер
beforeParse($v,$p) - До обработки
$v - шаблон
$p - парсер
localParse($v,$p) - После обработки локального шаблона (до санитизации)
$v - шаблон
$p - парсер
parse($v,$p) - После обработки шаблона (до санитизации)
$v - шаблон
$p - парсер
5. Использование
<?php
require 'quadbraces/parser.php';
$parser = new QuadBracesParser();
// Назначаем путь к шаблонным данным
$parser->paths = $_SERVER['DOCUMENT_ROOT'].'content'.DIRECTORY_SEPARATOR.'tpl';
// Шаблон должен находиться в %tplpath%/templates/mytemplate.html
$parser->template = 'mytemplate';
// Устанавливаем данные. Массив, содержащий какие угодно данные. По плейсхолдерам - выше
$parser->data = array(
'title' => 'Заголовок страницы'
'content' => 'Лорем ипсум... =)'
);
echo $parser->parse();
?>
6. Примеры синтаксиса
{{my_chunk}}
Выведет содержимое файла "my_chunk.html" из папки с шаблонами
{{my.chunk}}
Выведет содержимое файла "my/chunk.html" из папки с шаблонами
{{my.chunk &foo=`bar`}}
Выведет содержимое файла "my/chunk.html" из папки с шаблонами, заменив
внутри плейсхолдер "[+foo+]" на значение "bar"
{*MY_CONSTANT*}
Выведет значение константы "MY_CONSTANT", если таковая определена
{*MY_CONSTANT:empty=`foobar`*}
Выведет значение константы "MY_CONSTANT", если таковая определена,
иначе (или если константа пуста) выведет "foobar"
[(my_setting)]
Выведет значение элемента "my_setting" из массива settings парсера
[*my_placeholder*]
Выведет значение элемента "my_placeholder" из массива data парсера
[^totalmem.kb^]
Выведет значение потребляемого ОЗУ в килобайтах с округлением в два знака
[!my.snippet &arg1=`foo` &arg2=`bar`!]
Выполнит код из файла "my/snippet.php" из папки с шаблонами,
передав в переменную arguments внутри обёртки массив:
array('arg1' => 'foo','arg2' => 'bar')
[%my_lang_string%]
Выведет CAPTION языкового элемента "my_lang_string" текущего языка
[%my_lang_string.hint%]
Выведет HINT языкового элемента "my_lang_string" текущего языка
[:data@my_data:]
Выведет элементы списка элемента "my_data" массива data парсера.
Выводимый код каждой итерации будет примерно таким:
[:data@my_data &langKeys=`1`:]
Выведет элементы списка элемента "my_data" массива data парсера
с подстановкой в качестве ключа языкового плейсхолдера.
Выводимый код каждой итерации будет примерно таким:
<li>
<span class="key">[%ключ_элемента%]</span>
<span class="value">значение_элемента</span>
</li>
[:data@my_data &langKeys=`1` &langPrefix=`myprefix`:]
Выведет элементы списка элемента "my_data" массива data парсера
с подстановкой в качестве ключа языкового плейсхолдера.
Выводимый код каждой итерации будет примерно таким:
<li>
<span class="key">[%myprefix.ключ_элемента%]</span>
<span class="value">значение_элемента</span>
</li>
[:data@my_data &chunk=`my.chunk`:]
Выведет элементы списка элемента "my_data" массива data парсера.
Выводимый код каждой итерации будет примерно таким:
{{my.chunk ... }}
На месте троеточия будет строка аргументов, передаваемых в чанк, ключом
каждого из которых будет ключ под-элемента, а значением - значение оного.
Очень востребовано для вывода значений, являющихся двухмерными массивами.