MODX. Теги для материалов сайта
Отредактировано: 13 Августа 2018
Способ создания тегов на MODX можно выбрать исходя из потребностей. Если нужен только вывод цепочки тегов в статье, можно использовать маленький самодельный сниппет. Если же нужен расширенный функционал, то уместно использование компонента, к примеру tagLister. Независимо от того, какой способ будет выбран, у них есть общие этапы. Ниже приведены общие действия, и 2 различных способа создания тегов.
Общие действия
- Для начала, создадим дополнительное поле (TV, Template Variables). Параметры, которые необходимо проставить новому полю:
- Имя: tags;
- Подпись: Теги;
- Тип ввода: Авто-метка;
- На вкладке «доступно для шаблонов» откроем доступ шалонам, в которых должно выводиться данное поле.
- Создадим страницу, на которой будут выводится результаты выборки по тегам. Для этого во вкладке со списком ресурсов создадим новый материал с полями:
Запомните ID созданного ресурса — он нам еще понадобится.
- Заголовок: Поиск по тегу;
- Псевдоним: tag;
- Поставленными галочками: «Не показывать в меню» и «Опубликован»;
- На вкладке «Настройки страницы» убираем галочки «Использовать html-редактор», «Доступен для поиска», «Кешируемый»;
- Заполняем поле содержимого документа (Обратите внимание, вместо getResources можно использовать pdoResources):
[[!getResources? &parents=`1,4,10` &tpl=`tpl.tag-item` &includeTVs=`1` &processTVs=`1` &includeContent=`1` &limit=`100` &hideContainers=`1` &tvFilters=`tags==%[[GET]]%` ]]
- parents: указываем id ресурсов-папок, материалы которых будут выводиться при поиске;
- tpl: шаблон вывода ресурсов;
- includeTVs: включаем обработку TV параметров;
- processTVs: тоже надо включить, чтобы TV параметры работали;
- includeContent: указываем, что надо выводить содержимое ресурсов, в противном случае будет выведен массив данных ресурсов (иногда так же является полезным);
- limit: число документов для отображения, пока поставим 100, чтобы вывести все, потом можно будет выставить необходимое;
- hideContainers: не будем выводить ресурсы являющиеся папками;
- tvFilters: фильтр на основе, которого будем решать выводить ресурс или нет.
- Создадим чанк tpl.tag-item в котором будет шаблон для вывода элементов. Его примерное содержание:
<div class="article"> <h4><a href="[[+uri]]">[[+pagetitle]]</a></h4> <p>[[+introtext]]</p> </div>
Простейший вывод тегов с помощью сниппета
- Создадим снипет обрабатывающий запрос со следующим кодом: Имя сниппета: GET
<?php if (!empty($_GET["tag"])) { echo ($_GET["tag"]); } else { echo ('none'); }
- Создадим сниппет для вывода тегов в материале (Обратите внимание на то, что вместо 27 в пятой строке надо поставить ID документа созданного для вывода результата): Имя сниппета: put_tags
<?php if ($input == '') { return ''; } // Вывод если TV пустой $tags = explode(',',$input); // Составление массива, по разделителю ',' foreach ($tags as $key =--> $value) { // цикл перебора тегов $output[] = '<a class="tags" rel="nofollow" href="'.$modx->makeurl(120, '', array('tag' => $value)).'" title="'.$value.'"> '.$value.' </a>'; // Добавление выходному массиву элемента // ссылки на ресурс вывода 94 методом GET } return implode(', ',$output); // Вывод получившегося массива ссылок
- Вывод тегов в шаблоне:
[[!put_tags? &input=`[[*tags]]`]]
- Теперь заходим в статью и заполняем TV поле tags. Для начала надо будет самому вписать нужные теги через запятую, а вот потом в ресурсах появиться возможность выбора тегов из уже использованных
Создание тегов с помощью tagLister
- Устанавливаем компонент tagLister;
Список тегов текущего ресурса
Если нужен вывод тегов текущего ресурса, в шаблоне выводим
[[!tolinks? &items=`[[*tags]]` &target=`123`]]
Параметры:
- &items — Имя или ID TV в котором находятся теги;
- &target — ID страницы на которой должны выводиться результаты;
- &tpl — шаблон вывода одного элемента;
- &inputDelim — разделитель для входящего поля тегов. По умолчанию запятая;
- &outputDelim — разделитель для вывода тегов. По умолчанию запятая;
- &tagRequestParam — ключ запроса REQUEST, который будет использоваться при создании ссылок;
- &cls — имя CSS класса для добавления к каждому результату;
- &toPlaceholder — если установлен, все данные вместо вывода будут записаны в плейсхолдер;
- &tagKey — имя группы тегов, используемое при создании ссылок.
Облако тегов
Для вывода облака всех возможных тегов используем
[[!tagLister? &tv=`tags` &target=`123`]]
Параметры:
- &tv — Имя или ID TV в котором находятся теги;
- &target — ID страницы на которой должны выводиться результаты;
- &tpl — шаблон вывода одного элемента;
- &toDelim — разделитель для входящего поля тегов. По умолчанию запятая;
- &all — показывает ссылку «Все теги»;
- &allTpl — шаблон для ссылки «Все теги».
Шаблон для тегов по умолчанию
<li class="[[+cls]]">
<a href="[[~[[+target]]? &[[+tagVar]]=`[[+tag]]`]]">[[+tag]]</a> ([[+count]])
</li>
Ссылка на полную документацию tagLister
Автопростановка тегов
Для автоматического ввода тегов, в зависимости от раздела, контекста или каких либо еще параметров, надо в дополнительном поле tags, на вкладке параметры ввода, в поле "Значение по умолчанию" подключить сниппет, проставляющий теги. Ниже представлен пример с распределением по разделам родителя:
// в поле значение по умолчанию пишем
@EVAL return $modx->runSnippet('tags_default');
// в сниппете tags_default
$parentIds = $modx->resource->get('parent');
switch ($parentIds) {
case 1:
return "tag 1";
break;
case 2:
return "tag 2";
break;
case 3:
return "tag 3";
break;
}
Здравствуйте!
Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи.