Решение "Умный поиск" поддерживает дополнительные фильтры для компонентов search.page и search.title. Т.к. решение расширяет стандартный модуль поиска - работа и структура фильтров идентична стандартным фильтрам модуля Поиск.
При создании фильтра особое внимание обратите формату - у поиска другой формат фильтра, отличающийся от фильтров для инфоблоков! Для фильтрации по параметру его нужно предварительно заиндексировать.
Подробная инструкция по настройке и разбор технологии фильтров поиска есть в документации битрикса -
читать в первоисточнике
Фильтры заложенные "из коробки":
1. Фильтр по доступности товара (На основе стандартного поля CATALOG_AVAILABLE)
Позволяет убрать из поиска недоступные товары
global $arTitleSearchFilter;
$arTitleSearchFilter = array("PARAMS" => array("catalog_available"=>'Y'));
Пример создания фильтра по свойству инфоблока:
В примере ниже индексация свойства инфоблока и последующая фильтрация по значению свойства. Это типовой пример - при использовании обязательно проверяйте и адаптируйте под свой проект.
1. Добавляем событие индексации (в примере индексируется свойство с кодом MATERIAL)
AddEventHandler("search", "BeforeIndex", "addElementPropertyToSearchindex");
function addElementPropertyToSearchindex($arFields)
{
if($arFields["MODULE_ID"] == 'iblock' && substr($arFields["ITEM_ID"], 0, 1) != "S"){
if(CModule::IncludeModule("iblock"))
{
$indexProp = 'MATERIAL';
$arFields["PARAMS"]["filter_prop"] = [];
$lstSelect = [
'IBLOCK_ID',
'ID',
'NAME',
'PROPERTY_'.$indexProp
];
$dctFilter = [
'IBLOCK_ID'=> $arFields['PARAM2'],
'ID' => $arFields['ITEM_ID'],
];
$rdb = \CIBlockElement::GetList([], $dctFilter, false, false, $lstSelect);
while($dctElement = $rdb->fetch()) {
$arFields["PARAMS"]["filter_prop"][] = $dctElement['PROPERTY_'.$indexProp.'_VALUE'];
}
}
}
return $arFields;
}
После добавления и отладки кода индексации свойства делаем полную переиндексацию поиска.
2. Устанавливаем фильтр для компонентов поиска
Перед компонентами задаём переменную с фильтром:
global $arSearchFilter;
$arSearchFilter = array("PARAMS" => array("filter_prop"=>'Тест'));
В параметре компонента FILTER_NAME указываем название переменной с фильтром:
"FILTER_NAME" => "arSearchFilter",
Эта информация оказалась полезной?
Да
Нет