Битрикс поиск товара по ID

Если вы не читали статью Как сделать поиск по 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"])
        );
    }
}

Не забывайте сделать полную переиндексацию в настройках продукта. И хотя данный метод слегка устарел, всё равно считаю, что про него необходимо рассказать.

На вашем сайте нужно выполнить данную работу? Вы можете обратиться ко мне за помощью и сэкономить своё время

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *