Design by Excellent


Text

Sep 18, 2010
@ 4:34 am
Permalink

Использование сниппетов(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)