Bitrix поиск по заголовкам из произвольных таблиц Leave a comment

У CMS Bitrix есть замечательный компонент поиска (в том числе ajax поиск) — «bitrix:search.title», который может в строке поиска отдавать пользователю результат предварительных данных. По умолчанию в админке для переиндексации(создания индекса) поиска есть небольшой набор модулей — Блоги, Форумы, Инфоблоки, Статическийе Файлы.Список модулей доступных для переиндексации можно расширить своим модулем, в котором можно организовать произвольную таблицу с данными и при этом данные из которой должны участвовать в общем поиске.

Вот простая строка которая «припишет» ваш модуль в список доступных для индексации:

coderun.framework — название вашего модуля, реально существующего в системе Bitrix

\Coderun\Framework\SearcheProductXMLID — Полный путь до вызываемого класса модуля с namespace в нашем случае

OnSearchReindex — Имя метода с всей логикой из класса SearcheProductXMLID

Сам же метод RegisterModuleDependences нужно вызывать один раз, либо при установке модуля, либо просто один раз где нибудь. При вызове этого метода в таблицу b_module_to_module попадает соответствующая запись.

Если вам не нужно данное событие, то вызовите обратный метод UnRegisterModuleDependences с тем же набором параметров что и RegisterModuleDependences

Далее вам нужно описать действия в методе OnSearchReindex вашего класса SearcheProductXMLID:

В примере делается запрос к инфоблоку товаров и вытаскивается некоторое свойство товара, которое затем помещается и TITLE индекса, по которому и будет происходить быстрый поиск в компоненте bitrix:search.title.

В качестве данных можно взять любые данные из ваших таблиц, значения из которых должны попасть в поиск и работать при запросах через стандартный компонент Bitrix.

Суть метода такова что пока возвращается не FALSE  — будет происходить следующий шаг индексации.

Параметр $NS передаётся по ссылке и возможно вам из него пригодятся некоторые ключи.

Во время переиндексации Bitrix работает с таблицами:

b_module_to_module — сюда собственно и попадает переданный массив данных для \CSearch::Index

b_search_content_title — поставщик данных для быстрого поиска, она же связанна с таблицей выше через SEARCH_CONTENT_ID

Так же, в компоненте bitrix:search.title есть особенность, что для поиска он берёт данные только от модуля iblock, если в вашей версии компонента нет «адекватных» способов изменить эту логику — тогда кастомизируйте компонент и добавляйте в условие функции $obTitle->Search следующий код:

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *