Поиск по артикулам торговых предложений 1С-Битрикс

  • Роман Цуканов
    Разработчик
  • Дата публикации
    28.06.2021
  • Категория
    1С-Битрикс
Поиск по артикулам торговых предложений 1С-Битрикс
Задача:Заставить поиск битрикс искать товары по артикулам торговых предложений

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

Но что если в нашем каталоге достаточно большое количество товаров и, следовательно, еще больше торговых предложений? Руками забивать все эти артикулы торговых в товар то еще удовольствие. Поэтому именно эту часть мы и автоматизируем.

Итак для начала создаем доп. свойство для нашего каталога. Совершенно не важно как его назвать, но вот его код нам пригодится. Например, код — OFFERSES_ARTICLES. Далее где-нибудь на сервере, например в папке /local/php_interface/ создаем файл с именем, например, offers-articles.php. Закидываем в файл следующий код:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");

$iblockId = 14;
$offersIblockId = 15;
$fieldCode = 'OFFER_ARTICLE';

$arSelect = Array('ID', 'NAME');
$arFilter = Array("IBLOCK_ID" => $iblockId);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
    $articles = '';

    $arFields = $ob->GetFields();
    $offers = CCatalogSKU::getOffersList($arFields['ID'], $iblockId);

    if(!empty($offers[$arFields['ID']]) && count($offers[$arFields['ID']]) > 0) {
        foreach ($offers[$arFields['ID']] as $offer) {
            $db_props = CIBlockElement::GetProperty($offersIblockId, $offer['ID'], array("sort" => "asc"), Array("CODE" => $fieldCode));
            $ar_props = $db_props->Fetch();
            $articles .= $ar_props['VALUE'].', ';
        }
    }

    if(!empty($articles)) {
        CIBlockElement::SetPropertyValueCode($arFields["ID"], "OFFERSES_ARTICLES", $articles);
    }
}

Теперь все что остается, это запустить данный скрипт в браузере, после чего переиндексировать поиск. Не забудьте убрать галочку с чекбокса «Переиндексировать только измененные».

Еще нет коммментариев. Будь первым!

Оформить заказ в Devstages