Плагин Похожие объявления

#1 4 апреля 2016 в 21:53
Что бы не оффтопить далее в теме посвященной другому вопросу instantcms.ru/forum/thread24186-1.html
на тему плагина похожие объявления instantcms.ru/blogs/moi-blog-360/plagin-pohozhie-objavlenija-v-1-0-0.html
Спасибо за плагин Марату)

Немного доработал плагин.

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

Добавил проверку на статус объвления. Объявления которые ещё не прошли модерацию, не выводятся.

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

Измененный код плагина

  1. <?php
  2. /*******************************************************************************/
  3. // InstantCMS v1.10.1 //
  4. // http://instantcms.ru/ // //
  5. // плагин "Похожие объявления" v.1.0.0 //
  6. // (p_more_adverts) //
  7. // written by Marat Fatikhov //
  8. // (nickname Марат on a site) //
  9. // E-mail: f-marat@mail.ru //
  10. // //
  11. // LICENSED BY GNU/GPL v2 //
  12. // //
  13. /********************************************************************************/
  14. class p_more_adverts extends cmsPlugin {
  15.  
  16. //=============================================================================//
  17.  
  18.  
  19. public function __construct(){
  20.  
  21. parent::__construct();
  22.  
  23. // Информация о плагине
  24.  
  25. $this->info['plugin'] = 'p_more_adverts';
  26. $this->info['title'] = 'Похожие объявления';
  27. $this->info['description'] = 'Выводит похожие объявления при просмотре объявления';
  28. $this->info['author'] = 'Marat Fatikhov';
  29. $this->info['version'] = '1.0.0';
  30.  
  31. // Настройки по-умолчанию
  32. $this->config['Количество выводимых объявлений'] = 5;
  33.  
  34. // События, которые будут отлавливаться плагином
  35.  
  36. $this->events[] = 'GET_BOARD_RECORD';
  37. }
  38.  
  39. // ==================================================================== //
  40.  
  41. /**
  42.   * Процедура установки плагина
  43.   * @return bool
  44.   */
  45. public function install(){
  46.  
  47. return parent::install();
  48.  
  49. }
  50.  
  51. // ==================================================================== //
  52.  
  53. /**
  54.   * Процедура обновления плагина
  55.   * @return bool
  56.   */
  57. public function upgrade(){
  58.  
  59. return parent::upgrade();
  60.  
  61. }
  62.  
  63. // ==================================================================== //
  64.  
  65. /**
  66.   * Обработка событий
  67.   * @param string $event
  68.   * @param mixed $item
  69.   * @return mixed
  70.   */
  71. public function execute($event, $item){
  72.  
  73. parent::execute();
  74.  
  75. switch ($event){
  76. case 'GET_BOARD_RECORD': $item = $this->getMoreAdverts($item); break;
  77. }
  78.  
  79. return $item;
  80.  
  81. }
  82.  
  83. // ==================================================================== //
  84. private function getMoreAdverts($advert){
  85.  
  86. $inDB = cmsDatabase::getInstance();
  87.  
  88. $limit = $this->config['Количество выводимых объявлений'];
  89. $limit = ($limit != 0) ? (int)$limit : 5;
  90.  
  91. $advert['more'] = '';
  92.  
  93. //выборка из базы данных
  94. $sql = "SELECT id, obtype, title, content, city, published, file, category_id
  95. FROM `cms_board_items`
  96. WHERE id != '{$advert['id']}' AND city = '{$advert['city']}' AND published = 1 AND
  97. obtype = '{$advert['obtype']}' AND category_id = '{$advert['category_id']}'
  98. ORDER BY id DESC
  99. LIMIT {$limit}";
  100.  
  101. $rs = $inDB->query($sql);
  102. if(!$inDB->num_rows($rs)){ return $advert; }
  103. $advert['more'] = '<div class="con_heading" style="margin-top:25px;"><h3>Похожие объявления:</h3></div>';
  104. while ($item = $inDB->fetch_assoc($rs)){
  105. if ($item['file'] == ""){
  106. $img = '/images/board/small/nopic.jpg';
  107. } else {
  108. $img = '/images/board/small/'.$item['file'];
  109. }
  110.  
  111. $content = mb_strimwidth($item['content'], 0, 200, "...");
  112.  
  113. $advert['more'] .= '<div class="p_more_adverts">
  114. <img class="bd_image_small" src="'.$img.'"/>
  115.  
  116. <a href="/board/read'.$item['id'].'.html">'.$item['title'].'</a>
  117.  
  118. <span class="p_more_adverts_span">'.$item['obtype'].'</span>
  119.  
  120. <span class="p_more_adverts_span">'.$item['city'].'</span>
  121.  
  122. <span class="p_more_adverts_content">'.$content.'</span>
  123. </div>';
  124. }
  125.  
  126. return $advert;
  127. }
  128. // ==================================================================== //
  129.  
  130. }//class
  131. ?>
  132.  
  133.  
