Короче вчера вечером кое-кому кое-что ударило в голову прикрутить умный поиск к доске объявлений AdsManager 2.9 , Joomla 2.5 . Типа хочется умные подсказки чеб выскакивали и типа все тут.
И меня подтянули .. Ну значит лезу я в инет а там и нету ни фига...
Пришлось сесть и начать разбираться как работает этот умный поиск и как написать этот чертов плагин для работы Умного поиcка в AdsManager самостоятельно.
После пары часов танцев с бубнами сам код плагина получился вот такой (кидание помидорами приветствуется )
/plugins/finder/adsmanager/adsmanager.php
<?php /** * @package Joomla.Plugin * @subpackage Finder.Content * * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ defined('JPATH_BASE') or die; jimport('joomla.application.component.helper'); // Load the base adapter. require_once JPATH_ADMINISTRATOR . '/components/com_finder/helpers/indexer/adapter.php'; class plgFinderAdsmanager extends FinderIndexerAdapter { protected $context = 'Adsmanager'; protected $extension = 'com_adsmanager'; protected $layout = 'details'; protected $type_title = 'Ads'; protected $table = '#__adsmanager_ads'; protected $state_field = 'published'; protected function setup() { return true; } public function onFinderDelete($context, $table) { if ($context == 'com_adsmanager.ads') { $id = $table->id; } elseif ($context == 'com_finder.index') { $id = $table->link_id; } else { return true; } return $this->remove($id); } public function onFinderChangeState($context, $pks, $value) { if ($context == 'com_adsmanager.ads') { $this->itemStateChange($pks, $value); } if ($context == 'com_plugins.plugin' && $value === 0) { $this->pluginDisable($pks); } } protected function index(FinderIndexerResult $item, $format = 'html') { if (JComponentHelper::isEnabled($this->extension) == false) { return; } $item->summary = FinderIndexerHelper::prepareContent($item->summary, $item->params); $item->url = $this->getURL($item->id, $this->extension, $this->layout); $item->route = 'index.php?option=com_adsmanager&view=details&id='.$item->id; $item->addTaxonomy('Type', 'Ads'); $item->addTaxonomy('Language', $item->language); // Get content extras. FinderIndexerHelper::getContentExtras($item); // Index the item. FinderIndexer::index($item); } protected function getListQuery($sql = null) { $db = JFactory::getDbo(); $sql = $sql instanceof JDatabaseQuery ? $sql : $db->getQuery(true); $sql->select('a.id as id, a.ad_headline as title'); $sql->select('a.published as state, a.published as access'); $sql->select('a.ad_text as summary'); $sql->from('#__adsmanager_ads AS a'); return $sql; } protected function getStateQuery() { $sql = $this->db->getQuery(true); $sql->select($this->db->quoteName('a.id')); $sql->select($this->db->quoteName('a.ad_headline').' as title'); $sql->select($this->db->quoteName('a.published'). ' AS state'); $sql->select($this->db->quoteName('a.ad_state'). ' AS access'); $sql->select($this->db->quoteName('a.ad_text'). ' AS summary'); $sql->from($this->db->quoteName('#__adsmanager_ads'). ' AS a'); return $sql; } }
Ну поставил я плагин (Скачать готовый плагин Умный поиск для Adsmanager можно по ссылке внизу поста) сделал индексацию.
Поиск пашет подсказки выдает дебильные типа все как полагается, но лично меня Вывод результатов стандартного модуля Умного Поиска совсем не устроил... уж больно кривой-некрасивый он и как то ну совсем не вписывается в дизайн AdsManager
Почесал репу ну и думаю ... а фигли тут мудрить надо просто сделать пасер запросов из Модуля Умного поиска на стандартный поиск AdsManager и тогда и Умные подсказки будут и результаты поиска будут выводится в нормальном для Adsmanаger виде.
Сказано сделано. Тут же сварганил файлик search.php и кинул его в папку с плагином /plugins/finder/adsmanager/
Код search.php (помидоры приветствуются )
<?php $tsearch = $_REQUEST['q']; $url="/index.php?tsearch=".$tsearch."&option=com_adsmanager&view=list"; header('HTTP/1.1 200 OK'); header('Location: http://'.$_SERVER['HTTP_HOST'].$url); exit(); ?>
А в модуле Умного Поиска сделал маленький хак.
Файл /modules/mod_finder/tmpl/default.php
Строка 134. Поменял
<form id="mod-finder-searchform" action="<?php echo JRoute::_($route); ?>" method="get">
на
<form id="mod-finder-searchform" action="<?php echo JRoute::_('plugins/finder/adsmanager/search.php', false); ?>" method="get">
И заюзал Умный поиск с выводом данных в привычном формате AdsManager
Download Smart Search Plugin для AdsManager можно здесь
Сообщение отредактировал xstud: 20.07.2014, 14:55:58