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

+82
5.73K
Всем привет!
Плагин "Похожие объявления" 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}. Без этого никак. Файл шаблона в архив не вложен. Вдруг у кого свой файл, и замените не глядя дефолтным ) Поправочку в файл сделаете сами )
0
Endroid Endroid 11 лет назад #
Отлично! Всё работает!
0
lezginka.ru lezginka.ru 11 лет назад #
+
Марат, поделись энтузиазмом :))
+4
Марат Марат 11 лет назад #
Да какой, Аким, энтузиазм? ))) Даже десятую часть того, что хотелось бы, не успеваю делать... Проходят дни в мелких заботах )
0
Malanas Malanas 11 лет назад #
Полезный плагин +
+1
ukrtop ukrtop 11 лет назад #
Спс! Под 1.9 то-же полет нормальный!
-2
letsgo letsgo 11 лет назад #
Оо Наконец то) Просьба моя в 4 темах где то попалась на глаза Марату. Ну вот теперь другое дело. Спасибо.
+2
Марат Марат 11 лет назад #
Ну, если много раз повторять кто-нибудь да услышит smile
+2
picaboo picaboo 11 лет назад #
эх, вот бы еще Марату попалась моя просьба сделать нормальные сеоурлы в основных компонентах :)
+1
Марат Марат 11 лет назад #
увы не всё так просто smile
0
eoleg eoleg 11 лет назад #
+
Никто не проверял, конфликтует ли с супердоской от максисофта?
0
lesterkey lesterkey 11 лет назад #
+ однозначно.. только небольшой вопрос? у меня при выводе объявлений вставляется форма. (там цена,адрес, имя) и плагин встается между текстом обЪявлениея и формой...

если не тяжело подскажите как плагин поставить в самый низ а именно под формы...
+2
Марат Марат 11 лет назад #
Спасибо. Верное замечание, по теме. Посмотрю, что можно сделать.
0
lesterkey lesterkey 11 лет назад #
спасибо все работает как и задуманно...
+4
Марат Марат 11 лет назад #
Архив перезалил. Исправлено пару критических ошибок. Изменился порядок установки плагина. Подробности в UPDATE в посте.
0
Майкл Майкл 11 лет назад #
Спасибо, Марат!
Ща заплюсую)))
0
Saw Saw 11 лет назад #
Нужная штуковина. Спасибо!
0
Askarzhanzak Askarzhanzak 11 лет назад #
Спасибо! Все работает.+
-2
letsgo letsgo 11 лет назад #
Поставил, отличная перелинковка получилась, для посетителя тоже удобно! Но вот релеватность чуть бы обдумать. Выходит так

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

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

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

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

Может поставить настройку плагина, откуда брать текст для похожих? Я бы брал только с титла, ибо там релеватность выше. И почему то плагин берет с разных подкатегорий обьявления. Легковые автомобили и Грузоперевозки.
+2
Марат Марат 11 лет назад #
Вот сам запрос
Код PHP:
  1. $sql = "SELECT id, obtype, title
  2. FROM `cms_board_items`
  3. WHERE id != '{$advert['id']}' AND
  4. ((obtype = '{$advert['obtype']}' AND category_id = '{$advert['category_id']}') OR
  5. MATCH(content) AGAINST('{$advert['title']}'))
  6. ORDER BY id DESC
  7. LIMIT {$limit}";
То есть получается, что берутся объявления со своей категории и с совпадением типа объявления + ищутся объявления, у которых в поле содержание содержатся слова из тайтла показываемого(полнотекстовый поиск). Если заменить MATCH(content) на MATCH(title), то будут искаться по полю title(релевантность по тайтлам). Там тоже есть fulltext индекс(нужно для поиска). Можно вообще убрать поиск, а выводить только из данной категории и по типу. Тогда запрос будет такой:
Код PHP:
  1. $sql = "SELECT id, obtype, title
  2. FROM `cms_board_items`
  3. WHERE id != '{$advert['id']}' AND
  4. obtype = '{$advert['obtype']}' AND category_id = '{$advert['category_id']}'
  5. ORDER BY id DESC
  6. LIMIT {$limit}";
Или сделать поиск но только по данной категории. Так:
Код PHP:
  1. $sql = "SELECT id, obtype, title
  2. FROM `cms_board_items`
  3. WHERE id != '{$advert['id']}' AND
  4. category_id = '{$advert['category_id']}' AND
  5. MATCH(content) AGAINST('{$advert['title']}')
  6. ORDER BY id DESC
  7. LIMIT {$limit}";
