Если вы не читали статью Как сделать поиск по ID, советую для ознакомления. А сегодня продолжаем разбираться как решить данную задачу.
Поиск товаров по ID в битриксе
Шаг 1. Битрикс по умолчанию не умеет искать по ID, поэтому нам надо создать в инфоблоке каталога пользовательское свойство, в котором мы будем хранить ID товара. Назовем, например, SEARCH_ID. В настройках поля отмечаем, что оно участвует в поиске и сохраняем изменения.
Автоматом поле не попадет куда нам надо, поэтому надо заполнить поле для поиска по ID у уже созданных товаров, и автоматизировать его заполнение у новых.
Шаг 2. Пишем код и запускаем:
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); CModule::IncludeModule("iblock"); // Введите ID вашего инфоблока каталога $IBLOCK_ID = 5; // Символьный код вашего поля для поиска по ID $SEARCH_FIELD_NAME = 'SEARCH_ID'; $els = CIBlockElement::GetList( array("SORT"=>"ASC"), array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"), false, false, array('ID','IBLOCK_ID') ); $cnt=0; while ($s = $els->Fetch()) { $ok = CIBlockElement::SetPropertyValuesEx( $s["ID"], $s['IBLOCK_ID'], array('SEARCH_ID' => $s["ID"]) ); if ($ok) { echo $cnt.' - добавлен'."<br>"; } } require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Можно убрать подключение header и footer и просто вначале добавить:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
Шаг 3. Обновляем файл /bitrix/php_interface/init.php:
// добавляем в поисковый индекс ID нового товара AddEventHandler("iblock", "OnAfterIBlockElementAdd", "searchid"); function searchid(&$arFields){ if($arFields["ID"] > 0){ $upd = CIBlockEl<( $arFields["ID"], $arFields['IBLOCK_ID'], array('SEARCH_ID' => $arFields["ID"]) ); } }
Не забывайте сделать полную переиндексацию в настройках продукта. И хотя данный метод слегка устарел, всё равно считаю, что про него необходимо рассказать.