Skip to content
QuadBraces (MODX / Etomite) syntax parser
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
data
lib Версия 3.0.0 (RC) Sep 18, 2017
oldversions Версия 3.0.0 Sep 14, 2017
tag Версия 3.0.0 (RC) Sep 15, 2017
.gitignore Версия 3.0.1 (RC) Aug 6, 2018
CHANGE.LOG Версия 3.0.1 (RC) Aug 6, 2018
README.txt Версия 3.0.1 (RC) Aug 6, 2018
parser.php

README.txt

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

  На месте троеточия будет строка аргументов, передаваемых в чанк, ключом
  каждого из которых будет ключ под-элемента, а значением - значение оного.
  Очень востребовано для вывода значений, являющихся двухмерными массивами.
You can’t perform that action at this time.