Очень часто приходит в голову решение - создать некий уникальный код товара, который бы отличался от артикула (например для печати этикеток). Как одно из вариантов решения, мы предлагаем использовать внутренний ID 1С-битрикс.
Итак, давайте начнём
Для начала проведем подготовительные работы. Битрикс по умолчанию не умеет искать по ID, поэтому надо создать в инфоблоке каталога пользовательское свойство, в котором мы будем хранить ID товара.Назовем это поле, например, CODE_ID.
В настройках поля отмечаем, что оно участвует в поиске и сохраняем изменения.
Подготовка закончена, теперь надо заполнить поле для поиска по ID у уже созданных товаров, и автоматизировать его заполнение у вновь создаваемых.
Поехали!
Чтобы заполнить это поле для ваших тысяч товаров сохраните код ниже в файл, поменяйте в нем номер инфоблока и код поля для поиска по ID на ваши, загрузите файл на ваш сайт и откройте в браузере под админом.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
set_time_limit(0); //убираем ограничение на время выполнения скрипта
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");
$IBLOCK_ID = 5; //введите сюда ID вашего инфоблока каталога
$SEARCH_FIELD_NAME = 'CODE_ID'; //а сюда символьный код вашего поля для поиска по ID
$els = CIBlockElement::GetList(
array("SORT"=>"ASC"),
array("IBLOCK_ID" => $IBLOCK_ID),
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) {
$cnt++;
}
}
echo $cnt;
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>
Отлично! Поздравляю вы прошли первую часть квеста.
Теперь, чтобы не париться так каждый раз открывайте файл /local/php_interface/init.php, создайте его если он отсутствует и добавьте в него следующий код.
При необходимости замените CODE_ID на код вашего поля.
/* добавляем в поисковый индекс ID нового товара */
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "searchid");
function searchid(&$arFields){
if($arFields["ID"]>0){
$upd = CIBlockElement::SetPropertyValuesEx(
$arFields["ID"],
$arFields['IBLOCK_ID'],
array('CODE_ID' => $arFields["ID"])
);
}
}
Ура! Вторая часть квеста пройдена.
Теперь вам надо сделать полную переиндексацию (доступна по ссылке: ВАШСАЙТ.РУ//bitrix/admin/search_reindex.php?lang=ru), и поиск по ID должен начать работать у вас на сайте.