Компонент "Похожий контент". Обновление для InstantCMS 2.5.1 2.X

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


Компонент полностью переписан для работы с instantCMS 2.5.1, с учётом полезных изменений, выложенных на гите на текущий момент.

Удалена полностью функция доведения количества релевантов до необходимого (ибо это зло неимоверное).

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

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

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

Изменилась работа полнотекстового поиска по полю "content". Теперь если это поле участвует в полнотекстовом поиске, то поиск будет произведён. Иначе нет. Полнотекстовый поиск по заголовкам, ключам и тегам не изменился.

Добавлена опция удаления из поисковой фразы цифр и спецсимволов. Раньше это делалось всегда.

Добавлена возможность использовать файл stopwords из папки languages, для очистки поисковой фразы от стоп-слов.

В фильтре добавлена возможность указывать значения полей из записи в фигурных скобках, работать будет, если релевант выводится на странице записи.
Также доступны функции сложения и вычитания цифровых полей или значений. Например, чтобы отфильтровать все записи с рейтингом более, чем на 200 единиц менее рейтинга текущей записи, достаточно прописать такую запись в фильтре: {rating}-200.
Вся строка фильтра тогда получится такой: Рейтинг > {rating}-200. В итоге, если у текущей записи рейтинг равен 450, то отфильтруются все записи с рейтингом более 250 единиц.

Изменилась система наследования файлов шаблонов.
Есть три формы названия файла шаблона:
1. templates/ШАБЛОН/controllers/relevanter/tpl_ИМЯКОНТЕНТА_ИМЯРЕЛЕВАНТА.tpl.php
2. templates/ШАБЛОН/controllers/relevanter/tpl_default_ИМЯРЕЛЕВАНТА.tpl.php
3. templates/ШАБЛОН/controllers/relevanter/tpl_default.tpl.php
Каждая форма файла сперва ищется в папке с выбранным шаблоном и если такого файла нет, то ищется в папке шаблона default

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

