Дополнение для товаров со SKU.
Смысл в том, что если у товара есть SKU пробегаемся по ним и обновляем свойство у основного (родителя) элемента.
SKU товара получаем методом CCatalogSKU::getOffersList
Скрытый текст |
---|
Код |
---|
while ($arGood = $dbGoods->Fetch()) {
// Очищаем свойство от предыдущих значений
CIBlockElement::SetPropertyValuesEx(
$arGood['ID'],
$IBLOCK_ID,
array(
'ATT_NAL_STORE' => ''
)
);
$res = CCatalogSKU::getOffersList(
$arGood['ID'], // массив ID товаров
$skuFilter = array(),
$fields = array('ID'),
);
// ЕСЛИ ЕСТЬ ПРЕДЛОЖЕНИЯ ===========
if (count($res) > 0) {
foreach ($res[$arGood['ID']] as $k => $val) {
$dbGoodsOffers = CIBlockElement::GetList(
array('ID' => 'ASC'),
array(
'IBLOCK_ID' => $val['IBLOCK_ID'],
'ID' => $val['ID']
),
false,
false,
array(
'ID',
'CATALOG_QUANTITY'
)
);
while ($arOffer = $dbGoodsOffers->Fetch()) {
$ID = CCatalogStoreProduct::UpdateFromForm($arFields);
// Собираем инфу о складе
$arStores = array();
$dbStores = CCatalogStore::GetList(
array(),
array(
'PRODUCT_ID' => array($arOffer['ID']),
'ACTIVE' => 'Y',
),
false,
false,
array(
'ID',
'PRODUCT_AMOUNT',
'UF_ATT_NAL_STORE'
)
);
while ($arStore = $dbStores->Fetch()) {
$arStores[] = $arStore;
}
// Готовим свойство значение склад = ID свойства
foreach ($arStores as $arStore) {
if ($arStore['PRODUCT_AMOUNT'] > 0) {
$PROPERTY_VALUES[] = array(
'VALUE' => $arStore['UF_ATT_NAL_STORE']
);
}
}
// Устанавливаем значение свойства
CIBlockElement::SetPropertyValuesEx(
$arGood['ID'],
$IBLOCK_ID,
array(
'ATT_NAL_STORE' => $PROPERTY_VALUES
)
);
}
}
$PROPERTY_VALUES = array('VALUE' => ''); // Обнуляем подсчет значения для свойста
// ЕСЛИ НЕТ ПРЕДЛОЖЕНИЯ ==============
} else {
$ID = CCatalogStoreProduct::UpdateFromForm($arFields);
// Собираем инфу о складе
$arStores = array();
$dbStores = CCatalogStore::GetList(
array(),
array(
'PRODUCT_ID' => array($arGood['ID']),
'ACTIVE' => 'Y',
),
false,
false,
array(
'ID',
'PRODUCT_AMOUNT',
'UF_ATT_NAL_STORE'
)
);
while ($arStore = $dbStores->Fetch()) {
$arStores[] = $arStore;
}
// Готовим свойство значение склад = ID свойства
$PROPERTY_VALUES = array('VALUE' => '');
foreach ($arStores as $arStore) {
if ($arStore['PRODUCT_AMOUNT'] > 0) {
$PROPERTY_VALUES[] = array(
'VALUE' => $arStore['UF_ATT_NAL_STORE']
);
}
}
// Устанавливаем значение свойства
CIBlockElement::SetPropertyValuesEx(
$arGood['ID'],
$IBLOCK_ID,
array(
'ATT_NAL_STORE' => $PROPERTY_VALUES
)
);
}
// Обновляем индекс
\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex(
$IBLOCK_ID,
$arGood['ID']
);
|
|