Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Дополнение getRelated MODX Revolution для создания связанных ресурсов

Сайдбар

getRelated – сниппет для MODX Revolution, помогающий создать список связанных ресурсов.

Он помогает настроить алгоритм, с помощью которого такое необходимое свойство как &fields позволит вам определить поля для сравнения и определения важности каждого из них.

Ссылки и история создания

Версия

Дата выпуска

Особенности

1.2.0-pl

7 июня 2012

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

1.1.2-pl

21 января 2012

Добавлено &hideContainers свойство. Предотвращается появление ошибки E_NOTICE. Устранены ошибки в работе &includeDeleted.

1.1.1-pl

10 декабря 2011

Исправлены ошибки в &parents. Исправлена ошибка в &fields, из-за которой можно было выбрать только одно поле.

1.1.0-pl

4 декабря 2011

В настройки результатов добавлены TV свойства, а также новое свойство &exclude для скрывания определенных результатов.

1.0.2-pl

10 ноября 2011

Исправлена ошибка с фильтрацией текущих ресурсов, теперь поиск нечувствителен к регистру букв, исправлены ошибки в свойствах ignoreHidden и ignoreUnpublished. Сделан более понятным процесс отладки.

1.0.1-pl(2)

26 октября 2011

Исправлены ошибки, возникающие при работе со свойствами tpl &parents и &fields

1.0.0-pl

13 октября 2011

Первая публикация. Версии до 1.0 публиковались только для HandyMan. Спонсирована бета-версия.

Как работает getRelated (обязательно к прочтению)

Для правильного использования свойств и получения нужного результата важно понимать, как работает getRelated.

Нижеприведенные шаги собирают вместе необходимые ресурсы.

    1. getRelated находит ресурс, который будет использоваться в качестве базового, обычно это текущий ресурс. Он использует поля, определенные вами (&fields) и разделяет их на части для определения уникальных слов.
    1. Стоп слова, используемые в лексиконе, отфильтровываются, остаются только слова, действительно имеющие смысл.
    1. Далее используются связанные слова в запросе к базе данных, ограниченные контекстом, а также источники, заданные вами и содержащие необходимые ресурсы. Это образец для сравнения. Это работает для входных полей и переменных шаблона на основе заданных вами свойств полей.
    2. Пример работает на основе коэффициента веса, который вы определите в свойствах поля (&fields) для вычисления ранга каждого ресурса.
    3. Результаты сортируются в зависимости от ранга (с самым высоким рангом - первые) и затем выводится на экран в соответствии с tpl свойствами.

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

Свойства сниппета

Свойства

Пункт (пункты)

Описание

Значение “по умолчанию

resource

1

Определяет ID ресурса для поиска связанных ресурсов (текущий или пустой) относительно текущего ресурса

current

fields

1, 3, 4

Список fieldname:weight для сравнения, использующий в качестве разделителя запятую. Используется приставка TV с "tv.". Не используйте контент, если не хотите снизить производительность. Пример использования: pagetitle:3,tv.MyTags:7,tv.MySubjects:15,introtext:2

pagetitle:3,

introtext:2

defaultWeight

4

Коэффициент веса (целое число) для присваивания полям, не имеющим “веса”.

5

returnFields

5 (3)

Поле ресурсов, (используйте &returnTVs для шаблонных переменных) для включении выходные данные. По умолчанию есть доступ к ID ресурсов.

pagetitle,longtitle,

introtext

returnTVs

5

Список TV имен (разделяются запятой) для вставки в результаты. Они не используются для сравнения, но извлекаются при возврате результатов ТОП-ранга. Не используется приставка "tv." подобно &fields.


parents

3

Список родительских источников для поиска связанных ресурсов, разделитель – запятая.


parentsDepth

3

Глубина поиска для родительских источников.

10

exclude

3

Список исключаемых из результатов ID ресурсов, разделитель – запятая.

.


contexts

3

Контекстный список, используемый для поиска, разделитель – запятая.

current

includeUnpublished

3

[1|0] использует непубликуемые ресурсы в результирующем массиве.

0

includeHidden

3

[1|0] Использует в меню результирующего массива ресурсы, отмеченные как скрытые. “0” для исключения..

1

hideContainers

3

[1|0] Добавлено в версии1.2.0.

При установленной единице исключает ресурсы помеченные "isfolder" как true, т.е. те, которые есть.

0

stopwords

2

Добавлено в версии1.2.0

Список слов отфильтрованных по значению, вверху списка – стоп-слова, разделитель – запятая.


limit

5

Число связанных ресурсов, выводимых на экран.

3

fieldSample

3

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

125

fieldSort

3

Поле ресурсов, собранных для образца сравнения, используется для объединения fieldSamplet. (Не сортируйте выходные связанные ресурсы, только использующиеся образцом для определения связанных ресурсов!)

createdon

fieldSortDir

3

Параметры сортировки для fieldSort, используются при создании образца сравнения.

desc

tvSample

3

Число TV результатов для вставки (Внимание: один ресурс может иметь больше одного значения в зависимости от свойств поля.) в образец сравнении, основанный на значениях TV.

125

tvSort

3

Поле ресурсов для сортировки в TV очереди, используется совместно с tvSample. (Не сортируйте связанные выходные ресурсы, только связанны ресурсы, обозначенные в образце!)

