Компонент "Похожий контент" для InstantCMS 2.1.2

20 апреля 2015 - Feodor



Благодаря участнику форума Бичукин Андрей этот компонент стал доступным для большинства. За что ему уже можно поставить плюс.
От себя же решил оставить код открытым, чтобы многие разработчики могли, что-то взять для себя или предложили варианты решения интереснее моего.

Структура компонента, похожа на структуру компонента "Конструктор форм iForms" (опять он со своими формами

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

Итак, приступим…

Скачиваем архив, устанавливаем, как обычно и идём

в настройки компонента "Похожий контент".

Создаём релевант.

Спойлер

Изображение уменьшено. Щелкните, чтобы увидеть оригинал.
Системное имя, заголовок и описание – стандартные поля, не требующие описания.

Галочка "Показывать на сайте" позволяет включать/отключать показ релеванта. Удобно если надо, временно убрать релевант без поиска места его установки.
В блоке настроек "Контент" указываются тип контента с которым будет работать релевант. Например, если указать здесь тип контента "Новости", то при выводе релеванта в статьях, будут отображаться новости, отфильтрованные по запросу собранному из статьи.
Категория и/или фильтры из набора помогут немного конкретизировать место поиска контента.

Спойлер

Изображение уменьшено. Щелкните, чтобы увидеть оригинал.
Блок настроек "Шаблон" отвечает за вывод релеванта на странице.

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

Количество колонок и количество выводимых записей, определяем на свой вкус.
Галочка "Выводить записи в случайном порядке" позволяет выводить записи в случайном порядке.

Сами файлы шаблонов отвечающие за вывод релевантов расположены в папке \default\controllers\relevanter\ там на данный момент пока только файл relevants_default_list.tpl.php. Но отбор файла шаблона происходит следующим образом.

Ищется файл relevants_(имя_типа_контента)_list.tpl.php, если его нет ищется relevants_default_list_(стиль_контента).tpl.php, если и его нет, то ищется relevants_default_list.tpl.php.
Но и это ещё не всё. Если вам нужен вывод, как указано в настройках типа контента, то просто удалите или переименуйте этот файл и программа будет искать файлы шаблона в папке шаблонов контента (имя_типа_контента)_list.tpl.php, либо возьмёт default_list.tpl.php.
Конечно все файлы без скобок.

Идём дальше.

Полнотекстовый поиск.

Спойлер

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

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

В процессе обработки из поисковой фразы "заголовок + ключевые слова + теги" вырезаются всевозможные спецсимволы, знаки препинания, цифры и т. п. Затем фраза обрезается до длины указанной в настройках (цифра "80" которая стоит по умолчанию). После этого поисковая фраза подвергается разного рода манимуляциям, таким как, удаление повторяющихся слов, удаление слов, длина которых менее 3 символов, добавление повышающего коэффициента релевантности для полученных первых трёх слов. В итоге полученная поисковая фраза может быть значительно короче указанной в настройках длины.

Галочками указываем по каким полям осуществлять полнотекстовый поиск в базе данных.

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

Сортировка и фильтры.

Спойлер

Эти поля вам уже знакомы из наборов типа контента с одним отличием – есть фильтр по тегам. К нему я ещё прикрутил режим автозаполнения для удобства.

Спойлер

Фильтрация и отбор записей происходит следующим образом.

В выбранном типе контента, с учётом выбранной категории и набора отфильтровываются записи с применением фильтров заданных в поле "Фильтры" и сортируются согласно настройкам в поле "Сортировка". Затем подключается полнотекстовый поиск, конечно, если релевант расположен в записи контента. Из всего того количества найденных записей отсекаются первые в количестве рассчитанном по формуле: количество выводимых записей указанных в настройках умножить на 2 и добавить 1. Например 4 * 2 + 1 = 9 записей. Если найдено меньше, то будет столько, сколько есть.
Этот набор записей кэшируется (при включенном кэшировании). В дальнейшем, если есть кэш, берётся из него, если нет

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

Заполняем необходимые поля и получаем готовый релевант.

Спойлер

Кстати, зелёная галочка "Публикация" тоже работает.
Размещение релеванта на сайте.

Для размещения релеванта на сайте есть два типа поля и виджет.

Виджет.

Спойлер

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

Спойлер

Поле.

Поле "Похожий контент" и "Похожий контент - сквозной" это два обычных поля.

Спойлер

Первое устанавливается в каждую запись. И при создании/редактировании каждой записи указывается, какой релевант выводить.
У второго при установке сразу выбирается какой релевант выводить и он автоматически будет выводится во всех записях данного типа контента. Пересохранять ранее добавленые записи не требуется. Но если есть необходимость в некоторых записях отключить релевант с показа, то при создании/редактировании записи надо убрать галочку.

Спойлер

В случае если ничего не найдено, то обычным пользователям ни в поле, ни в виджете ничего не выведется. А для администраторов сайта в этом месте выведется информация для размышления, в которой указаны слова по которым был осуществлён поиск.

Спойлер

Демо, смотрите статьи и новости. Виджет есть на главной.

Логин: demoadmin@krivo.pro
Пароль: demoadmin

Спасибо ему.

Скачать тут.

В раздел дополнений добавлю после выхода ближайшего обновления движка.

Обновление.

Добавил опцию для автоматического определения категории. Доступно в записи контента.

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

Добавил возможность на выбор выводить заглушку, если нет изображения.

Поправил alt.

Устранил неисправность с отображением категории записи при включенном кэшировании.

Подправил файл шаблона. Теперь если искали 4 записи, а нашли меньше, то они растянутся на всю доступную ширину блока.

В связи с этим после обновления надо пересохранить все ранее созданные релеванты в админке компонента с учётом новых опций. Места их размещения пересохранять не требуется.

Обновление 18.03.2015.

Теперь компонент работает только с версией InstantCMS 2.2.0.

Обновлена работа с изображениями. Теперь, если выбран пользовательский пресет и файла заглушки с таким названием не существует, будет выведена заглушка с названием small. Поэтому для всех пользовательских пресетов желательно делать файл заглушки, такого же размера.

Переделана функция кэширования.

Подправлены стили. Исправлены некоторые мелочи в плане "юзабилити".

В настройки полнотекстового поиска релеванта вынесены значения длины слова и поле для ввода слов исключений из поиска. Слова короче указанной длины будут исключены из поиска. По умолчанию его значение равно 4 символам (оптимально для кирилицы). Значение можно изменить, как в большую сторону, так и в меньшую (но без фанатизма).

Обновление качать тут.


Instantcms.ru


Похожие статьи:

Новости разработчиковЗаменяем название компонента, url и т.д. на примере FAQ

Новости разработчиковКомпонент Сервис Ёлок ver.1.1

Новости разработчиковАнонс модуля "Поощрение пользователей"

Новости разработчиковМодуль аккардион статей

Новости разработчиковЗагрузка расширений через админку

Рейтинг: 0 Голосов: 0 575 просмотров
Комментарии (0)

Нет комментариев. Ваш будет первым!