Стили которые я использовал

  1. .p_more_adverts{
  2. max-width:100%;
  3. display:blog;
  4. padding:5px;
  5. margin:2px;
  6. border:1px dotted silver;}
  7. .p_more_adverts img{
  8. float:left;
  9. margin:3px;}
  10. .p_more_adverts_span{
  11. color:grey;
  12. font-size:12px;}


Выглядит так.

#2 4 апреля 2016 в 22:10
а если в настройках сделать возможность регулирования релевантности?
Допустим брать объявления
— с одного города
— со всех городов

Выбирать объявления
— по ключевым словам
— брать строго из той же категории

в общем, сделать расширенные настройки? может быть даже как вкладка в админке для компонента ДО
#3 4 апреля 2016 в 22:32

а если в настройках

Blackman-st
по феншую наверно так и надо, мысль понятная.
Но на лету сделать этого не могу, а сидеть думать над этим — не интересно, потому что приведенный вариант полностью подходит под мои представления о том, что должен выводить подобный плагин. Объявления из той же категории, тот же тип объявлений, тот же город — релевантно на 100%.
Может кто то другой…
#4 5 апреля 2016 в 06:30

У меня, выглядит вот так, правда стоит сказать, что стоит улучшенная доска от максисофт, может поэтому нет отображения картинок?
#5 5 апреля 2016 в 07:00
Петрмаг, смените кодировку на кирилицу и у вас станет так smile
Вам надо сменить кодировку файла плагина.
#6 5 апреля 2016 в 08:05
да с кодировкой понятно, а вот с картинками что-то нет
#7 5 апреля 2016 в 08:14
Петрмаг, у вас наверное картинки лежат в БД не в ячейке file а в какой-то другой.
#8 5 апреля 2016 в 10:21

У меня, выглядит вот так, правда стоит сказать, что стоит улучшенная доска от максисофт, может поэтому нет отображения картинок?

Петрмаг
Откройте файл в. Notepad и перекодируйте ещё раз в utf8. Потом тут же заменитель текст похожие объявления они у вас там наверно в вопросы превратятся.
#9 5 апреля 2016 в 16:13



У меня, выглядит вот так, правда стоит сказать, что стоит улучшенная доска от максисофт, может поэтому нет отображения картинок?

Петрмаг

Улучшенная доска в каком виде даётся, платно или нет?
#10 5 апреля 2016 в 16:14


У меня, выглядит вот так, правда стоит сказать, что стоит улучшенная доска от максисофт, может поэтому нет отображения картинок?

Петрмаг
Откройте файл в. Notepad и перекодируйте ещё раз в utf8. Потом тут же заменитель текст похожие объявления они у вас там наверно в вопросы превратятся.

Нил™

Установил, глюков вроде бы нет, но у меня доска пустая поэтому точно сказать не могу. Стили не использовал.
#11 30 апреля 2016 в 14:56

Как решить проблему?

SHDF

у вас наверное картинки лежат в БД не в ячейке file а в какой-то другой.

Loadырь

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