$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible('search', 'BeforeIndex', ['\\CatalogProductIndexer','handleBeforeIndex']);
class CatalogProductIndexer
{
/**
* @var int Идентификатор инфоблока каталога
*/
const IBLOCK_ID = '30';
/**
* Дополняет индексируемый массив нужными значениями
* подписан на событие BeforeIndex модуля search
* @param array $arFields
* @return array
*/
public static function handleBeforeIndex( $arFields = [] )
{
if ( !static::isInetesting( $arFields ) )
{
return $arFields;
}
/**
* @var array Массив полей элемента, которые нас интересуют
*/
$arSelect = [
'ID',
'IBLOCK_ID',
'PROPERTY_TEST1',
'PROPERTY_TEST2'
];
/**
* @var CIblockResult Массив описывающий индексируемый элемент
*/
$resElements = \CIBlockElement::getList(
[],
[
'IBLOCK_ID' => $arFields['PARAM2'],
'ID' => $arFields['ITEM_ID']
],
false,
[
'nTopCount'=>1
],
$arSelect
);
/**
* В случае, если элемент найден мы добавляем нужные поля
* в соответсвующие столбцы поиска
*/
if ( $arElement = $resElements->fetch() )
{
$arFields['TITLE'] .= ' '.$arElement['PROPERTY_TEST1_VALUE'];
$arFields['BODY'] .= ' '.$arElement['PROPERTY_TEST2_VALUE'];
}
return $arFields;
}
/**
* Возвращает true, если это интересующий нас элемент
* @param array $fields
* @return boolean
*/
public static function isInetesting( $fields = [] )
{
return ( $fields["MODULE_ID"] == "iblock" && $fields['PARAM2'] == static::IBLOCK_ID );
}
}