Поиск

Модуль выводит форму для поиска по сайту и результаты поиска.

Индексация

Индексация

Административная часть модуля нужна для ручной работы с поисковым индексом. Здесь можно переиндексировать контент всех или отдельных модулей, а также удалить весь индекс или индекс отдельных модулей. Ручная работа с индексом необходима только в следующих случаях:

  • конент поступил извне: из предыдущей версии, где не было индексируемого поиска (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} – Индексированные для поиска элементы

Файлы

  1. modules/search/admin/search.admin.php – работа с поисковым индексом;

  2. modules/search/admin/search.admin.config.php – настройки модуля;

  3. modules/search/admin/search.admin.history.php – история поиска;

  4. modules/search/admin/search.admin.inc.php – подключение модуля к административной части других модулей;

  5. modules/search/js/search.show_search_top.js – JS-сценарий формы поиска;

  6. modules/search/search.php – контроллер;

  7. modules/search/search.action.php – обрабатывает полученные данные из формы;

  8. modules/search/search.history.php – экспорт истории поиска;

  9. modules/search/search.inc.php – подключение модуля;

  10. modules/search/search.install.php – установка модуля;

  11. modules/search/search.model.php – модель;

  12. modules/search/views/search.view.rows.php – шаблон результатов поиска по сайту;

  13. modules/search/views/search.view.show.php – шаблон результатов поиска по сайту;

  14. modules/search/views/search.view.show_search.php – шаблон формы поиска по сайту;

  15. modules/search/views/search.view.show_search_404.php – шаблон формы поиска по сайту, template=404;

  16. modules/search/views/search.view.show_search_top.php – шаблон формы поиска по сайту, template=top.

База знаний

Ваши комментарии и дополнения
27 июля 2018 г.
Здравствуйте.
Подскажите, пожалуйста, как вывести цену товара в его карточке в результатах поиска по сайту?
30 июля 2018 г.
Благодарю за ответ.
В указанном вами файле добавил строку, чтобы цена отображалась после названия (как я понял "search_name" - это вывод названия товара).

Код

<div class="search_name"><a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a></div>
<div class="search_price">'.$row['price'].'</div>
<div class="search_text">'.$row["snippet"].'</div>';


Однако цена не отображается. Я что-то делаю неправильно?

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.