Поиск
Модуль выводит форму для поиска по сайту и результаты поиска.
Индексация
Административная часть модуля нужна для ручной работы с поисковым индексом. Здесь можно переиндексировать контент всех или отдельных модулей, а также удалить весь индекс или индекс отдельных модулей. Ручная работа с индексом необходима только в следующих случаях:
- конент поступил извне: из предыдущей версии, где не было индексируемого поиска (4.х версия), импортирован из CSV-файла, добавлен вручную в базу данных;
- модуль «Поиск» был установлен на работающий сайт;
- из-за сбоя контент остался неиндексированным;
необходимо, чтобы контент какого-либо модуля не участвовал в поисковой выдаче. В этом случае кроме удаления индекса для модуля надо еще изменить modules/модуль/модуль.search.php:
class Модуль_search_config
{
public $config = array();
}
При добавлении/редактировании контента из административной части контент будет переиндексироваться автоматически без ручного вмешательства. Необходимость индексировать контент конкретного модуля и настройки индексации описаны в файле modules/модуль/модуль.search.php. Формат файла:
Пример:
class Модуль_search_config
{
public $config = array(
'таблица' => array(
'fields' => array('название_поля_для_индекса', ...),
'rating' => рейтинг_модуля_в_поисковой_выдаче
),
'таблица_2' => array(
...
),
...
);
}
Можно задать поле "param", тогда будут проиндексированы все значения дополнительных характеристик для элементов модуля. Например, дополнительные характеристики товаров в магазине.
В поисковой выдаче на сайте результаты поиска оформляются так же, как в списке элементов этого модуля.
Для этого данные обрабатываются функцией elements()
из модели модуля modules/модуль/модуль.model.php и выводятся шаблоном modules/модуль/views/модуль.view.list.php.
Можно задать свою обработку данных для поиска. Для этого нужно определить функцию search()
в файле modules/модуль/модуль.model.php.
Пример:
Так обработка данных о найденных товарах идет через функцию search()
в файле modules/shop/shop.model.php.
А обработка данных о найденных новостях идет через функцию elements()
в файле modules/news/news.model.php, так как функцию search()
в этом файле не описана.
Шаблон также можно применить отличный от шаблона по умолчанию. Для этого достаточно создать файл modules/модуль/views/модуль.view.list_search.php.
Пример:
Найденные товары оформляются в результатах поиска шаблоном modules/shop/views/shop.view.list_search.php.
А найденные новости оформляются также, как в списке новостей шаблоном modules/news/views/news.view.list.php.
Описанные выше особенности относятся только к элементам модулей (новости, товары, статьи и пр.). Категории и производители в модуле, а также страницы сайта выводятся стандатным шаблоном modules/search/views/search.view.show.php.
Подключение
Подключаемая часть – файл modules/search/search.inc.php. В нем описан класс
Search_inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_search
. Экземпляр класса создается при первом вызове
переменной.
Методы
void index_all () – Индексирует весь сайт.
Пример:
// индексирует все страницы на сайте, которые определены для индексации в файле настроек
$this->diafan->_search->index_all();
void index_module (string $module_name) – Индексирует модуль.
- string $module_name: название модуля
Пример:
// индексирует модуль «Интернет магазин»
$this->diafan->_search->index_module('shop');
void index_site_module (array $site, [boolean $out = true], [integer $count_sites = 0]) – Индексирует страницы модуля, прикрепленного к странице сайта.
- array $site: данные о странице сайта
- boolean $out: функция используется как внешняя
- integer $count_sites: количество страниц, к которым прикреплен модуль
Пример:
$site = array(
"id" => 13,
"module_name" => "shop",
);
// индексирует страницу, с прикрепленным модулем
$this->diafan->_search->index_site_module($site);
void index_elements (array $rows, strign $table_name) – Индексирует группу элементов.
- array $rows: массив данных об индексируемых элементах
- strign $table_name: таблица элементов
Пример:
$rows = array(
array(
"id" => 1,
"search_no_show" => 0,
"act1" = 1,
"act2" => 0,
"access" => 0,
"name" => "Газонокосилка электрическая",
"anons" => "Хорошая газонокосилка по приемлемой цене.",
"text" => "Срок службы обычно 3-4 года, регулируемая высота покоса, длинный шнур.",
"article" => "K1200"
),
array(
"id" => 2,
"search_no_show" => 0,
"act1" = 1,
"act2" => 1,
"access" => 0,
"name" => "Газонокосилка бензиновая",
"name2" => "Lawn mowers",
"anons" => "Лучшая газонокосилка, но дороже.",
"anons2" => "Best lawn mower, but more expensive.",
"text" => "Срок службы обычно 5-6 лет, нужно заправлять бензином, регулируемая высота покоса, длинный шнур.",
"text2" => "Life is normally 5-6 years, you need to fill petrol, height adjustable mowing, long cord.",
"article" => "K1200"
),
);
// индексирует несколько товаров
$this->diafan->_search->index_elements($rows, "shop");
void index_element (array $row, strign $table_name) – Индексирует один элемент.
- array $row: данные об индексируемом элементе
- strign $table_name: таблица элемента
Пример:
$row = array(
"id" => 1,
"search_no_show" => 0,
"act1" = 1,
"act2" => 0,
"access" => 0,
"name" => "Газонокосилка электрическая",
"anons" => "Хорошая газонокосилка по приемлемой цене.",
"text" => "Срок службы обычно 3-4 года, регулируемая высота покоса, длинный шнур.",
"article" => "K1200"
);
// индексирует товар
$this->diafan->_search->index_element($row, "shop");
void delete (integer|array $element_ids, string $table_name) – Удаляет один или несколько элементов.
- integer|array $element_ids: номер одного или нескольких элементов
- string $table_name: таблица элемента
Пример:
// удаляет производителя товаров из индекса
$this->diafan->_search->delete(2, "shop", "brand");
void delete_module (string $module_name) – Удаляет весь индекс модуля.
- string $module_name: название модуля
Пример:
// удаляет из поискового индекса новости и категории новостей
$this->diafan->_search->delete_module("news");
void delete_sites (array $site_ids) – Удаляет индекс модулей, прикрепленных к страницам сайта.
- array $site_ids: идентификаторы страниц сайта
Пример:
// удаляет индекс модулей, прикрепленных к старницам сайта ID 3, 4, 6
$this->diafan->_search->delete_sites(array(3, 4, 6));
array|boolean false check_module_config (string $module_name, [string $table_name = '']) – Проверяет есть ли настройки поиска для модуля и таблицы модуля.
- string $module_name: модуль
- string $table_name: таблица
Пример:
$config = $this->diafan->_search->check_module_config("shop", "shop_brand");
if($config)
{
// индексируем производителей в магазине
}
История поиска
Поисковые запросы имеют следующие характеристики:
Основные:
Список последних поисковых запросов. Количество запросов в истории поиска определяется в настройках модуля.
Настройки
- Индексировать автоматически – Если не отмечено, индексация просиходит только в административном интерфейсе «Поиск по сайту».
- Количество результатов на странице – Количество одновременно выводимых результатов поиска в списке.
- Включить «Показать ещё» – На странице результатов появится кнопка «Показать ещё». Увеличивает количество одновременно выводимых результатов в списке.
- Количество последних запросов в истории поиска.
- Искать все слова сразу – Если не отмечено, ищет хотя бы одно слово.
- Искать часть слова – Если не отмечено, ищет слово и словоформы целиком. Если отмечено, то может найти длинное слово уже по первым трем-четырем символам. Если отмечено, то настройка «Искать все слова сразу» не работает.
- Минимальная длина слова – При изменении параметра необходимо переиндексировать весь сайт. Чем меньше этот параметр, тем больше места занимает поисковый индекс. Значение по умолчанию: 3.
Шаблонные теги
Для работы с модулем «Поиск по сайту» служат следующие шаблонные теги:
show_search – выводит форму поиска по сайту.
Атрибуты:
— button – значение кнопки «Найти». Для неосновной языковой версии значение можно перевести в административной части в меню «Языки сайта» – «Перевод интерфейса»;
— ajax – подгружать результаты поиска без перезагрузки страницы.: true – результаты поиска подгружаются, по умолчанию будет перезагружена вся страница.;
— defer – маркер отложенной загрузки шаблонного тега: event – загрузка контента только по желанию пользователя при нажатии кнопки "Загрузить", emergence – загрузка контента только при появлении в окне браузера клиента, async – асинхронная (одновременная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, sync – синхронная (последовательная) загрузка контента совместно с контентом шаблонных тегов с тем же маркером, по умолчанию отложенная загрузка не используется, обычный вывод шаблонных тегов в коде страницы;
— defer_title – текстовая строка, выводимая на месте появления загружаемого контента с помощью отложенной загрузки шаблонного тега;
— template – шаблон тега (файл modules/search/views/search.view.show_search_template.php; по умолчанию шаблон modules/search/views/search.view.show_search.php).
Пример:
<insert name="show_search" module="search" button="найти">
выведет форму поиска по сайту. "button" - необязательный атрибут названия кнопки поиска
В шаблоне тега можно получить значение любого атрибута через переменную $result["attributes"]["название атрибута"]
.
База данных
{search_history} – История поисковых запросов
{search_index} – Связи слов и проиндексированных для поиска элементов
{search_keywords} – Индексированные для поиска слова
{search_results} – Индексированные для поиска элементы
Файлы
modules/search/admin/search.admin.php – работа с поисковым индексом;
modules/search/admin/search.admin.config.php – настройки модуля;
modules/search/admin/search.admin.history.php – история поиска;
modules/search/admin/search.admin.inc.php – подключение модуля к административной части других модулей;
modules/search/js/search.show_search_top.js – JS-сценарий формы поиска;
modules/search/search.php – контроллер;
modules/search/search.action.php – обрабатывает полученные данные из формы;
modules/search/search.history.php – экспорт истории поиска;
modules/search/search.inc.php – подключение модуля;
modules/search/search.install.php – установка модуля;
modules/search/search.model.php – модель;
modules/search/views/search.view.rows.php – шаблон результатов поиска по сайту;
modules/search/views/search.view.show.php – шаблон результатов поиска по сайту;
modules/search/views/search.view.show_search.php – шаблон формы поиска по сайту;
modules/search/views/search.view.show_search_404.php – шаблон формы поиска по сайту, template=404;
modules/search/views/search.view.show_search_top.php – шаблон формы поиска по сайту, template=top.
База знаний
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.