БлогMODxРеализация тэгов в MODx

По созданию системы тэггирования уже есть статьи. Но там приводится несколько устаревшая информация. В моём материале речь идёт о MODx Evo 1.0.5, TvTagCloud 2.2.0.

Во-первых, поясню что делают сниппеты TvTagCloud и tagLinks.

  • TvTagCloud — берёт из определённого TV-параметра страниц тэги, разделённые запятыми и создаёт из них облако тэгов. С каждого тэга идёт ссылка на страницу с документами этого тэга.
  • tagLinks — берёт из определённого TV-параметра страниц тэги, разделённые запятыми (параметр TV тот же, что и для TvTagCloud) и делает ссылки на страницу с тэгами на этой же странице, из которой он дёрнул тэги.

Что делают и чем отличаются сниппеты tagLink и TvTagCloud

Во-вторых, создадим TV-параметр tags, куда будем помещать собственно тэги, разделённые пробелом и запятой. И не забудем пометить галочкой шаблон, в котором будет доступен этот TV-параметр.

Создадим TV-параметр tags

В-третьих, вводим нужные тэги на страницах блога в поле TV-параметра tags. Чтобы было что в дальнейшем выводить в облаке, да и в статье.

В-четвёртых, создаём страницу, на которой будет вывод тэгов происходить. Ниже вывод настроен на страницу с идентификатором 10. Документ с id равным 7 является папкой для статей или постов блога. Параметр dittoID содержит идентификатор вызова сниппета Ditto на странице 10, т.е. там, где будет отображаться выбранный пользователем тэг.

<div id="tagouter">
<span class="themes">Темы:</span>
<ul>
[!TvTagCloud? &parent=`7` &landing=`10` &tvTags=`tags` &dittoID=`tagid` &displayType=`custom` &customDisplayChunk=`tag_tpl` &limit=`8`!]
</ul>
</div>

Как видно из приведённого куска кода, я сделал собственный чанк для отображения тэгов. Это связано с тем, что если не делать вывод числа статей/постов для данного тэга, то после тэга останется пробел, который войдёт в ссылку, что будет некрасиво. Раньше этот пробел отделял слово тэга от количества статей/постов, но после того как количество убрали, пробел в ссылке остался. Ниже содержимое чанка tag_tpl.

<li><a href="/tag[+qs_seperator+][+url_param+]=[+urlencoded_tag+]">[+tag+]</a></li>

В-пятых, на странице вывода тэгов (у меня, как я говорил, это документ с id=10) делаем вызов Ditto, при это не забываем, что у нас идентификатор у вызова Ditto должен быть равен значению tagid.

[[Ditto? &startID=`7` &id=`tagid` &paginate=1 &summarize=`10` &tpl=`post` &tplLast=`post_last` &depth=`2` &extenders=`tagging` &sortBy=`createdon` &tagData=`tags` &tagDelimiter=`, ` &dateFormat=`%d.%m.%Y`]]

<div class="pages-list-block">
[+tagid_pages+]
</div>

В-шестых, если сайт в кодировке UTF-8, то вместо вывода тэгов Вы получите знаки вопросов. Чтобы этого избежать, в файле .htaccess прописываем строчки:

php_value mbstring.internal_encoding UTF-8
php_value default_charset UTF-8
php_value mbstring.func_overload 7

В-седьмых, на странице вывода тэга надо указать в заголовке Тэг такой-то. Для этого я использовал написанный мной сниппет getURLparam. Он дёргает название тэга из определённого параметра строки адреса. Параметр Вы можете задать сами. Ниже код сниппета getURLparam.

<?php
( isset($paramName) ) ? $paramName : $paramName = 'tags'; // Параметр, который надо отловить в URLе, по умолчанию tags
$param = $_REQUEST[$paramName];
$param = StripSlashes($param);
$param = HtmlSpecialChars($param);

if ($param != ''){
$output = str_replace("+"," ",$param);
}
else {$output = 'Все';}

$modx->setPlaceholder('tagword',$output);

return $output;
?>

Пример использования в тэге title. Выражение содержит условие PHx: если страница вызова 10, то после длинного заголовка вывести надпись Тэг: … — «Название сайта».

<title>[*longtitle*][+phx:if=`[*id*]`:eq=`10`:then=`Тэг: [[getURLparam? &paramName=`tagid_tags`]]`+] — «Название сайта»</title>

В шаблоне страницы вывода тэгов сниппет getURLparam конечно же можно использовать и без PHx:

[[getURLparam? &paramName=`tagid_tags`]]

В-восьмых, сниппет tagLinks я использовал года 2 назад, на данный момент он мне без надобности. Поэтому ниже опубликую перевод его параметров и пример использования.

  • &id = Идентификатор документа, из которого берутся тэги. По умолчанию - текущий документ. При использовании в шаблоне для Ditto, используйте &id=` чтобы данные выводились для того документа, который вывел Ditto.
  • &tv = параметр TV из которого брать тэги.
  • &delimiter = разделитель тэгов в списке TV-параметра. По умолчанию запятая с пробелом ",".
  • &label = Слово, выводимое перед списком тэгов. По умолчанию "Categories: ".
  • &separator = символ, разделяющий ссылки тэгов. Запятая (,) или вертикальная черта (|) например. По умолчанию не задан.
  • &element = Элемент, в который обернуть вывод [div/span/p]. По умолчанию "div".
  • &style = CSS-класс, применяемый к обёртке &element. По умолчанию "taglinks".
  • &format = Формат вывода ссылок. Может быть просто ссылкой `a`, ненумерованным списком `ul`, или нумерованным списком `ol`. По умолчанию просто ссылки `a`.
  • &newline = Добавить начало новой строки после каждого тэга. По умолчанию '1' (да, начать новую строку). Поставьте `0` и новая строка не будет добавлена.
  • &fap = вывод ссылок ЧПУ (человеко-понятных «урлов»). Если используете ЧПУ, задайте этому параметру значение `1` и задайте путь до каталога (параметр &path), где расположены страницы блога или статьи, к коим применяются тэги.
  • &path = путь до каталога, указывается, только если Вы применяете ЧПУ. Если старницы, к которым применяются тэги лежат по адресу "yoursite.url/blog/categories/", то Вам следует указать в параметре следующее значение &path=`blog/categories`. Если Вы не используете ЧПУ, эту переменную можно проигнорировать и по умолчанию ссылка будет "yoursite.url/tagname". Начиная с версии 1.0.4, Вы можете использовать идентификатор документа ID — только укажите номер документа и корректный URL будет создан автоматически.

[[tagLinks? &tv=`tags` &element=`div` &fap=`1` &path=`tags` &label=`Темы: ` &title_prefix=`Все статьи по теме`]]

RSS

RSS

Обратная связь

Задайте вопрос менеджеру!

verification code

Они поддерживают блог