-
Роман ЦукановРазработчик
-
Дата публикации28.06.2021
-
Категория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);
}
}
Теперь все что остается, это запустить данный скрипт в браузере, после чего переиндексировать поиск. Не забудьте убрать галочку с чекбокса «Переиндексировать только измененные».