getRelated: Похожие материалы в MODX Revolution

Для MODX Revolution некоторое время назад тихо и спокойно появилось замечательное дополнение getRelated, которое без особых усилий на то с вашей стороны позволяет организовать список похожих материалов на вашу публикацию.

Для чего нужно показывать похожие материалы на сайте?

  • это еще один инструмент навигации для пользователей, наряду с тегами, категориями и т.д.;
  • это неплохой способ удержать посетителя на сайте, предложив ему почитать статьи по теме;
  • это отличная перелинковка вашего блога, что положительно влияет на скорость индексации поисковиками.

Попробуем установить и разобраться как это работает?

Установка и настройка getRelated

1. Прежде всего несколько ссылок:

Перед установкой пакета предполагаем что у вас уже имеется сайт с достаточным количеством страниц, для того что бы можно было сформировать список похожих.

2. После установке в том месте шаблона, где необходимо показать список похожих, вызываем сниппет:

[[getRelated]]

Обратите внимание, что сниппет вызывается КЕШИРОВАННЫМ. Делать некешированный вызов строго не рекомендуется, так как процедура генерации списка похожих материалов достаточно ресурсоемкая и может сильно замедлить скорость генерации страниц.

3. Это простейший вызов сниппета и он будет работать, но чаще все же лучше его настроить, передав ряд параметров, например так:

[[getRelated?
  &fields=`pagetitle:2,introtext:1,tags:4`
  &returnFields=`pagetitle,introtext`
  &returnTVs=`image`
  &parents=`4,6`
  &limit=`5`
  &noResults=`Нет похожих материалов`
  &tplOuter=`relatedOuter`
  &tplRow=`relatedRow`
]]

Разберем, за что отвечают параметры:

  • fields - список полей, которые будут учитываться при формировании списка похожих материалов, через двоеточие указывается "вес" поля, чем он больше, тем большее влияние оказывает поле. Естетсвенно, что чем больше полей вы сюда напишите, тем более ресурсоемкими будут вычисления, так что идеально ограничится заголовком страницы и, к примеру тегами. И НЕ ИСПОЛЬЗУЙТЕ поле content! Как правило, в этом поле большой по объему текст и это может привести к очень догой загрузке!
  • returnFields - список возвращаемых полей. Укажите именно те поля, которые вам нужны, это так же позволит снизить нагрузку.
  • returnTVs - по аналогии с returnFields, только для TV параметров.
  • parents - список id документов-родителей. Позволяет ограничить поиск определенными разделами вашего сайта.
  • limit - количество похожих статей.
  • noResult - сниппет выведет это значение, если не сможет подобрать похожие материалы.
  • tplOuter - чанк-обертка, в который будет помещен результат, рассмотрим ниже.
  • tplRow - чанк для каждой строки в результате, рассмотрим ниже.

Это не все доступные параметры, полный список параметров getResources доступен на странице с официальной документацией, ссылка приведена выше.

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

4. Настройка отображения

В примере выше мы указали параметры tplOuter и tplRow. Однако это можно было и не делать, getRelated в этом случае использовал бы значения по умолчанию. Посмотрим исходный код этих чанков.

Чанк "relatedOuter":

<h3>[[%getrelated.pagesfound? &namespace=`getrelated` &count=`[[+count]]`]]</h3>
<ul>
 [[+wrapper]]
</ul>

Допустимо использовать 2 плейсхолдера: wrapper (список материалов) и count (количество найденых материалов).

Чанк "relatedRow":

<li>
 <a href="[[~[[+id]]]]" title="[[+longtitle:default=`[[+pagetitle]]`]]">
 [[+longtitle:default=`[[+pagetitle]]`]] ([[+rank]])
 </a>
</li>

Здесь список плейсхолдеров несколько больше: поля ресурса, перечисленные в fields и returnFields,  а так же id - идентификатор документа, rank - рейтинг "похожести" ресурса, idx - порядковый номер.

Таким образом вы можете создать собственные чанки с любым html кодом на основе представленных и передать их названия в вызов getRelated, чтобы полностью переопределить внешний вид вашего списка похожих материалов.

Поддержка языков в getRelated

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

Когда мы только начинали работать с getRelated мы обратили на это внимание автора дополнения (Mark Hamstra), и предложили ему вариант исправлнений, для обеспечения поддержки русского языка. Эти исправления Mark Hamstra внес в исходный код, так что на текущий момент getRelated поддерживает английский и русский язык.

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