Skip to content

XanderBass/quadbraces

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 ... }}

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

About

QuadBraces (MODX / Etomite) syntax parser

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages