Пример кода, позволяющего получить все наборы и комплекты для товара, зная ID товара
С 14 версии ядра битрикса появился очень полезный для маркетологов механизма: наборов и комплектов.
Набор – это предложенный магазином список (рекомендованный список) до трёх товаров, которые отображаются в публичной части магазина, к основному товару для которого набор и создаётся.
Комплект – это список товаров, которые содержатся внутри комплекта и будут списаны с вашего склада при покупке. Сам комплект не имеет физического остатка, его остаток зависит от товаров, которые входят в этот комплект. Удобно применять, например мебельщикам. Для нас, как для клиента интернет-магазина, стол - это товар законченный и целый, а для них - это 4 ножки, столешница, болтики и т.д. Вы покупаете стол, а со склада списываются необходимые комплектующие, из которых состоит этот стол. Примеров применения комплектов можно найти массу.
Более подробно о данных типах товарных предложений можно почитать в презентационной статье от Юрия Волошина, поэтому останавливаться на полезностях данного механизма не буду.
В карточке каждого товара, который состоит в том или ином наборе или комплекте, логично было бы показывать наборы и комплекты, в которых данный товар состоит (в типовом интернет-магазине e-shop от 1С-Битрикс данный функционал отлично уже реализован). Для этого можно воспользоваться такой функцией:
\Bitrix\Main\Loader::includeModule('catalog'); $rsElem = CCatalogProductSet::GetList( array(), array( array( 'LOGIC' => 'OR', 'TYPE' => CCatalogProductSet::TYPE_GROUP, 'TYPE' => CCatalogProductSet::TYPE_SET ), 'ITEM_ID' => $arResult['ID']), false, false, array('SET_ID', 'OWNER_ID', 'ITEM_ID', 'TYPE') ); while ($set = $rsElem->Fetch()) { print_r($set); }
Данная функция выберет и наборы и комплекты. Если вам нужно получить только один тип товарного предложения - оставьте нужный тип.
Для получения содержимого каждого из товарных предложений, можно воспользоваться функцией:
$arSets = CCatalogProductSet::GetList( array(), array( "TYPE" => 1, "OWNER_ID" => $set["OWNER_ID"] ), false, false, array() ); while( $set2 = $arSets->Fetch() ){ if( $set2["OWNER_ID"]!=$set2["ITEM_ID"] ){ echo $set2["ITEM_ID"]; } }
Вот такой полезный механизм.
Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.
P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом