Skip to content

Serg28/quadbraces

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. Что это?

Парсер QuadBraces - это реализация парсера-шаблонизатора MODX / Etomite.
Реализация отдельная, что позволяет использовать синтаксис MODX без установки
этого движка на проект. Также следует отметить, что синтаксис расширенный.

ОБРАТИТЕ ВНИМАНИЕ! Парсер QuadBraces подерживается теперь в рамках пакета xbParser библиотеки xbLib.

2. Поддерживаемые элементы

[+  +] - локальные плейсхолдеры
{{  }} - чанки
{[  ]} - однострочные чанки из библиотек
{(  )} - многострочные чанки из библиотек
{*  *} - константы PHP
[(  )] - "настройки"
[*  *] - плейсхолдеры
[^  ^] - отладочные данные
[%  %] - языковые элементы
[!  !] - сниппеты
[:  :] - кастомные обработчики

Общий синтаксис элемента внутри управляющих скобок:
ключ_элемента:расширение1=`значение`:расширение2 &арг1=`знач` &арг2=`знач`

Иными словами сначала идёт ключ элемента. Затем используемые расширения,
если таковые используются. Затем ряд аргументов, если таковые используются.

ОБРАТИТЕ ВНИМАНИЕ:
- Точка в названиях чанков, сниппетов и шаблонов заменяется при поиске файла
  на системный разделитель каталогов. Это позволяет создавать шаблонные
  структуры любого уровня вложенности. Притом последний элемент однострочных
  и многострочных библиотечных чанков означает уже порядковый номер чанка
  в библиотеке. Точка в названии переменных и "настроек" интерпретируется,
  как разделитель уровня вложенности (см. CHANGE.LOG). Точка в названиях
  остальных элементов интерпретируется, как точка.
- У некоторых расширений есть дополнительные "расширения". Например, у
  базовой логики есть расширения "then" и "else".
- При обработке внутренних плейсхолдеров расширений обрабатываются только
  базовые расширения логики оных

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. Использование
<?php
  require '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();
?>

5. Примеры синтаксиса
{{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

No packages published

Languages

  • PHP 100.0%