Замечания по его работе, пишите в комментариях. Информацию по обновлению смотрите в разделе дополнений.
Компонент Моменты для InstantCMS 2.5.+ | Конструктор - в форме
Комментарии (52)
BoAnRo 28 мая 2016 в 00:14 0
Очень хорошо, что поддерживаете этот компонент! Но хотел посоветовать на странице этого дополнения в каталоге поставить ссылку на запись в блоге вместо рецензии с антирекламой laugh
Loadырь 28 мая 2016 в 10:11 +1
boanro:
поставить ссылку на запись в блоге вместо рецензии с антирекламой
Да ни за что. Это же сам letsgo и его команда писали эту рецензию. v
Скрывать мне нечего, а другой рецензии у меня пока нет smile
kdv1978 28 мая 2016 в 01:13 +1
Никак не соображу, можно как-то задать опцию, что бы искал похожий контент из той-же категории в которой находится контент на странице которого мы находимся?
Loadырь 28 мая 2016 в 10:06 0
Там есть галочка "Автовыбор категории записи" - она по умолчанию сама определяет категорию у записи. Если её убрать появится обычный селектор выбора конкретной категории выбранного типа контента.
kdv1978 29 мая 2016 в 00:33 0
Галочка эта есть, а вопрос возник в связи с тем, что несмотря на эту галочку, если также стоит галочка на - Показывать записи из подкатегорий, то показывается контент совсем из других категории, например в объяве по продаже дома в данном компоненте отображается продажа щенков. Я считал что - Показывать записи из подкатегорий это отображение всех объяв начиная с корневой в которой находится наше объявление.
Какое предназначение - Показывать записи из подкатегорий ?
Loadырь 29 мая 2016 в 10:34 0
Как бы и планировалось, что из подкатегорий только той где сейчас релевант. Нашёл недочёт, который влиял на сброс фильтрации по категории. Скачайте заново и перезалейте файлы.
kdv1978 29 мая 2016 в 14:19 0
Ссылка на скачивание на этой странице поломалась, ведет на 404.
Loadырь 29 мая 2016 в 16:07 0
Действительно, глюк системы обнаружили. Пересохранил с "очисткой кэша", теперь заработало.
kdv1978 30 мая 2016 в 01:48 0
Не помогло, сейчас даже если не ставить галку - Показывать записи из подкатегорий стало выводить из других категорий. Причем в объявлениях корректно работает, а статьи - articles нет. Пример - http://www.rk-nn.ru/articles/kakim-dolzhen-byt-horoshii-dachnyi-poselok-dlja-stroitelstva-zagorodnogo-kottedzha-233.html стоят галочки на Автовыбор категории записи и Показывать записи из подкатегорий, обновление последнее.
Loadырь 30 мая 2016 в 10:46 0
Порпавил условие для виджетов. Замените файл \system\controllers\relevanter\hooks\relevant_events.php
kdv1978 30 мая 2016 в 21:42 0
Все без изменений, может у Вас осталась та версия где работало если снять галочку на - Показывать записи из подкатегорий? это самая первая версия под 2.5.1.
Loadырь 31 мая 2016 в 00:12 +1
Перекрутил этот файл по другому. У меня тут нормально отображается. В настройках стоит только "выводить из этой категории и подкатегорий".
kdv1978 1 июня 2016 в 22:22 0
Спасибо, помогло.
skewes 28 мая 2016 в 15:51 0
"Автовыбор категории записи" решает момент вывода в самой записи похожего материала)))
Круто! +++
Олег Васильевич я 28 мая 2016 в 17:09 0
Loadырь, спасибо!
MegaRostov 29 мая 2016 в 16:35 0
Огромное спасибо! +++++ Отличный компонент.
BoAnRo 10 июля 2016 в 00:16 0
Получается, что поле "Похожий контент" просто не работает в типе контента в урле которого нет названия типа контента. (то есть в типе контента который выбран в настройках сайта как по-умолчанию). А виджет работает без проблем на страницах этого типа материала.
Но очень хотелось бы чтобы работало и поле, поскольку его можно разместить сразу после публикации и перед комментариями. Считаю что это самое лучшее место на странице для размещения блока релевантного контента.
Олег Васильевич я 10 июля 2016 в 13:14 +1
Считаю что это самое лучшее место на странице для размещения блока релевантного контента.
Скриптом запихните его туда.
BoAnRo 11 июля 2016 в 14:22 0
Возможно, причины этой проблемы другие. Для эксперимента поменял тип контента, который по-умолчанию. И теперь в урле первого типа контента уже выводится название контента, но поле "Похожий контент" так и не работает. Вернее само поле появляется, поскольку видно его название, но нет содержимого. А другой тип контента (там где поле правильно выводилось) поставил как по-умолчанию, и поле дальше выводится без проблем.
Наверно нужно искать другую причину почему в первом типе контента не выводится поле. Настройки точно одинаковые. Сверял по каждому полю. У меня настроено - выводить перечень похожих публикаций по тегам.
Loadырь 11 июля 2016 в 14:54 0
Скиньте ссылку в личку на страницу, где по-вашему что-то должно выводится, но отсутствует и скрин настроек релеванта. Гляну, что может быть не так.
BoAnRo 15 июля 2016 в 00:26 0
Интересно. Описанная мной проблема была на моем тестовом сайте. А на основном сайте все ОК.
Большое спасибо, Loadырь, за очень хороший и нужный компонент!
Dorimen 16 июля 2016 в 09:21 0
Плохо, что компонент выводит просроченный контент. Например, в объявлениях в похожих выводит объявления, у которых закончился срок публикации. Эти объявления не удалены, так как настройки позволяют их продлить, но и не активны. А компонент их выводит.
Loadырь 29 июля 2016 в 21:48 0
Обновил компонент, попробуйте повторить данную ошибку.
Dorimen 16 июля 2016 в 10:39 0
Есть три формы названия файла шаблона:
1. templates/ШАБЛОН/controllers/relevanter/tpl_ИМЯКОНТЕНТА_ИМЯРЕЛЕВАНТА.tpl.php
2. templates/ШАБЛОН/controllers/relevanter/tpl_default_ИМЯРЕЛЕВАНТА.tpl.php
3. templates/ШАБЛОН/controllers/relevanter/tpl_default.tpl.php
Каждая форма файла сперва ищется в папке с выбранным шаблоном и если такого файла нет, то ищется в папке шаблона default

