Краткое руководство по подключению механизма тегов на MODx

Для тех, кто таксономически предпочитает обычной разбивке содержимого на категории - систему тегов, предлагаю небольшое, но исчерпывающее (на момент написания) руководство по ее подключению на новом или уже работающем сайте.

Для обеспечения программной части механизма тегов нам понадобятся следующие сниппеты:

  • tagLinks - я даю ссылку на модифицированную версию, оригинальная версия tagLinks 1.0.3 по непонятным причинам отказалась работать. Также вы можете скопировать сниппет tagLinks используемый на нашем сайте, в нем добавлен вывод переметра title для ссылок.
  • TvTagCloud 1.0

Шаг 1. Создаем доп. параметр (TV)

Для хранения тегов документа нам понадобится новый доп. параметр. Назовем его "tags" и зададим тип text (можно задать и checkbox, но тогда придется обойтись ограниченным набором тегов, которые следует указать в возможных значениях).

Перед сохранением нового доп. параметра мы не должны забыть включить его для соответствующего шаблона(ов).

Шаг 2. Вводим теги

Зададим в качестве эксперимента несколько тегов для какого-нибудь документа. При этом надо определить для себя, как будет удобнее эти теги разделять. Самое очевидное и интуитивное разделение списка слов - запятая с пробелом ", ", хотя вы можете выбрать что-нибудь экзотичнее.

Итак, список тегов может выглядеть так: "руководство, для начинающих, теги".

Шаг 3. Создаем страницу вывода статей по заданному тегу

Для того, чтобы после нажатия на тег (ссылку) мы попадали на страницу со всеми статьями по нему, нам нужно эту самую страницу создать. Страница должна быть самой обычной но со специальным некешируемым вызовом Ditto (здесь я рассматриваю версии от 2.0). Напимер:

[!Ditto? &parents=`0` &depth=`3` &tpl=`ditto_news` &sortBy=`createdon` &tagData=`tags` &tagDelimiter=`, ` &dateFormat=`%d.%m.%Y` &truncText=`далее...`!]

Ditto будет получать тег через url и выводить соответствующие статьи на этой странице.

Шаг 4. Подключаем tagLinks

Теперь настроим вызов сниппета tagLinks в том месте на странице со статьей, в котором мы хотим видеть перечисление ключевых слов (со ссылками). Вызов может быть вот таким:

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

Расшифрую значения параметров:

  • &tv - имя доп. параметра, содержащего теги
  • &element - элемент-контейнер для вызова тегов (очень сомневаюсь в целесообразности этого параметра)
  • &fap - включить/выключить поддержку дружественных url.
  • &path - путь к странице, содержащей вывод всех статей с тегом (страница с вызовом Ditto из шага 3)
  • &label - строка, выводящаяся перед перечислением тегов
  • &title_prefix - префикс к значению параметра title для ссылок (работает только в версии сниппета с нашего сайта)

Теперь можно протестировать работу сниппета и вывода статей с тегом. Если все работает нормально, можно остановиться на этом или перейти к следующему шагу.

Шаг 5. Подключаем TvTagCloud

Теперь создадим так называемое "облако тегов", чтобы иметь возможнось выбирать тему статей, скажем с главной страницы. К сожалению, версия 2.0 сниппета TvTagCloud у меня не заработала, поэтому мы воспользуемся 1.0. Вызывать сниппет достаточно просто, например:

[[TvTagCloud? &parent=`1` &landing=`22` &tvTags=`tags` &showCount=`1`]]

Снова объясню параметры:

  • &parent - ИД документа в котором находятся статьи с тегами (к сожалению перечисление нескольких родительских документов не работает)
  • &landing - ИД страницы с выводом статей по заданному тегу (как раз та страница с вызовом Ditto, что обсуждалась в шаге 3)
  • &tvTags - имя доп. параметра, содержащего теги
  • &showCount - включить/выключить отображение количества статей рядом с тегом

Шаг 6. CSS-оформление облака тегов

Здесь все просто: в зависимости от "популярности" тега ссылке задаются классы s1, s2, s3, s4... а все облако содержится в контейнере класса "tagcloud" - их мы и должны отразить в нашей css-таблице. Так же традиционно для ссылок в облаке тегов убирают подчеркивание.

Ну вот, пожалуй, и все. Удачных тегов!

с 1 по 10 из 35 | Далее | Последние
new comment 21.06.2007, 20:54:30

Отличная статья! Большое спасибо! :) На днях обязательно попробую! :)

new comment 26.06.2007, 10:48:59

В файле, который вы правили, необходимо убрать последние 3 строчки закоментированные, и дописать return $link; Иначе выводит ошибку.

new comment 27.06.2007, 23:03:40

2Shelbi: если я не ошибаюсь, в этой статье не идет речь ни о каких правленных мною файлах...

new comment 01.07.2007, 14:17:33

"tagLinks - я даю ссылку на модифицированную версию"

там в конце файла нужно подправить

new comment 06.07.2007, 02:09:16

Если не ошибаюсь, при создании <a class="autolink_link" href="http://modx.ru/docs/glossary/#<a class="autolink_link" href="http://modx.ru/docs/glossary/#tv" title="Посмотреть значение термина в глоссарии">tv</a>" title="Посмотреть значение термина в глоссарии"><a class="autolink_link" href="http://modx.ru/docs/glossary/#tv" title="Посмотреть значение термина в глоссарии">tv</a></a> еще необходимо указать для него <a class="autolink_link" href="http://modx.ru/docs/glossary/#widget" title="Посмотреть значение термина в глоссарии"><a class="autolink_link" href="http://modx.ru/docs/glossary/#widget" title="Посмотреть значение термина в глоссарии">виджет</a></a> Delimited list и в качестве Delimiter поставить ,

new comment 06.07.2007, 02:09:57

Если не ошибаюсь, при создании tv еще необходимо указать для него виджет Delimited list и в качестве Delimiter поставить ,

new comment 06.07.2007, 21:17:59

А как сделать чтобы когда находишься на странице показывающий список статьей, линк тэга (в облаке) по которому они выводятся был не активный...?

new comment 08.07.2007, 02:09:40

2Igne: слегка спорная задача... как правило у одной статьи бывает несколько тегов, по вашей схеме тогда все теги данной статьи в облаке должны быть неактивными? тогда такая вот идея: обычно неактивной делают ссылку страницы на саму себя, но в случае тегов это неправильный подход - потому что ссылка тега ведет на страницу списка документов, и никак не может вести на сам (текущий) документ.

ну а если все-таки попытаться найти решение... в любом случае тег надо будет передавать как параметр URL, и внести изменения в сниппет tagCloud

new comment 08.07.2007, 02:12:15

2Metaller: наверняка можно использовать и такой тип доп. параметра, но на самом деле хватает и простого text

new comment 08.07.2007, 20:16:08

2yentsun: Да, речь идет о том чтобы человек находящийся на странице вывода списка по тегу, пускай это будет к примеру tags.html&tags=Что-то, не мог нажать на тэг "Что-то" из облака тэгов... т.е. очень хочется избежать ссылок страниц на самих себя :)

с 1 по 10 из 35 | Далее | Последние

Добавить комментарий

Для форматирования используйте синтаксис Markdown. Если вы не можете разобрать символы в рисунке, нажмите на него для автоматического обновления
Если вы не можете разобрать символы в рисунке, нажмите на него для автоматического обновления
Код безопасности: