Задача, сделать поиск по артикулу, для компонента поиска по заголовкам bitrix:search.title" но не по полному совпадению а по подстроке.
Например артикул H370899 и нужно что бы искал по запросу 370 или 089 или 899 ...
Стандартный поиск по заголовкам с добавлением обработчика который добавляет полный текст артикула в название элемента поискового индекса,
не дает такой возможности (потому что поиск идет с начала подстроки, т.е так найдет "H370", а так "370" уже нет)
Добавляем в init.php обработчик
Для того что бы остальные компоненты поиска также искали по артикулу, следует отключить полнотекстовый поиск и выбрать "Bitrix" (настройки модуля поиск, вкладка "Морфология")
Выполняем переиндексацию инфоблоков каталога (со снятой галочкой "Переиндексировать только измененные").
Например артикул H370899 и нужно что бы искал по запросу 370 или 089 или 899 ...
Стандартный поиск по заголовкам с добавлением обработчика который добавляет полный текст артикула в название элемента поискового индекса,
не дает такой возможности (потому что поиск идет с начала подстроки, т.е так найдет "H370", а так "370" уже нет)
Добавляем в init.php обработчик
//Search buy ARTICLE AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler"); function BeforeIndexHandler($arFields) { if(!CModule::IncludeModule("iblock")) return $arFields; if($arFields["MODULE_ID"] == "iblock") { $db_props = CIBlockElement::GetProperty( $arFields["PARAM2"], //BLOCK_ID индексируемого свойства $arFields["ITEM_ID"], //ID индексируемого свойства array("sort" => "asc"), // Сортировка (можно пропустить) Array("CODE"=>"CML2_ARTICLE") //CODE свойства (в данном случае артикул) ); if($ar_props = $db_props->Fetch()) { //Добавим все части артикула начиная с первого символа и заказнчивая длиной не менее 3 символов $sku = $ar_props["VALUE"]; $arr_sku = array(); for($i=0;$i<strlen($sku);$i++){ $new_str = substr($sku, $i); if(strlen($new_str)>2) { $arr_sku[] = substr($sku, $i); } } $arFields["TITLE"] .= " ".implode(' ', $arr_sku).""; unset($sku); unset($arr_sku); } } return $arFields; } |
Выполняем переиндексацию инфоблоков каталога (со снятой галочкой "Переиндексировать только измененные").