Можете привести пример, как называть файлы шаблонов? Обновил до 1.8 компонент - перестали показываться похожие статьи. Сайт www.orehovod.com. До обновления старый компонент работал нормально кроме http://instantcms.ru/blogs/blog-loadyrja/komponent-pohozhii-kontent-obnovlenie-dlja-instantcms-2-5-1.html#c92397
Dorimen 16 июля 2016 в 11:02 0
Прошу прощения за посты. Разобрался. Все ок.
Dorimen 16 июля 2016 в 11:17 0
При добавлении поля в настройках компонента, а также при установке самого компонента на последнем этапе получаю ошибку 503 503 Service Unavailable:
Dorimen 16 июля 2016 в 11:41 0
Ох. И снова прошу прощения. Мой косяк. )
batot 29 августа 2016 в 15:42 0
У меня такая же ошибка 503 Service Unavailable. Подскажите, как вы ее исправили.
Pawell 2 февраля 2018 в 23:52 0
Здравствуйте. А есть возможность сделать, чтобы этот компонент (поле) было включено по умолчанию или как то прописать его подключение системно в файле default_item.tpl ?
Loadырь 3 февраля 2018 в 00:11 0
Используйте поле 'Похожий контент - сквозной'. Действует везде в рамках типа контента, в котором установлено.
Pawell 3 февраля 2018 в 00:25 0
Изменил на сквозной, но, чтобы он по умолчанию был включён надо пересохранять сообщение?
Мне нужно, чтобы он был включён по умолчанию.
Loadырь 3 февраля 2018 в 07:46 0
Надо не "изменить", а "создать". Создайте новое поле, а затем, если всё будет нормально, удалите старое.
Pawell 3 февраля 2018 в 10:11 0
А такой возможности вставки поля в коде файла нет? Или может как то можно подключить?
Код PHP:
  1. <?php
  2. echo $item['имя поля'];
  3. ?>
Loadырь 3 февраля 2018 в 10:45 +1
Код PHP:
  1. <?php echo cmsEventsManager::hook('relevant_events', array(
  2. 'relevant_name' => 'системное_имя_релеванта',
  3. 'current_ctype' => isset($item['ctype']) ? $item['ctype'] : array(),
  4. 'current_ctype_category' => isset($item['category']) ? $item['category'] : array(),
  5. 'current_ctype_item' => $item,
  6. 'current_ctype_fields' => array(),
  7. 'is_item' => true
  8. ));?>
Pawell 3 февраля 2018 в 12:12 0
Спасибо большое.
Извините за назойливость. Долго объяснять зачем мне это нужно, но вывести поле, созданное для типа контента, которое выбирает в качестве шаблона 'relevant_name' => 'системное_имя_релеванта', есть возможность?
То есть, в контенте новости я создал новое поле (pole), выбрал тип поля "Похожий контент". А затем уже при создании новости я выбираю основное поле 'системное_имя_релеванта' из вкладок, ранее созданных в настройках компонента.
Можно ли как то подключить прямой вывод компонента непосредственно поля - pole ?
'relevant_name' => 'pole' - не работает.
Ещё раз извините за надоедливость...
Loadырь 3 февраля 2018 в 13:01 0
Если вы создаёте поле типа "Похожий контент - сквозной", то вы в настройках самого поля в настройках типа контента один раз указываете выбранный релевант. После этого он выводится на всех страницах записей данного типа контента. Если конечно есть, что показывать. При создании и редактировании записи можно только поставить галочку выводить в этой конкретной записи выбранный в админке релевант или не выводить. По умолчанию эта галочка всегда включена.

Если вы создаёте поле типа "Похожий контент" (не сквозной), то вам надо будет в каждой записи при создании/редактировании выбирать какой релевант выводить.

