Пример обработчика, исключающего элемент инфоблока из поискового индекса по свойству для случая, когда инфоблок привязан к нескольким сайтам:
| Код |
|---|
AddEventHandler("search", "BeforeIndex", Array("SearchExclude", "BeforeIndexHandler"));
class SearchExclude
{
function BeforeIndexHandler($arFields)
{
if ($arFields["MODULE_ID"] == "iblock" && $arFields["PARAM2"] == 18)
{
$db_props = CIBlockElement::GetProperty( // Запросим свойства индексируемого элемента
$arFields["PARAM2"], // BLOCK_ID индексируемого свойства
$arFields["ITEM_ID"], // ID индексируемого свойства
array("sort" => "asc"), // Сортировка (можно упустить)
Array("CODE"=>"AKTIVNOST_KAMPFER")); // CODE свойства (в данном случае артикул)
if($ar_props = $db_props->Fetch()){
if($ar_props['VALUE_XML_ID']!=='true'){
$tmpAr = array();
foreach ($arFields['SITE_ID'] as $sIndex=>$SID)
{
if($SID!=='s2') $tmpAr[] = $SID;
}
$arFields['SITE_ID'] = $tmpAr;
}
}
//
}
return $arFields;
}
} |
Если элемент привязан к нескольким сайтам, то нужно убрать по условию ненужный идентификатор сайта