Плагин "Похожие объявления" v. 1.0.0

4954
Всем привет!
Плагин "Похожие объявления" v 1.0.0 для InstantCMS 1.10.1. Название само говорит за себя. Добавлять тут особо нечего.

Где то на форуме проскакивала тема. В самом деле, вроде такой разработки ещё не было. Принял на заметку, выдалась свободная минутка, набросал. Может кому и пригодится.

При просмотре объявления выводит похожие объявления.

Алгоритм выборки из базы данных. Условие выборки: все объявления из категории показываемого объявления, у которых тип объявления равен типу показываемого объявления плюс полнотекстовый поиск по полю "content"(содержание объявления) в БД заголовка(title) показываемого объявления. Выборка сортируется по дате публикации по убыванию и показываются ссылки на страницы объявлений согласно лимиту. Лимит устанавливается в админке. Как то так. Лучше не придумал )

Если алгоритм подбора не подходит, после теста можно будет подправить. Замечания и предложения принимаются в комментариях к посту. Только прошу обосновывать.

Дизайн минималистский. Только ссылка. Думаю, больше и не нужно ничего.

Собственно

СКАЧАТЬ

Установка стандартная для плагинов. Закачиваем на хостинг и устанавливаем в админке плагин "Похожие объявления".
В нужном месте файла шаблона com_board_item.tpl вставить {$item.more}.

Приятного пользования!

UPDATE 13.02.13 09:24:

Архив перезалил. Исправлены ошибки:
1. Похожие объявления выводились над прикрепленными формами;
2. При редактировании объявления тоже срабатывает плагин и в поле редактирования появляется ненужное.
Кто уже устанавливал, перезалейте файл плагина. Кроме того, чтобы выводились похожие объявления, надо в нужном вам месте файла шаблона com_board_item.tpl вставить {$item.more}. Без этого никак. Файл шаблона в архив не вложен. Вдруг у кого свой файл, и замените не глядя дефолтным ) Поправочку в файл сделаете сами )
Плагин "Статусы пользователей" плюс хак к компоненту "Пользователи" v.1.1 для ICMS 1.10.1 | Статистика кликов Яндекс Директа
Комментарии (39)
Endroid 13 февраля 2013 в 00:37 0
Отлично! Всё работает!
lezginka.ru 13 февраля 2013 в 00:53 0
+
Марат, поделись энтузиазмом :))
Марат 13 февраля 2013 в 01:03 +4
Да какой, Аким, энтузиазм? ))) Даже десятую часть того, что хотелось бы, не успеваю делать... Проходят дни в мелких заботах )
Malanas 13 февраля 2013 в 00:55 0
Полезный плагин +
ukrtop 13 февраля 2013 в 01:09 +1
Спс! Под 1.9 то-же полет нормальный!
letsgo 13 февраля 2013 в 01:41 -2
Оо Наконец то) Просьба моя в 4 темах где то попалась на глаза Марату. Ну вот теперь другое дело. Спасибо.
Марат 13 февраля 2013 в 08:28 +2
Ну, если много раз повторять кто-нибудь да услышит smile
picaboo 13 февраля 2013 в 14:06 +2
эх, вот бы еще Марату попалась моя просьба сделать нормальные сеоурлы в основных компонентах :)
Марат 13 февраля 2013 в 15:01 +1
увы не всё так просто smile
eoleg 13 февраля 2013 в 02:33 0
+
Никто не проверял, конфликтует ли с супердоской от максисофта?
lesterkey 13 февраля 2013 в 02:38 0
+ однозначно.. только небольшой вопрос? у меня при выводе объявлений вставляется форма. (там цена,адрес, имя) и плагин встается между текстом обЪявлениея и формой...

если не тяжело подскажите как плагин поставить в самый низ а именно под формы...
Марат 13 февраля 2013 в 08:26 +2
Спасибо. Верное замечание, по теме. Посмотрю, что можно сделать.
lesterkey 13 февраля 2013 в 12:16 0
спасибо все работает как и задуманно...
Марат 13 февраля 2013 в 09:23 +4
Архив перезалил. Исправлено пару критических ошибок. Изменился порядок установки плагина. Подробности в UPDATE в посте.
Майкл 13 февраля 2013 в 18:11 0
Спасибо, Марат!
Ща заплюсую)))
Saw 13 февраля 2013 в 18:12 0
Нужная штуковина. Спасибо!
Askarzhanzak 15 февраля 2013 в 15:40 0
Спасибо! Все работает.+
letsgo 16 февраля 2013 в 11:52 -2
Поставил, отличная перелинковка получилась, для посетителя тоже удобно! Но вот релеватность чуть бы обдумать. Выходит так

Обьявление: Обмен Мерседес Бенц 124 230Е, год

Текст: Мерседес Бенц 124 230Е, год., черный, седан, на Фольксваген Т4, Шаран. т.

Похожие обьявления

Продаю N мкр., 39000$
Транспортные Грузоперевозки: Газели, 1
Транспортные Грузо-пассажирские перевозки: Мерседес, 10 мест
Транспортные Грузо-пассажирские перевозки: Газель, 7 мест
Транспортные Грузо-пассажирские перевозки: бус, 2

Может поставить настройку плагина, откуда брать текст для похожих? Я бы брал только с титла, ибо там релеватность выше. И почему то плагин берет с разных подкатегорий обьявления. Легковые автомобили и Грузоперевозки.
Марат 16 февраля 2013 в 16:46 +2
Вот сам запрос
Код PHP:
  1.  
  2. $sql = "SELECT id, obtype, title
  3. FROM `cms_board_items`
  4. WHERE id != '{$advert['id']}' AND
  5. ((obtype = '{$advert['obtype']}' AND category_id = '{$advert['category_id']}') OR
  6. MATCH(content) AGAINST('{$advert['title']}'))
  7. ORDER BY id DESC
  8. LIMIT {$limit}";
  9.  
То есть получается, что берутся объявления со своей категории и с совпадением типа объявления + ищутся объявления, у которых в поле содержание содержатся слова из тайтла показываемого(полнотекстовый поиск). Если заменить MATCH(content) на MATCH(title), то будут искаться по полю title(релевантность по тайтлам). Там тоже есть fulltext индекс(нужно для поиска). Можно вообще убрать поиск, а выводить только из данной категории и по типу. Тогда запрос будет такой:
Код PHP:
  1.  
  2. $sql = "SELECT id, obtype, title
  3. FROM `cms_board_items`
  4. WHERE id != '{$advert['id']}' AND
  5. obtype = '{$advert['obtype']}' AND category_id = '{$advert['category_id']}'
  6. ORDER BY id DESC
  7. LIMIT {$limit}";
  8.  
Или сделать поиск но только по данной категории. Так:
Код PHP:
  1.  
  2. $sql = "SELECT id, obtype, title
  3. FROM `cms_board_items`
  4. WHERE id != '{$advert['id']}' AND
  5. category_id = '{$advert['category_id']}' AND
  6. MATCH(content) AGAINST('{$advert['title']}')
  7. ORDER BY id DESC
  8. LIMIT {$limit}";
  9.  
letsgo 17 февраля 2013 в 01:02 -2
Спасибо Марат. Все сразу ясно.
Марат 17 февраля 2013 в 08:57 0
Кстати, почему оставил существующий вариант. Долго думал, как же всё таки сделать. Если сделать только по типу и из данной категории, то при малом количестве объявлений в категории получится, что все объявления из категории ссылаются друг на друга. Насколько понимаю, это тоже не совсем хорошо, ссылающиеся друг на друга страницы. Поэтому добавил ещё объявления по поиску, чтобы разбить круг. Почему сделал поиск слов из тайтла по полю контент? Заметил, что обычно в содержимом дублируется тайтл объявления, иногда даже более раскрытый и подробный. Поэтому, наверно содержимое будет более релевантное, чем просто тайтл.
letsgo 17 февраля 2013 в 10:18 -1
Да если обьявлений немного, тогда первый вариант лучше будет, а если много, то лучше третий. Кстати если глянуть сортировку обьявлений в доске, то она там мягко говоря очень странная. Практически не найти новые обьявления. В админке написано: Неопубликованных объявлений - 110. Нажимаешь показать, просто переходишь в общий список с 2011 года. Как найти неопубликованные, интересный вопрос) И еще в доску объявлений было бы неплохо добавлять закрытие. Прошло 10 суток, вместо удаления добавляется надпись обьявление закончило срок и закрыто.
Петрмаг 3 марта 2016 в 09:21 0
Запросы на 1.10.6 не помогли
1.Как сделать похожие объявления по рубрикам из категории
2. как увеличить число объявлений у меня стоит 5 делаю например 15,но все-равно остается 5
?????
Dorimen 27 апреля 2013 в 11:20 0
Вопрос так. Плагин выводит в похожих объявления, которые имеют статус не опубликовано. Как это исправить?
Марат 29 апреля 2013 в 20:07 0
Этот момент я не учел. Но поправить легко. В файле плагина найдите строку 96
Код SQL:
  1. WHERE id != '{$advert['id']}' AND
