на тему плагина похожие объявления instantcms.ru/blogs/moi-blog-360/plagin-pohozhie-objavlenija-v-1-0-0.html
Спасибо за плагин Марату)
Немного доработал плагин.
Добавил вывод города, картинки, содержимого объявления в размере не более 200 символов.
Добавил проверку на статус объвления. Объявления которые ещё не прошли модерацию, не выводятся.
Убрана возможность поиска объявлений по ключевым словам, объявления берутся строго из той же категории и из того же города. Это и есть релевантность.
Измененный код плагина
<?php /*******************************************************************************/ // InstantCMS v1.10.1 // // http://instantcms.ru/ // // // плагин "Похожие объявления" v.1.0.0 // // (p_more_adverts) // // written by Marat Fatikhov // // (nickname Марат on a site) // // E-mail: f-marat@mail.ru // // // // LICENSED BY GNU/GPL v2 // // // /********************************************************************************/ class p_more_adverts extends cmsPlugin { //=============================================================================// public function __construct(){ parent::__construct(); // Информация о плагине $this->info['plugin'] = 'p_more_adverts'; $this->info['title'] = 'Похожие объявления'; $this->info['description'] = 'Выводит похожие объявления при просмотре объявления'; $this->info['author'] = 'Marat Fatikhov'; $this->info['version'] = '1.0.0'; // Настройки по-умолчанию $this->config['Количество выводимых объявлений'] = 5; // События, которые будут отлавливаться плагином $this->events[] = 'GET_BOARD_RECORD'; } // ==================================================================== // /** * Процедура установки плагина * @return bool */ public function install(){ return parent::install(); } // ==================================================================== // /** * Процедура обновления плагина * @return bool */ public function upgrade(){ return parent::upgrade(); } // ==================================================================== // /** * Обработка событий * @param string $event * @param mixed $item * @return mixed */ public function execute($event, $item){ parent::execute(); switch ($event){ case 'GET_BOARD_RECORD': $item = $this->getMoreAdverts($item); break; } return $item; } // ==================================================================== // private function getMoreAdverts($advert){ $inDB = cmsDatabase::getInstance(); $limit = $this->config['Количество выводимых объявлений']; $limit = ($limit != 0) ? (int)$limit : 5; $advert['more'] = ''; //выборка из базы данных $sql = "SELECT id, obtype, title, content, city, published, file, category_id FROM `cms_board_items` WHERE id != '{$advert['id']}' AND city = '{$advert['city']}' AND published = 1 AND obtype = '{$advert['obtype']}' AND category_id = '{$advert['category_id']}' ORDER BY id DESC LIMIT {$limit}"; $rs = $inDB->query($sql); if(!$inDB->num_rows($rs)){ return $advert; } $advert['more'] = '<div class="con_heading" style="margin-top:25px;"><h3>Похожие объявления:</h3></div>'; while ($item = $inDB->fetch_assoc($rs)){ if ($item['file'] == ""){ $img = '/images/board/small/nopic.jpg'; } else { $img = '/images/board/small/'.$item['file']; } $advert['more'] .= '<div class="p_more_adverts"> <img class="bd_image_small" src="'.$img.'"/> <a href="/board/read'.$item['id'].'.html">'.$item['title'].'</a> <span class="p_more_adverts_span">'.$item['obtype'].'</span> <span class="p_more_adverts_span">'.$item['city'].'</span> <span class="p_more_adverts_content">'.$content.'</span> </div>'; } return $advert; } // ==================================================================== // }//class ?>
.p_more_adverts{ max-width:100%; display:blog; padding:5px; margin:2px; border:1px dotted silver;} .p_more_adverts img{ float:left; margin:3px;} .p_more_adverts_span{ color:grey; font-size:12px;}
Выглядит так.