Задача была настроить поиск по свойству типа “Строка”, но через настройки свойства в инфоблоке, а именно чекбокса “” не удалось запустить поиск по Артикулу. Решить эту проблему можно очень просто, используя следующий код:
В вашей файле /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']