
Благодаря участнику форума Бичукин Андрей этот компонент стал доступным для большинства. За что ему уже можно поставить плюс.
От себя же решил оставить код открытым, чтобы многие разработчики могли, что-то взять для себя или предложили варианты решения интереснее моего.
Структура компонента, похожа на структуру компонента «Конструктор форм 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 символам (оптимально для кирилицы). Значение можно изменить, как в большую сторону, так и в меньшую (но без фанатизма).
Обновление 23.06.2015.
Устранены ошибки, немного изменена логика подбора похожих записей. В стилях добавлено выравнивание текста блока с описанием по ширине
Жаль могу потестить "не отходя от кассы"
Спасибо!
Режим отладки кто включал смотрели используемые ресурсы при выводе релевантов?
Хотелось бы услышать мнение специалиста!
Причем использую все по минимуму
Loadырь трудится не покладая рук!
Умиляют хвалители. Вообще пофиг что ставить и как это работает?
Простой пример. Статья "США внесли «ВКонтакте» и «Рутрекер» в пиратский список".
А что в похожих?
А вот что
Строительство мегаферм в области решено отложить из-за кризиса
Омич прокатился на сноуборде по заснеженным улицам города (видео)
Омичам предложили виртуальную замену аквапарка на Завертяева
Лора Московская на Дне всех влюбленных в «Викинге»На правах рекламы
Крутые похожие статьи, да? Молодцы те кто хвалят. Благодаря вам инстант будет смешить скорее, чем эффективно работать. Ну и поспешите мне минусы навтыкать.
- 1 уровень похожести - статьи сходятся по названию
- 2 уровень похожести - статьи сходятся по тематике раздела
У вас нарушены оба уровня. Ниже я написал поэтому, сделайте так
- Сначала отбирает похожие по названию, это самые близкие по похожести
- Если не хватает статей, подключаем уровень 2, то есть по ид берём рядом статьи. Почему рядом? Чтобы была некоторая перелинковка по сути. Нет по обоим вариантам статей - значит нет похожих, но нельзя туда совать всё подряд.
Пока вы не сделаете именно так, будет каша статейная внизу.
Переделайте по уму, как надо. Поиск похожих по словам в названии, альт - название статьи а не урл, статьи из одного раздела похожие. не могут в разделе Происшествия быть статьи похожими на статьи в разделе Бизнес и экономика. Похожее всегда будет именно в этом разделе для посетителя.
- Подбор похожих, только по словам в названии.
- Если нет похожих в названиях то предыдущие 5 статей по ID этого раздела, соответственно если например 3 по названию нашлись, то 2 уже по ID добить. Как правило свежие статьи одного раздела могут заинтересовать посетителя.
- Альт брать строго из названия.
- Похожие статьи только из того же раздела.
Вот тогда будет дело.
Добавил опцию для автоматического определения категории. Доступно в записи контента.
Изменил опцию "Выводить случайные записи, если ничего не найдено" на "Доводить количество записей до нужного, если не достаточно найдено". С ней будут добираться до нужного количества последние опубликованные записи из этой же категории. Доступно в записи контента.
Добавил возможность на выбор выводить заглушку, если нет изображения.
Поправил alt.
Устранил неисправность с отображением категории записи при включенном кэшировании.
Подправил файл шаблона. Теперь если искали 4 записи, а нашли меньше, то они растянутся на всю доступную ширину блока.
В связи с этим после обновления надо пересохранить все ранее созданные релеванты в админке компонента с учётом новых опций. Места их размещения пересохранять не требуется.
На демо-сайте в статьях сделал релевант, который ищет в заголовках по заголовкам в данной категории. Выглядит примерно так.
Работу компонента в плане отбора записей смотрите на статьях, а вывод с картинками лучше смотреть по новостям.
Скачать полный установщик тут.
Обновление качать тут.
Ещё обнаружил небольшой баг связанный с выводом блоков записей разной высоты. Стили поправлю в следующем обновлении.
Спасибо!
Что сделать? Сразу скажу - я могу сделать такое, другие многие, особенно новички не смогут.
Итак записям всем создаём див ul, а каждой записи добавляем li. теперь задача выделить див картинки, титле, анонса статьи. Буквально по сути делов на 10 минут. Дальше мы имеем возможность настроить вид, в любом по сути оформлении, но даже дефолтное уже будет выглядеть не как каша, а достаточно симпатично.
Плюс - в таких случаях лучше не ставить вертикально. Так как даже различия в титле, будет перекашивать, что видно даже на вашем скрине. Лучше ставить горизонтально, но с дивами, будет и красиво и удобно.
Вы простите за то, что много пожеланий. Независимо от того, делаете вы платное или бесплатное, оно должно быть безупречно. И ещё раз спасибо, за то что взялись, не бросили после критики.
Что касается списочного оформления (ul li), то это лишь моменты подхода к созданию шаблона. Я не дизайнер, поэтому шаблоны могу лишь сверстать. Для тех людей кто серьёзно занимается внешним видом своего проекта, ul li или div это не помеха. Всё равно под проект надо что-то переделывать. Я же сделал так, чтобы простыми кликами мышки простому пользователю в настройках релеванта можно было бы вывести так, так, так или так или аж вот так. В любом случае для каждого типа контента, лучше делать свою html разметку в отдельном файле шаблона. Где-то надо вывести сперва фото, где-то сперва заголовок потом фото и таких вариантов масса. Поэтому, зная что файлы шаблонов в большинстве случаев переделываются "под себя", я делаю лишь рабочий макет из дефолтного файла шаблона. А дальше вы сами "разукрашивайте".
Установил обновлённую версию,кое что смутило.
Два абсолютно разных материала выводятся в похожих друг у друга.
Посмотрите пожалуйста.
Page 1
Page2
В 1 случае:
Ищем по: unique, burning, walking, mondo, spider, robot, robots, manufacturers, indust
В 2 случае:
Ищем по: trick, andy, gross, funny, horrifies, magician, famous, video, where
Скрин1
Скрин2
1. Убрать галочку "Выводить записи в случайном порядке", тогда он будет искать только 4 записи (а не 9) отсортированные по релевантности.
или 2. Убрать галочку искать по основному тексту.
Когда записей будет много, тогда эти галочки можно будет вернуть.
Ещё я начинаю подумывать над добавлением поля в настройки релеванта, куда можно вводить стоп-слова. Например в разделе видео, слово "видео" может быть в каждой записи, конечно оно может добавить некую релевантность, но с другой стороны оно добавит его почти во все записи и смысл от этого слегка теряется. Кто как думает по этому поводу?
Что то новое заметил .
Кажется у меня не работает поиск по тегам.
В поле Ищем по:
Одинаковые теги ,а релевантного текста нет.
Для эксперимента,включил поиск только по тегам и брать сначала теги.Результата нет.
По стоп словам,думаю хорошая мысль.
Хочется пожелать ему терпения и удачи!
Автору конечно же плюс, за разработку и адекватность
Вы благодарите за то, что компонент работает так хорошо и оскорбляете того, кто тратил время и делился опытом с разработчиком, после кучи хвалебных отзывов к компоненту, который на тот момент скорее вредил, чем был полезен. То, что было изначально, было очень далеким от того, что вы сейчас хвалите. Думаю с такой логикой, как у вас, вы никогда не сделаете нормального веб проекта, ибо мышление, как таковое отсутствует.
p/s ^ Покажите мне хамство моё, чтобы я задел лично человека, либо что то затронул, не относящееся к сайтам. В ином случае необходимо извиниться. Если конечно характер есть.
Хамство:Хам - сын Ноя, публично высмеял своего отца когда тот перебрал в выпивке и уснул на улице нагим, это упрощенная интерпретация Библейского понимания "хамства". Хамство - эмоциональное, агрессивное, вычурное, нарочито показательное состояние (состояние сознания направленного на заведомое унижение чести и достоинства личности) человека заведомо понимающего то, что адекватного ответа или противодействия оппонент оказать не в состоянии по причине слабости, зависимости, беспомощности.
В общем извиняться не вижу смысла, и хоть явных доказательств нет, но искать уже не хочу. Доверяю своему сложившемуся мнению
P/S считаю хамством затронуть сайт человека, в который он вложил душу и много сил. Хоть и не трогать его лично.
Мы с Fuze в спорах, а спорили мы в аське, скайпе, тут на сайте - сломали сотни копий. Но я с уважением отношусь к нему - он отвественный разработчик и профессионал. Мы просили долго редактор, не я один, в итоге таки он услышал и сделал, сразу очень сильно улучшив перспективу 1 ветки. Это результат.
А выводятся только картинки, добавил галочку выводить описание, стало выводиться. В общем вышел из ситуации, вывожу описание но с количеством символов 0.
Такая же беда, если выводить автора, то выводятся еще и теги.
Добавлю в настройки релеванта длину слов и стоп слова, для исключения из поиска. И после выходных выложу обновление.
Использование памяти время обработки на чистой CMS и после установки данного компонента.
Если у вас используется свой файл шаблона для вывода записи контента, то соответственно, это надо сделать в нём.
З.Ы. А в настройках карты парсера, у вас данное поле присутствует? Может его добавить в карту и выставить значение равным 1, и тогда должна появиться эта галочка. Но это скорее вопрос к разработчику AviPars. Так как мне неизвестно, как у него реализована функция добавления данных записи в БД.
Теперь компонент работает только с версией InstantCMS 2.2.0.
Обновлена работа с изображениями. Теперь, если выбран пользовательский пресет и файла заглушки с таким названием не существует, будет выведена заглушка с названием small. Поэтому для всех пользовательских пресетов желательно делать файл заглушки, такого же размера.
Переделана функция кэширования.
Подправлены стили. Исправлены некоторые мелочи в плане "юзабилити".
В настройки полнотекстового поиска релеванта вынесены значения длины слова и поле для ввода слов исключений из поиска. Слова короче указанной длины будут исключены из поиска. По умолчанию его значение равно 4 символам (оптимально для кирилицы). Значение можно изменить, как в большую сторону, так и в меньшую (но без фанатизма).
Обновление качать тут.
Кстати, сегодня-завтра думаю отправить всем обновление с тем, о чём здесь пишу.
Поставил ваш замечательный компонент, сделал вывод полем, похожий контент появляется только у новых постов, а старые даже если редактирую, все равно не выводят поле. Что можно сделать, чтобы поле выводилось и в старых постах? Еще съезжают нижние правые колонки выводимого контента, как на скриншоте. Что нужно в стиле поправить, чтобы было все ровно?
По поводу стилей - в файле templates\default\controllers\relevanter\relevants_default_list.tpl.php в строке 6 добавьте css класс row-in, чтоб стало так.
Notice: Array to string conversion in /system/controllers/relevanter/hooks/relevant_events.php on line 52
Notice: Undefined variable: category in /system/controllers/relevanter/hooks/relevant_events.php on line 72
Notice: Undefined variable: subcats in /system/controllers/relevanter/hooks/relevant_events.php on line 85
Подскажите как исправить можно?
Но потом как то решили.
Проверьте эту проблему. Ставил все версии, везде встречается одна и та же проблема.
Понимаю, Loadырь, что Вы не экстрасенс, но все же нет ли у вас предположений о том, что может вызывать такие тормоза именно в последней версии ICMS 2.4.0
А так же хотел спросить других пользователей этого компонента, не замечали ли Вы таких проблем?
Хотел вытаскивать похожий контент с доски объявлений...из категорий...так и не понял как можно объявления в похожий контент вытащить...
Сделал на странице со статьями с одной категорией..вытаскивает в записи похожие статьи...можно сказать что компонент удался для удобства пользователей читающих статьи чтоб не прыгать обратно на страницу и не искать подобное после прочтения одной из записей....
Не заметил торможения загрузки страницы, на каждой странице еще есть видео: как только видео прогружается в статье - все хорошо, хотя видео стоит в центре статьи прогружается оно дольше чем "похожий контент" стоящий в конце. Можно сказать основной контент и похожий - прогружаются одновременно.
За удобство однозначный плюс!)
а еще понял для себя что для статей тегов не надо много - пишу теперь один тег в любой статье "название катигории" чтоб не путаться и вытаскивает отлично)....
Подскажите, где можно добавить проверку на выключенный материал? Т.к. в данный момент он выводится в блоке похожих, даже если http://joxi.ru/82QeQGWfzz9l2d
Спасибо)
Я проверить не могу, у меня на тестовом сайте контента почти нет.
503
Ошибка в запросе БД:
Data truncated for column 'relenantnews' at row 1
ALTER TABLE `cms_con_news` CHANGE `relenantnews` `relenantnews` TINYINT( 1 ) NOT NULL DEFAULT '1'
Последние вызовы:
modelContent->updateContentField() @ /system\controllers\admin\actions\ctypes_fields_edit.php : 69
actionAdminCtypesFieldsEdit->run() @ /system\core\controller.php : 585
cmsController->runExternalAction() @ /system\core\action.php : 37
cmsAction->__call() @ /system\controllers\admin\actions\ctypes.php : 11
actionAdminCtypes->run() @ /system\core\controller.php : 585
cmsController->runExternalAction() @ /system\core\controller.php : 456
cmsController->executeAction() @ /system\core\controller.php : 432
cmsController->runAction() @ /system\core\core.php : 786
cmsCore->runController() @ /index.php : 46
Поставил 2.13.1, поставил компонент из раздела дополнений, выбрал сквозной в типе контента. Редактирую сам релевант, редактирую новость, ошибку не могу воспроизвести. http://prefitchi.ru/news/6-vse-bolshe-rossijan-pokupayut-nedvizhimost-za-granicei.html