1C-Битрикс: Управление сайтом

BeforeIndex

функция-обработчик(
	array arFields
);

Событие "BeforeIndex" вызывается перед индексацией элемента функцией CSearch::Index.

Параметры

Параметр Описание
arFields Массив следующего содержания:
  • MODULE_ID - идентификатор модуля (не изменится);
  • ITEM_ID - идентификатор элемента (не изменится);
  • PARAM1 - первый параметр элемента;
  • PARAM2 - второй параметр элемента;
  • DATE_FROM - дата начала активности элемента;
  • DATE_TO - дата окончания активности элемента;
  • TITLE - заголовок;
  • BODY - содержание;
  • TAGS - теги элемента;
  • SITE_ID - массив сайтов;
  • PERMISSIONS - массив идентификаторов групп пользователей которым разрешено чтение;
  • URL - адрес относительно корня сайта, по которому доступен данный элемент;

Данный обработчик может модифицировать поля параметра arFields и должен вернуть его как результат своей работы.

См. также

Пример функции-обработчика:

<?
// файл /bitrix/php_interface/init.php
// регистрируем обработчик
AddEventHandler("search", "BeforeIndex", Array("MyClass", "BeforeIndexHandler"));
class MyClass { // создаем обработчик события "BeforeIndex" function BeforeIndexHandler($arFields) { if($arFields["MODULE_ID"] == "iblock" && $arFields["PARAM2"] == 33) { if(array_key_exists("BODY", $arFields)) { $arFields["BODY"] .= " самые свежие новости"; } } return $arFields; } } ?>

Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
0
Юрий Гавриш
Если в обработчике проводятся модификации поля SITE_ID,
то надо помнить,что индексы в массиве должны быть с нуля и по порядку. Иначе битрикс воспримет массив как ассоциативный и элементы привяжутся к сайтам неверно (вместо SITE_ID окажутся числа и элементы "пропадут" из поиска).
Проверено на битриксе 8.5.1 и 8.5.6.
0
BrizzZ
Еще важный момент - чтобы не добавлять данную запись в индекс, необходимо в функции обработичке выполнить:
Код
unset($arFields["BODY"]);
unset($arFields["TITLE"]);

Например если надо какой-то подраздел инфоблока не индексировать.
1
Артём Дурнев
Для того, чтобы модуль 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; // вернём измененения
}
0
Денис Шмаков
В БУС 8.6.1. (точно, возможно и ранее) и более поздних из-за проверок типа
Код
$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"]='';
0
Игорь Барковский
Очень важная фича появилась с версии 10.0: ограничение поиска по произвольным параметрам.
Подробнее в блоге разработчика Максима Смирнова.
http://dev.1c-bitrix.ru/community/blogs/oracle/2687.php
© «Битрикс», 2001-2012, «1C-Битрикс», 2012