-2
letsgo letsgo 11 лет назад #
Спасибо Марат. Все сразу ясно.
0
Марат Марат 11 лет назад #
Кстати, почему оставил существующий вариант. Долго думал, как же всё таки сделать. Если сделать только по типу и из данной категории, то при малом количестве объявлений в категории получится, что все объявления из категории ссылаются друг на друга. Насколько понимаю, это тоже не совсем хорошо, ссылающиеся друг на друга страницы. Поэтому добавил ещё объявления по поиску, чтобы разбить круг. Почему сделал поиск слов из тайтла по полю контент? Заметил, что обычно в содержимом дублируется тайтл объявления, иногда даже более раскрытый и подробный. Поэтому, наверно содержимое будет более релевантное, чем просто тайтл.
-1
letsgo letsgo 11 лет назад #
Да если обьявлений немного, тогда первый вариант лучше будет, а если много, то лучше третий. Кстати если глянуть сортировку обьявлений в доске, то она там мягко говоря очень странная. Практически не найти новые обьявления. В админке написано: Неопубликованных объявлений - 110. Нажимаешь показать, просто переходишь в общий список с 2011 года. Как найти неопубликованные, интересный вопрос) И еще в доску объявлений было бы неплохо добавлять закрытие. Прошло 10 суток, вместо удаления добавляется надпись обьявление закончило срок и закрыто.
0
Петрмаг Петрмаг 8 лет назад #
Запросы на 1.10.6 не помогли
1.Как сделать похожие объявления по рубрикам из категории
2. как увеличить число объявлений у меня стоит 5 делаю например 15,но все-равно остается 5
?????
0
Dorimen Dorimen 11 лет назад #
Вопрос так. Плагин выводит в похожих объявления, которые имеют статус не опубликовано. Как это исправить?
0
Марат Марат 11 лет назад #
Этот момент я не учел. Но поправить легко. В файле плагина найдите строку 96
Код SQL:
  1. WHERE id != '{$advert['id']}' AND
И замените на
Код SQL:
  1. WHERE id != '{$advert['id']}' AND published = 1 AND
0
Dorimen Dorimen 11 лет назад #
Спасибо.
0
platon platon 11 лет назад #
Подскажите куда именно или посоветуйте куда это прописать:
"В нужном месте файла шаблона com_board_item.tpl вставить {$item.more}."
+1
Марат Марат 11 лет назад #
Прямо перед строчками
Код PHP:
  1. {if $cfg.comments}
  2. {comments target='boarditem' target_id=$item.id}
  3. {/if}
Вставьте
Код PHP:
  1. <div>{$item.more}</div>
И если нужно оформите <div> стилями css
0
platon platon 11 лет назад #
спасибо!
0
Man Man 11 лет назад #
На 1.9 будет работать?
+1
Марат Марат 11 лет назад #
Не проверял. Не могу сказать.
0
Man Man 11 лет назад #
Только что залил – работает! Только пришлось поменять кодировку плагина на windows-1251, т.к. у меня вечная проблема с абракадаброй.
+1
Dorimen Dorimen 11 лет назад #
У меня работает на 1.9.
-1
letsgo letsgo 9 лет назад #
Не поленюсь сказать еще раз спасибо Марату. очень нужная вещь, если используете доску обьявлений. На 104 встало и поехало как надо.
0
Евгений Фоменко Евгений Фоменко 9 лет назад #
Подскажите. Вижу ошибку
Код 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. parent::execute();
  3. switch ($event){
  4. case 'GET_BOARD_RECORD': $item = $this->getMoreAdverts($item); break;
  5. }
  6. return $item;
  7. }
Пытался сменить ($event, $item) на ($event = '', $item = Array) - ошибка 404.
Печаль-тоска. Подскажет кто?
0
Loadырь Loadырь 9 лет назад #
Надо менять public function execute($event, $item) на public function execute($event = '', $item = array())
0
Евгений Фоменко Евгений Фоменко 9 лет назад #
Пытался сменить ($event, $item) на ($event = '', $item = Array) - ошибка 404.
Не помогает, пробовал пару раз, результат описал выше.
0
Евгений Фоменко Евгений Фоменко 9 лет назад #
А, не, простите - я чуть затупил с переменной, Вы правы. Этот вариант является решением проблемы.
Спасибо большое!
0
Нил™ Нил™ 8 лет назад #
Спасибо за плагин. Пригодился в качестве примера ещё для двух другого рода.))
Заметил, что нет проверки на статус объявления и умеет выводить даже те объявления, которые еще не одобрены модератором)

Еще от автора

Фильтр "Вставка модуля" v 1.0.0
Приветик! Давненько что-то я ничего не писал ) Не знаю было это или не было, вчера увидел темку, решил сделать немного по-другому. Вещь то нужная.
PHP классы для работы с VK API и с API Яндекс Метрики
Доброго времени суток, коллеги! Выкладываю два класса: -для работы с API Вконтакте; -для работы с API Яндекс Метрики.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.