Чанки в PHP-платформе Wad-er – это библиотеки часто используемых фрагментов HTML-кода, которые можно размещать на разных страницах и в разных частях шаблона. Например, к чанкам относится заголовок страницы, фрагменты меню, форма поиска и т.п. Это позволяет значительно экономить время при создании приложения путем повторного использования кода.
Чанки не могут содержать PHP-код (для этого используются сниппеты). Чанки могут использоваться в качестве мини-шаблонов. В этом случае они содержат текст и теги плейсхолдеров.
Чанк может быть составным – включать другие чанки.
PHP-платформа Wad-er предлагает постоянно расширяемую библиотеку чанков. Это чанки, используемые для отображения различных элементов:
Библиотека чанков может самостоятельно пополняться пользователями платформы.
В платформе Wad-er чанк является объектом, отображаемым в Каталоге объектов. Для доступа к дереву чанков используется меню Элементы сайта – Чанки.
При выборе записи конкретного чанка, в правом фрейме отображается карточка чанка, имеющая ряд вкладок – Общие, Код чанка, Описание, Прочие и Лог.
В полях вкладки Общие задается;
На вкладке Код чанка размещается исходный текст чанка.
На вкладке Описание размещается краткое описание чанка и пример его использования сниппетом.
В полях вкладки Прочие задаются:
Вызываются чанки из шаблона с помощью тэгов . Здесь chunck – Код (id) чанка.
Циклы внутри чанков. Конструкция < loop >…< /loop > Используется для перечисления однородных HTML-элементов внутри чанка. Например:
< h5 class="widget-title">Ссылки< /h5 >
< ul >
< loop >
< li >< a href="" title="">< /a >< /li >
< /loop >
< /ul >
Содержимое тегов циклов – произвольное (…, < cycle>… ). Важно, чтобы эти теги не повторяли стандартные html-теги или не совпали с содержимым шаблона.
Замена циклической конструкции на динамическое содержимое происходит в сниппете. Например:
//id чанка
$tpl = isset($tpl) ? $tpl : 'sys_chunks_pagelist_refs';
$chunk = $parser->getChunk($tpl); //вызов нужного чанка
$links = array();
$links[] = array('{ * authoriz * }', '/login');
//проверка, встречается ли конструкция в чанке
$loop = (preg_match('|< loop >(.*)< /loop >|sei', $chunk, $arr)) ? $arr[1] : '';
$outstr = '';
foreach($links as $row)
{
//замена плейсхолдера на динамическое значение
$s = str_replace('{ + fresh.name + }', $row[0] , $loop);
//замена плейсхолдера на динамическое значение
$s = str_replace('{ + fresh.ref + }', $row[1], $s);
$outstr .= $s; //сохранение конструкции в памяти
}
//замена всей конструкции и вывод кода чанка в браузер
print(preg_replace("!< loop >(.*?)< /loop >!si", $outstr, $chunk));