Меню

Как в Битрикс сделать поиск товаров по ID элемента

Такой параметр элемента инфоблока как его ID считается чисто системным, поэтому в поиске он никак не фигурирует. Штатными средствами включить его в поиск публичной части сайта невозможно. Возможен поиск через админку, но это не так удобно. Однако часто приходится искать товары именно по ID. Причины могут быть разные, например, стандартные xml выгрузки чаще всего выгружают товары по ID и для дальнейшей работы удобно иметь возможность быстрого его поиска на сайте.

Есть много вариантов как это сделать. Кривых и не очень. В сети множество постов по этому поводу. Многие делают это через события работы с элементами инфоблока, что на мой взгляд не лучшее решение, так как обновление или создание элемента само собой достаточно ресурсозатратное для системы дело и по каждому поводу навешивать туда все новые и новые обработчики не лучшая мысль.

Мы воспользуемся событием модуля search BeforeIndex.

В файл init.php (он может находиться в различных местах у разных сайтов: /bitrix/php_interface/init.php, /local/php_interface/init.php, /local/php_interface/s1/init.php и т.п.) вставляем код:

<?
AddEventHandler("search", "BeforeIndex", Array("SearchHandle", "BeforeIndexHandler"));

class SearchHandle
{
	function BeforeIndexHandler($arFields)
	{
		if($arFields["MODULE_ID"] == "iblock"/* && $arFields["PARAM1"] == "catalog"*/)
		{
			$arFields["BODY"] .= "\n".$arFields["ITEM_ID"];
		}
		return $arFields;
	}
}
?>

Тем самым мы к поисковому индексу добавляем строку содержащую ID элемета инфоблока. Если же мы хотим чтобы ID добавлялся к поиску исключительно товаров каталога, то раскомментируйте условие проверки параметра PARAM1.

После добавления кода необходимо переиндексировать поиск в административном разделе сайта.
02.09.2022

Возврат к списку

Оставаясь на этом сайте Вы соглашаетесь с использованием файлов cookie, а также принимаете все пользовательские соглашения данного сайта.