Использование сниппетов(snippets) в качестве выходных фильтров в MODx Revo
Рассмотрим как использовать сниппеты MODx в качестве выходных фильтров в MODx Revo. Выходные фильтры (output filters) обновлённый эквивалент выходным виджетам, которые доступны в MODx Evolution, например PHx и будучи в состоянии использовать сниппеты, как выходной фильтр обеспечивают высокую гибкость.
Например, для формата даты TV:
[[* Createdon: strtotime: дата = “% Y-% M-% D`]]
Выходные фильтры могут быть прикреплены к любому элементу, таких как TV (template variables) или плэйсхолдер, и они обеспечивают способ настроить вывод этого элемента на странице. В качестве примера, рассмотрим, использование сниппета как выходного фильтра для создания системы тегов.
Для начала, сделаем новый TV для шаблона поста в блоге, для удобства назначим тип TV - мультиселект, для того, чтобы нам удобнее было выбирать тэги для записей.
Теперь, в фронт-энде, я могу легко сделать из моей ссылки теги, установив тип вывода для TV как Delimiter - это позволяет отображать разделенную запятыми строку из моих тегов на странице блога. В данном случае мы не можем использовать этот вариант, т.к. нам нужны тэги со ссылками, чтобы обеспечить вывод всех сообщений в блоге, содержащих этот тег. Для этого нужно создать пользовательский выходной фильтр для нашего TV с тегами.
Каждый сниппет используемый как выходной фильтр получает несколько параметров, которые предоставляют необходимые данные об элементе который обрабатывается - вот параметры, которые относятся к нашему TV:
- вход: фактическое значение элемента - если у вас определены другие выходные фильтры, то будет обработано значение, полученное после предшествующих фильтров.
- опции: строка, которая может быть передана сниппету для определения каких-либо параметров, которые могут потребоваться. В данном примере это будет идентификатор страницы поиска тегов.
Так, на фрагменте:
if ($scriptProperties[‘input’] == ”) return ”;
$tags = explode(’||’, $scriptProperties[‘input’]);
$output = array();
foreach ($tags as $tag) {
$output[] = ‘<a href=”’ . $modx->makeUrl($scriptProperties[‘options’], ”, ‘tags=’ . $tag) . ’”>’ . $tag . ‘</a>’;
}
return implode(’, ‘, $output);
Сначала проверяем входные параметры: обработка завершится, если будут отсутствовать данные для обработки. После чего мы разобьем строку по разделителю для последующего формирования ссылок. Наконец, пребираем массив и оформляем ссылки, чтобы вернуть их после обработки.
Для применения этого фильтра, используем следующую конструкцию в вызове TV: [[*tags:toTagLinks=`14`]] возможность использовать сниппеты в качестве выходных фильтров еще одна мощная особенность MODx Revolution.
(Source: modx360.com)