Freeocart

Проект свободной экосистемы Opencart

Как работает встроенная система шаблонизации в FOC:CSV

Краткий мануал по системе шаблонов, доступных в модуле FOC:CSV

Привет ребята! В одном из прошлых анонсов я писал что в модуле импорта/экспорта завезли поддержку «мультиколоночного преобразователя«, который управляется элементарной системой шаблонизации.

За таким сложным словом стоит весьма простое определение – мы берём контент нескольких колонок CSV, определённым образом обрабатываем их и складываем результат в одну ячейку.

На текущий момент, система шаблонизации поддерживает интерполяцию переменных, простые циклы и использование нескольких разрешённых функций.

В этом посте мы рассмотрим каждую из этих возможностей подробнее. А в конце я покажу как можно использовать шаблонизатор в своих проектах (хотя я не рекомендую этого делать — он очень ограничен)

Переменные

Для вывода значения переменной в шаблоне используется классическая конструкция – {{ VARIABLE }}. Если в VARIABLE скалярное значение, т.е. например, текст или число, то оно будет выведено. В случае, если вы пытаетесь интерполировать массив, будет выведено его JSON представление.

Циклы

Циклы используются для обхода массивов и имеют следующий синтаксис:

[@each (value,index) <= source]
// тело цикла, например {{ index }}
[@endeach]

// либо
[@each value <= source]
// тело цикла, например {{ loop.index }}
[@endeach]

Индексация начинается с 1, и доступна либо во второй переменной объявления цикла (в примере выше — index),  либо через специальную переменную — loop.index.

Функции

Синтаксис функций имеет вид:

[@fn FUNCTION_NAME | @argument] или [@fn FUNCTION_NAME | «Value»]

Обратите внимание, синтаксис с @ используется для подстановки значения переменной, в то же время в кавычках можно передавать своё значение. Например:

[@fn date | «Y-m-d»] будет обработано как date(«Y-m-d»)

[@fn md5 | @variable] будет обработано как md5($variables[‘variable’])

Список доступных для использования функций:

Список разрешённых функций находится в защищенном свойстве enabled_functions, добавление своих функций возможно только с помощью OCMod.

Использование шаблонизатора в своих проектах

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

Однако, если вы все же решили использовать FOCSimpleTemplater, вам нужно всего лишь подключить этот класс (system/library/FocSimpleTemplater.php), например, используя $this->load->library(‘FocSimpleTemplater’), и вызвать статический метод render, первым аргументом которого является шаблон, а вторым — хэш с переменными:

$variables = array('hello' => 'world', 'arr' => array('arr1', 'arr2'));
$template = <<<TEMPLATE
  <h1>{{ hello }}</h1>

  <time datetime="[@fn date | "Y-m-d H:i"]">[@fn date | "d.m.Y"]</time>

  [@each (v,i) <= arr]
    <span>{{ i }}</span> : <span>{{ v }}</span>
  [@endeach]
TEMPLATE;

$this->load->library('FocSimpleTemplater');
echo FocSimpleTemplater::render($template, $variables);</code></pre>

Приведённый выше код сгенерирует такое представление:

<h1>world</h1>
<time datetime="2019-04-30 12:00">30.04.2019</time>
<strong>1</strong> : <span>arr1</span>
<strong>2</strong> : <span>arr2</span>

Как видите, в шаблонизации FOC:CSV нет ничего сложного, она изначально разрабатывалась чтобы быть максимально простой в использовании и не иметь никаких зависимостей.