~1 минуту, Опубликовано 05.10.2023

Как добавить поиск по свойствам в bitrix:catalog.search

Как добавить поиск по свойствам в bitrix:catalog.search

Задача была настроить поиск по свойству типа “Строка”, но через настройки свойства в инфоблоке, а именно чекбокса “” не удалось запустить поиск по Артикулу. Решить эту проблему можно очень просто, используя следующий код:
В вашей файле /local/php_interface/init.php необходимо добавить обработчик для события "BeforeIndex", который будет отрабатывать перед индексаций каждого элемента инфоблока. Делаем это с помощью следующего кода:

use \Bitrix\Main\EventManager;

$eventManagerInstance = EventManager::getInstance();
$eventManagerInstance->addEventHandler(
    "search",
    "BeforeIndex",
    [
        "Handlers", // Название класса
        "beforeIndex" // Название статичного метода
    ]
);

class Handlers
{
 public static function beforeIndex($arFields)
    {

        if (!$arFields["MODULE_ID"] == "iblock" && $arFields['PARAM2'] == CATALOG_IBLOCK_ID) {
            return $arFields;
        }
        
        \Bitrix\Main\Loader::includeModule('iblock');
        $product = \Bitrix\Iblock\Elements\ElementCatalogTable::getByPrimary($arFields['ITEM_ID'], [
            'select' => ['ID', 'SKU' => 'VENDOR_CODE.VALUE'],
        ])->fetch();

        $arFields['TITLE'] .= ' ['.$product['SKU'].']';

        return $arFields;
    }
}

В этом коде на каждом товаре, который сейчас будет индексироваться, получаем его с помощью getList и записывает в $arFields['TITLE'] наш Артикул или другое значение, по которому вы хотите, чтобы работал поиск. Большой текст можно записать в начало или конец $arFields['BODY']

Читайте также  Создание выгрузки Битрикс XML через XmlWriter

Категории: Bitrix Bitrix D7