Итак, добрались наконец у меня руки до поиска по сайту.
Представляю вашему вниманию полностью переделанный компонент "Поиск".
— поиск выполняется только один раз при первом запросе(изменении запроса), при пагинации результаты берутся из кеша;
— общее снижение нагрузки на БД при поиске;
— заложена возможность использовать своего провайдера для поиска;
— при поиске заложена возможность выбора(чекбоксы) где искать;
— весь html вынесен в шаблоны;
— при поиске по тегу заложена возможность ручного ввода тега с автодополнением;
— добавлена задача cron на очищение таблицы cms_search раз в сутки;
— в результатах поиска теперь помимо заголовка, показывается описание;
— опции расширенного поиска;
— подсветка поисковых слов в выдаче;
— закрыта небольшая уязвимость.
Сразу хочу отметить, что глобально в алгоритме поиска ничего не менялось, было "выжато" максимум из полнотекстового поиска mysql.
Скачать можно отсюда, конкретные изменения можно посмотреть как обычно в траке.
Демо можно посмотреть этом сайте.
Пример:
Создаем файл yandex.php, в нем пишем
Все эти три метода обязательны для этого класса.
— метод __construct — конструктор класса, запускающий конструктор родителя;
— метод getProviderConfig — должен возвращать настройки провайдера, если таковые имеются. Формат массива настроек должен быть: ключ массива->название опции, значение->имя переменной. Если настроек нет, метод должен возвращать false. Настройки провайдера будут доступны внутри класса через $this->config['ИМЯ_ПРОВАЙДЕРА']['имя_переменной'], т.е. глядя на пример это будет $this->config['yandex']['api_url'].
— метод prepareSearch — должен выполнять непосредственно сам поиск и заносить все результаты поиска по данному запросу в таблицу cms_search. Заносить результаты поиска необходимо при помощи метода модели addResult($result_array). В массиве $result_array должны быть значения
Разумеется вы можете в классе провайдера переопределить все методы модели компонента search. После написания класса, другого провайдера можно будет переключить в админке, там же появятся его настройки.
Представляю вашему вниманию полностью переделанный компонент "Поиск".
Что сделано:
— полностью переписан код компонента, доработан алгоритм поиска;— поиск выполняется только один раз при первом запросе(изменении запроса), при пагинации результаты берутся из кеша;
— общее снижение нагрузки на БД при поиске;
— заложена возможность использовать своего провайдера для поиска;
— при поиске заложена возможность выбора(чекбоксы) где искать;
— весь html вынесен в шаблоны;
— при поиске по тегу заложена возможность ручного ввода тега с автодополнением;
— добавлена задача cron на очищение таблицы cms_search раз в сутки;
— в результатах поиска теперь помимо заголовка, показывается описание;
— опции расширенного поиска;
— подсветка поисковых слов в выдаче;
— закрыта небольшая уязвимость.
Сразу хочу отметить, что глобально в алгоритме поиска ничего не менялось, было "выжато" максимум из полнотекстового поиска mysql.
Скачать можно отсюда, конкретные изменения можно посмотреть как обычно в траке.
Как установить:
Архив распаковать с заменой на сервере, зайти в админку, в установку дополнений (/admin/index.php?view=install&do=component), нажать обновить компонент Поиск.Демо можно посмотреть этом сайте.
Как сделать своего провайдера поиска:
Для начала нужно создать в директории /components/search/providers файл с названием ИМЯ_ПРОВАЙДЕРА.php. В этом файле нужно написать одноименный класс — ИМЯ_ПРОВАЙДЕРА.Пример:
Создаем файл yandex.php, в нем пишем
<?php class yandex extends cms_model_search{ public function __construct() { parent::__construct(); } public static function getProviderConfig() { 'Адрес для совершения запроса'=>'api_url' ); return $config; } public function prepareSearch() { return true; } } ?>
— метод __construct — конструктор класса, запускающий конструктор родителя;
— метод getProviderConfig — должен возвращать настройки провайдера, если таковые имеются. Формат массива настроек должен быть: ключ массива->название опции, значение->имя переменной. Если настроек нет, метод должен возвращать false. Настройки провайдера будут доступны внутри класса через $this->config['ИМЯ_ПРОВАЙДЕРА']['имя_переменной'], т.е. глядя на пример это будет $this->config['yandex']['api_url'].
— метод prepareSearch — должен выполнять непосредственно сам поиск и заносить все результаты поиска по данному запросу в таблицу cms_search. Заносить результаты поиска необходимо при помощи метода модели addResult($result_array). В массиве $result_array должны быть значения
$result_array['link'] = ''; // основная ссылка на результат $result_array['title'] = ''; // заголовок результата $result_array['place'] = ''; // заголовок места назначения $result_array['placelink'] = ''; // ссылка на место назначения $result_array['description'] = $searchModel->getProposalWithSearchWord($description); // описание результата, прошедшее через метод, который ищет искомые слова в описании $result_array['pubdate'] = $item['pubdate']; // дата публикации найденного материала
Реклама #
Keep 13 лет назад #
Malanas 13 лет назад #
s21 13 лет назад #
ссылки не работают
Fuze 13 лет назад #
s21 13 лет назад #
имеется ввиду на сайте инстантцмс.ру?
Fuze 13 лет назад #
nikitka 13 лет назад #
picaboo 13 лет назад #
ищу "удалить" а подсвечивает "удал" и ищет по корню.
Fuze 13 лет назад #
picaboo 13 лет назад #
Fuze 13 лет назад #
picaboo 13 лет назад #
Fuze 13 лет назад #
Zau4man 13 лет назад #
Я залил http://trac.instantcms.ru/changeset/821 поверх уже установленного, поиск теперь ничего не может найти...
Fuze 13 лет назад #
вам нужно создать поле pubdate - datatime в таблице cms_search
picaboo 13 лет назад #
параметр
и закрыть это
тогда будет искать не по всему рунету, а конкретно по оффсайту
picaboo 13 лет назад #
вот так
Владимир 13 лет назад #
Fuze 13 лет назад #
s21 13 лет назад #
спасибо...
Fuze 13 лет назад #
s21 13 лет назад #
pasplus 13 лет назад #
Zau4man 13 лет назад #
Thanatognozija 13 лет назад #
Cleverking 13 лет назад #
Fuze 13 лет назад #
Удостовериться в этом можно тут.
Нужно только в свой файл стилей внести изменения.
Александр 13 лет назад #
1. Скачиваем архив
2. Удаляем фаил из архива / com_search_up / templates / _default_ / css / style.css
3. Все теперь заливаем весь архив поверх
4. Далее добавим стили в свой style.css
Protomoto 13 лет назад #
Fuze 13 лет назад #
Архив обновлен.
- решена проблема с поиском на кириллице на некоторых хостингах;- добавлен вывод даты публикации материала;
- добавлены параметры поиска.
Для тех, кто уже поставил, необходимо выполнить запрос в phpmyadmin
На instantcms.ru все так же обновлено.
reload 13 лет назад #
работает как родной) спасибо!
Patriot 13 лет назад #
Спасибо Fuze! На 1.8 полет нормальный!
Олег Васильевич я 13 лет назад #
Олег Васильевич я 13 лет назад #
Patriot 13 лет назад #
Алфей 13 лет назад #
Олег Васильевич я 13 лет назад #
Keep 13 лет назад #
Fuze 13 лет назад #
p.s. на вопросы "КОГДА 1.8.1?" ответа не ждите. скоро.
Олег Васильевич я 13 лет назад #
Fuze 13 лет назад #
Олег Васильевич я 13 лет назад #
Олег Васильевич я 13 лет назад #
Олег Васильевич я 13 лет назад #
Олег Васильевич я 13 лет назад #
Fuze 13 лет назад #
Олег Васильевич я 13 лет назад #
Олег Васильевич я 13 лет назад #
Михаил 13 лет назад #
Fatal error: Cannot redeclare search_catalog() (previously declared in /components/catalog/psearch.php:16) in components/video/psearch.php on line 46
Подскажите в чем может быть проблема
Fuze 13 лет назад #
livecom 13 лет назад #
Эх, если бы еще шаблон модуля поиска переделать по аналогии с формой компонента, то была бы вообще песня )
Fuze 13 лет назад #
livecom 13 лет назад #
artlab 13 лет назад #
livecom 13 лет назад #
Я о другом говорил. Сам шаблон модуля поиска в файле /modules/mod_search/module.php
Остается либо достаточно немало править, либо писать модуль с нуля и назвать mod_search.tpl
livecom 13 лет назад #
artlab 13 лет назад #
livecom 13 лет назад #
Александр 13 лет назад #
livecom 13 лет назад #
Вот этот отрезок кода из шаблона компонента, как лучше всего интегрировать в модуль?
livecom 13 лет назад #
Fuze 13 лет назад #
livecom 13 лет назад #
Fuze 13 лет назад #
artlab 13 лет назад #
AlekS 13 лет назад #
Fuze 13 лет назад #
AlekS 13 лет назад #
lezginka.ru 13 лет назад #
почему вам нужен родной поиск, яндекс куда релевантней ищет ?
(мне родной поиск нужен, т.к. яща не все индексирует)
Олег Васильевич я 13 лет назад #
googlebot 13 лет назад #
Небольшой косячок при выводе найденных объектов на карте InstantMaps: дату пишет для всех одинаковую "11 00января", связано наверное с тем, что в таблице cms_map_items тип данных date, а не datetime как везде, как поправить пока не сообразил...
Олег Васильевич я 13 лет назад #
Fuze 13 лет назад #
googlebot 13 лет назад #
Обновленный psearch.php для компонента карт.
Олег Васильевич я 13 лет назад #
Крот 13 лет назад #
"немного" изменил модуль поиска на сайте (взял несколько последних и слил в один)
вот картинка
ОПИСАНИЕ: поиск как в Яндексе на главной - при "тыке" на ссылку сверху происходит поиск по выбранному компоненту, плюс
пример поиска. При нажатии на ссылку настройка поиска - появляется компонент поиска с открытым окном настроек.
если кого-то заинтересует - могу написать пост.
Fuze 13 лет назад #
Олег Васильевич я 13 лет назад #
Олег Васильевич я 13 лет назад #
artlab 13 лет назад #
Олег Васильевич я 13 лет назад #
Олег Васильевич я 13 лет назад #
Katerina 13 лет назад #
lezginka.ru 13 лет назад #
Олег Васильевич я 13 лет назад #
lezginka.ru 13 лет назад #
Олег Васильевич я 13 лет назад #
Олег Васильевич я 12 лет назад #
elv 5 лет назад #
Loadырь 5 лет назад #
elv 5 лет назад #
elv 5 лет назад #
Loadырь 5 лет назад #
elv 5 лет назад #
elv 5 лет назад #
elv 5 лет назад #