Clone wiki

CMS / Подключение шаблонизатора

Шаблонизатор AtomM CMS

Наверно многие, кто строил хорошее ПО, ориентированное на пользователя знающего только html, сталкивался с реализацией меток, частей кода(строки) которые заменяются на нужное пользователю содержимое. В нашей CMS, конечно, не обошлось без них. С помощью них работают наши шаблоны и многие другие разделы CMS, но в отличие от своих конкурентов, у нас любой разработчик модуля, плагина или даже сниппета может легко использовать привычный в CMS синтаксис меток в своих программах-дополнениях, без лишнего “шестрения” этого весьма непростого механизма.

Функция, которая нам в этом помогает, вызывается так:

$Viewer->parseTemplate($template, array('people' => $arraymarkers))

  • $template - строка, в которой нужно произвести замену меток на нужный нам код.
  • people - название массива от которого будут наследоваться названия меток.( {{ people.name }} )
  • $arraymarkers – ассоциативный массив из: название метки => значение

  • Пример $arraymarkers :

Array(
    'name' => 'Дарья',
    'subname' => 'Петрова',
    'age' => '18'
);

Для более эффективного и полноценного примера рассмотрим код:

// Получаем строку с метками из файла
$template = file_get_contents(dirname(__FILE__).'/template/index.html');

// Подключаем класс(именно с таким имененем)
$Viewer = new Fps_Viewer_Manager;

// Создаем массив (ключи это названия меток)
$markers = array();
$markers['name'] = 'Дарья';
$markers['subname'] = 'Петрова';
$markers['age'] = '18';

//Получаем строку с замененными метками
$template = $Viewer->parseTemplate($template, array('people' => $markers));

Обратите внимание на запись последней и самой главной строки. Нужно обязательно не забыть наследование от $Viewer и всегда устанавливать массив с метками, вложенным в ключ другого: array('people' => $markers). Также обратите внимание, обращение к элементам массива происходит через точку. Тоесть, если рассматривать данный пример, то наши метки будут выглядеть так(именно с пробелами): {{ people.name }}{{ people.subname }}{{ people.age }}

Дополнительные функции шаблонизатора.

Как вы уже догадались, такая относительно сложная запись не просто так. Она необходима для дополнительных функций. Именно ради этих дополнительных функций и создавался шаблонизатор, ради поддержки операторов, условных выражений и циклов, include, fetch-функций и других заложенных в cms функций.

Если вам эти функции не нужны, а нужно просто заменить голую метку, то не советую использовать шаблонизатор, лучше обойтись стандартными функциями php: preg_replace() и str_replace().

Подробнее о возможностях и синтаксисе шаблонного интерпретатора написано тут: Синтаксис шаблонного интерпретатора

Как правильно подготовить содержимое метки для работы с циклами.

Если метке присвоить массив, то к его ключам можно обратиться через специальные циклические конструкции. Например: Мы присвоили метке с именем names вот такой массив

Array(
    [0] => Array(
        'name' => 'Дарья',
        'subname' => 'Петрова',
        'age' => '18'
    ),
    [1] =>  Array(
        'name' => 'Мария',
        'subname' => 'Родионова',
        'age' => '48'
    ),
    [2] => Array(
        'name' => 'Павел',
        'subname' => 'Романов',
        'age' => '98'
    )
);

И тогда можно будет использовать цикл, для извлечения информации из массива:

{% for mark in names %}
    {{ mark.name }} - имя
    {{ mark.subname }} - фамилия
    {{ mark.age }} - возраст
{% endfor %}

Где mark произвольная комбинация латинских букв и цифр, а names название метки с массивом.

Результатом данного примера будет:

Дарья - имя
Петрова - фамилия
18 – возраст
Мария - имя
Родионова - фамилия
48 – возраст
Павел  - имя
Романов  - фамилия
98 - возраст

Updated