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-2024, «1С-Битрикс», 2024