Или я уже совсем не могу понять о чём речь.
Pawell 3 февраля 2018 в 13:11 0
Я хочу подключить созданное ранее поле "похожий контент" системно, для отображения его в каждой новости. Оно у меня подключено уже в выводе сторонней ленты рсс, но, чтобы вывод именно этого поля был в ленте, его надо включить в каждой новости (их более 2000). Я хочу вывести это поле в самом низу и включить его по умолчанию.
Но как вывести поле c именем pole, подключённое к релеванту? я не понимаю.
Вручную включать в каждой новости очень долго, может существует запрос к БД?
Loadырь 3 февраля 2018 в 17:46 0
Что-то я не пойму. Вы хотите вывести поле в стороннем компоненте?
Pawell 3 февраля 2018 в 19:29 0
Нет. Я хотел, чтобы это поле забиралось в рсс ленту Яндекс Турбо.
Loadырь 3 февраля 2018 в 19:51 +1
Какой хитрый человек smile
У вас в rss файле доступны поля типа контента ($fields)?
Как-то так, но не уверен.
Код PHP:
  1. <?php echo $fields['pole']['handler']->setItem($item)->parse($item['pole']);?>
Pawell 3 февраля 2018 в 23:22 0
Спасибо.
Pawell 4 февраля 2018 в 13:32 0
Извините. Не могу поменять размер изображения. В настройках указал маленький - small. В настройках пресетов small = 150x110 (не квадратный), но в блоке похожий контент выводятся квадратные изображения размером 125х125. Как сделать, чтобы изображения были 150х110?
Loadырь 4 февраля 2018 в 14:24 0
А картинки с новым пресетом у выводимых записей есть? Какой размер у самих выводимых картинок? Размер у пресета small = 150x110 стоял изначально или только недавно поменяли?
Pawell 4 февраля 2018 в 14:34 0
Картинки есть, с размером 125х125. Размер пресета менялся, но не недавно.
Loadырь 4 февраля 2018 в 14:50 0
Компонент выводит картинку с указанным пресетом. Других ограничений по размерам нет. Видимо эта картинка создавалась раньше, чем поменяли размеры пресета.
Pawell 4 февраля 2018 в 15:22 0
Создал новый пресет, указал его название в файле шаблона вывода похожего контента - картинки пропали. То есть возможности сделать размеры 110х150 нет?
Loadырь 4 февраля 2018 в 15:38 0
Картинки с указанными пресетами создаются при создании/редактировании записи. Если вы создали новый пресет, то вероятно у записи нет картинки с новыми размерами. Поэтому все картинки и пропали. Чтобы появились картинки с новыми размерами, надо пересохранить картинки в тех записях, в которых хотите их видеть. У новых записей они сразу будут создаваться с указанными размерами.
skewes 7 декабря 2018 в 12:51 0
Здравствуйте!
а подскажите, пожалуйста, как работает поиск по тэгам?
Вот у меня были записи с тэгами "кино, фильм, отзыв", я добавил в некоторые записи еще тэги такого вида "триллер, детектив, боевик, криминал".
Затем, некоторые записи из похожего контента перестали выводится.

Не подскажите, почему так произошло?

Ведь у всех есть тег - "кино, фильм, отзыв", но не у всех есть триллер или боевик.
Или он берет какое-то количество тегов?

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

А в другой записи вот так стоит - "мнение, триллер, драма" и в ней показываются и эти две записи и еще одна, которая имеет тоже три тега с конца или на конце - "мнение, триллер, драма".

То есть, такое ощущение, что он, похожий контент, ищет по 3-м последним тэгам)))

Как можно увеличить данное количество тэгов для поиска?
Loadырь 7 декабря 2018 в 16:52 0
У вас как в настройках выбраны опции? Пришлите скрин.
skewes 8 декабря 2018 в 06:56 0
Loadырь 9 декабря 2018 в 17:33 +1
Вот смотрите, у вас стоит галочка "Фильтр по тегам" и ниже ещё задействован полнотекстовый поиск с поиском по тегам, заголовкам и прочим. Все эти фильтры складываются как "И", а не как "ИЛИ". То есть в вашем случае он ищет записи у которых есть "триллер или боевик" в тегах, а также в названии , описании и ключевых словах. От этого мало чего находит. Вам надо или убрать фильтр по тегам или убрать полнотекстовый поиск.
skewes 10 декабря 2018 в 12:49 0
Спасибо большое)))