createdon

tvSortDir

3

Направление сортировки для tvSort, применяется в комплектовании образца.

desc

tplOuter

5

Имя чанка, использующегося как внешний,, или объединенный, шаблон. [ [+wrapper]] плейсхолдер будет заполнен отдельными строчками, разделенными символами, заданными в rowSeparator (см. ниже). Можно использовать плейсхолдеры [[+count]] и [ [+wrapper]].

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

<ul>
  [ [+wrapper]]
</ul>

relatedOuter

tplRow

5

Имя чанка, используемого как шаблон строки, используется для каждого связанного ресурса..
Плейсхолдер, который можно использовать включенным в поле (&fields) (без TV), точно также как и в returnFields. ID ресурса всегда доступно с [ [+id]], ранг (результат вычислений алгоритма ) как [ [+rank]], номер результата в виде [ [+idx]].

Чанк по умолчанию (сохраненный как
файл в core/components/getrelated/elements/chunks/):

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

relatedRow

noResults

5

Текст или выходные данные, если не найдено связанных ресурсов. (Совет: вы можете добавить [[$chunk]], что будет выводиться когда нет результатов: &noResults=`[[$chunkname]]`)

"No related pages found."

rowSeparator

5

Строковый параметр, используемый как разделитель строк.

\n

debug


[1|0] Включает / отключает режим отладки. Во включенном виде выдает отладочную информацию на экран монитора.

0

Использование


Нет никаких причин, чтобы я мог подумать вызвать этот сниппет некэшированным. Еесли вы запускаете огромный сайт, вызов сниппета некэшируемым поможет повышению производительноти, причем результат будет настолько значительным, что это просто не нужно. Этот сниппет обращается к данным ресурсов, и по умолчанию кэш очищается после обновления. Между обновлениями нет изменений, которые getRelated мог бы хранить. Поэтому НЕ ВЫЗЫВАЙТЕ ЭТОТ СНИППЕТ НЕКЭШИРУЕМЫМ!

Вы не уверены в том, каким вы вызываете getRelated? Некэшируемый сниппет вызывается с использованием восклицательного знака: [ [!snippetname]], поэтому нам нужно использовать его БЕЗ восклицательного знака: [ [snippetname]].

Необходимый минимум для вызова getRelated заключается в использовании тэга:

[[getRelated]]

Такой вызов создает неупорядоченный список, максимум с тремя связанными ресурсами, базирующимися на на pagetitle и introtext. В дальнейшем вы можете изменить это, используя свойства the &fields (см. выше) для задействования какого-либо тэга, или категории TV, или другого поля, которое содержит итоговое значение или ключевые слова.

Оптимизация производительности сниппета getRelated

Если из-за getRelated появилось снижение производительности, вот несколько предложений / мыслей на эту тему:

  1. Убедитесь, что сниппет вызван кэшируемым! Я не смогу помочь узнать причину снижения проиводительности, если вы некэшируете этот сниппет.
  2. Не используйте поля наподобие контента, т.к. они попросту могут быть очень большими.
  3. Возможно, что запрос используемый для создания образца слишком обширный. Могут быть многочисленные причины и решения на этот счет.

3.1. Еще нет перевода на язык, который вы используете, в результате нет стоп-слов на вашем родном языке. Очень хороший способ решить эту проблему и помочь другим – переведите английский словарь сниппета и на ваш язык и пришлите для включения в дополнение. Не переводите большой список стоп-слов самостоятельно, просто найдите готовый список на заслуживающем доверие ресурсе.

3.2. Все ваши ресурсы используют похожие слова (название компании, наименования продаваемой продукции или любимые слова вашего редактора), в результате чего образец был искажен этим. Если у вас включена отладка (&debug=`1` в сниппете), вы можете увидеть информацию, соответствующую обработке слов, в результате сможете сделать вывод, все ли идет как надо. Если причина в этом, вы можете отфильтровать слова добавлением их в "getrelated.stopwords" словарь на вашем языке. Перейдите: System > Lexicon Management и в выпадающем меню замените "core" на "getrelated".

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

  1. Ваш сайт имеет слишком много связанных ресурсов. Если ресурсов слишком много и вы уже оптимизировали все, что могли, попробуйте следующее:

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

Если вы использует много TV в &fields, вы можете “уронить ” tvSample скажем, 50-ю результатами на один TV. Если вы используете 3 TV, то можете теоретически уменьшить общее число обрабатываемых ресурсов с 375 до 150. Чтобы еще больше быть уверенными в правильности результата, вы можете изменить порядок, в котором образец обменивается данными с tvSort и tvSortDir, а также fieldSort и fieldSortDir. По умолчанию сортировка ведется по дате создания, самый новый учитывается первым.

  1. Может быть, что returnTVs настройки содержат много TV, что влияет на производительность. Я особо не тестировал это, но вам следует попробовать ограничить результирующие настройки (см. предыдущие советы), и использовать TV только тогда, когда нужно.
  2. Это проблема! Не смотря на то, что дополнение тестировалось на сайтах различного размера и на различных платформах, возможно, что что-то может произойти. Пожалуйста, сделайте сообщение на форуме или Github, и мы посмотрим, что можно сделать. Ссылки есть выше.