Часто возникают вопросы: "Как исключить из поиска товары определенной группы?" или "Как исключить из поиска товары не в наличии?"
Данное событие позволяет максимально гибко настроить отключение из поиска элементов по любым признакам - по доступному количеству, по определенному свойству, по разделу и его полю и т.п.
Пример обработчика, который можно доработать под свою задачу:
<?
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler", 10);
function BeforeIndexHandler($arFields)
{
$clearIndex = 0;
if($arFields["MODULE_ID"] == 'iblock' && $arFields["TITLE"] != '' && IntVal($arFields["ITEM_ID"]))
{
if(CModule::IncludeModule("iblock")){
$res = CIBlockElement::GetList(Array(), array("ID"=>$arFields["ITEM_ID"]), false, Array("nPageSize"=>1), array("ID", "NAME", "IBLOCK_SECTION_ID"));
while($fields = $res->Fetch())
{
if($fields["IBLOCK_SECTION_ID"]){
$nav = CIBlockSection::GetNavChain(false, $fields["IBLOCK_SECTION_ID"], array("ID", "NAME", "ACTIVE"));
while($flds = $nav->Fetch()){
if($flds["ACTIVE"] == 'N'){
$clearIndex = 1;
}
}
}
}
}
}
if($clearIndex)
{
$arFields["TITLE"] = '';
$arFields["BODY"] = '';
$arFields["TAGS"] = '';
}
return $arFields;
}
?>
* Обработчик из примера проверяет поле активности у разделов, в которые вложен товар, и исключает его из поиска, если один из разделов неактивен.
Эта информация оказалась полезной?
Да
Нет