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