И замените на
Код SQL:
  1. WHERE id != '{$advert['id']}' AND published = 1 AND
Dorimen 29 апреля 2013 в 23:08 0
Спасибо.
platon 29 апреля 2013 в 16:20 0
Подскажите куда именно или посоветуйте куда это прописать:
"В нужном месте файла шаблона com_board_item.tpl вставить {$item.more}."
Марат 29 апреля 2013 в 19:54 +1
Прямо перед строчками
Код PHP:
  1.  
  2. {if $cfg.comments}
  3. {comments target='boarditem' target_id=$item.id}
  4. {/if}
  5.  
Вставьте
Код PHP:
  1. <div>{$item.more}</div>
И если нужно оформите <div> стилями css
platon 29 апреля 2013 в 21:04 0
спасибо!
Man 8 мая 2013 в 20:13 0
На 1.9 будет работать?
Марат 8 мая 2013 в 23:30 +1
Не проверял. Не могу сказать.
Man 9 мая 2013 в 00:05 0
Только что залил – работает! Только пришлось поменять кодировку плагина на windows-1251, т.к. у меня вечная проблема с абракадаброй.
Dorimen 8 мая 2013 в 23:33 +1
У меня работает на 1.9.
letsgo 21 ноября 2014 в 21:04 -1
Не поленюсь сказать еще раз спасибо Марату. очень нужная вещь, если используете доску обьявлений. На 104 встало и поехало как надо.
Евгений Фоменко 13 августа 2015 в 14:43 0
Подскажите. Вижу ошибку
Код PHP:
  1. Strict Standards: Declaration of p_more_adverts::execute() should be compatible with cmsPlugin::execute($event = '', $item = Array) in /home/сайт/www/plugins/p_more_adverts/plugin.php on line 116
Объявления выводятся. Я так подозреваю, в 1.10.6 нужно менять что-то, но я не могу вспомнить что.
Вот функция execute
Код PHP:
  1. public function execute($event, $item){
  2.  
  3. parent::execute();
  4.  
  5. switch ($event){
  6. case 'GET_BOARD_RECORD': $item = $this->getMoreAdverts($item); break;
  7. }
  8.  
  9. return $item;
  10.  
  11. }
Пытался сменить ($event, $item) на ($event = '', $item = Array) - ошибка 404.
Печаль-тоска. Подскажет кто?
Loadырь 13 августа 2015 в 14:46 0
Надо менять public function execute($event, $item) на public function execute($event = '', $item = array())
Евгений Фоменко 13 августа 2015 в 15:28 0
Пытался сменить ($event, $item) на ($event = '', $item = Array) - ошибка 404.
Не помогает, пробовал пару раз, результат описал выше.
Евгений Фоменко 13 августа 2015 в 15:41 0
А, не, простите - я чуть затупил с переменной, Вы правы. Этот вариант является решением проблемы.
Спасибо большое!
Нил™ 19 февраля 2016 в 02:20 0
Спасибо за плагин. Пригодился в качестве примера ещё для двух другого рода.))
Заметил, что нет проверки на статус объявления и умеет выводить даже те объявления, которые еще не одобрены модератором)