BeforeIndex
Описание и параметры
функция-обработчик( array arFields );
Событие "BeforeIndex" вызывается перед индексацией элемента методом CSearch::Index.
Важно! Функция-обработчик не принимает параметр arFields по ссылке. Не верно: function BeforeIndexHandler(&$arFields). Верно: function BeforeIndexHandler($arFields).
Параметры
| Параметр | Описание |
|---|---|
| arFields | Массив следующего содержания:
|
Данный обработчик может модифицировать поля параметра arFields и должен вернуть его как результат своей работы.
Важные моменты
- Если в обработчике проводятся модификации поля SITE_ID, то надо помнить,что индексы в массиве должны быть с нуля и по порядку. Иначе массив будет воспринят как ассоциативный и элементы привяжутся к сайтам неверно (вместо SITE_ID окажутся числа и элементы пропадут из поиска).
- Чтобы не добавлять запись в индекс (например, если надо какой-то подраздел инфоблока не индексировать), необходимо в функции-обработчике выполнить:
unset($arFields["BODY"]); unset($arFields["TITLE"]);
- Если выполняются проверки типа:
$bTitle = array_key_exists("TITLE", $arFields); $bBody = array_key_exists("BODY", $arFields); if($bTitle && $bBody && strlen($arFields["BODY"])<=0 && strlen($arFields["TITLE"])<=0)то для исключения элемента из индекса как записи следует выполнять:
$arFields["BODY"]=''; $arFields["TITLE"]='';
Смотрите также
Примеры
Пример функции-обработчика:
<?
// файл /bitrix/php_interface/init.php
// регистрируем обработчик
AddEventHandler("search", "BeforeIndex", Array("MyClass", "BeforeIndexHandler"));
class MyClass { // создаем обработчик события "BeforeIndex" public static function BeforeIndexHandler($arFields) { if($arFields["MODULE_ID"] == "iblock" && $arFields["PARAM2"] == 33) { if(array_key_exists("BODY", $arFields)) { $arFields["BODY"] .= " самые свежие новости"; } } return $arFields; } } ?>
Пример использования функции-обработчика:
Пример использования функции-обработчика, чтобы компонент search.title проводил поиск не только по заголовкам, но и некоторому свойству:
// регистрируем обработчик
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
// создаем обработчик события "BeforeIndex"
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())
$arFields["TITLE"] .= " ".$ar_props["VALUE"]; // Добавим свойство в конец заголовка индексируемого элемента
}
return $arFields; // вернём изменения
}
© «Битрикс», 2001-2025, «1С-Битрикс», 2025