/** * @param \CDBResult $dbResultList * @return array */ protected function makeItemsFromDbResult(\CDBResult $dbResultList) { $arItemsResult = $arProductIds = array(); while ($arItem = $dbResultList->Fetch()) { if ($arItem['TYPE'] != 'S') { $arProductIds[] = $arItem['ID']; $arItem['PROPERTIES'] = $this->getItemProperies($arItem['ID']); $arItemsResult[$arItem['ID']] = $arItem; } else { $arItemsResult['S' . $arItem['ID']] = $arItem; } } if (!empty($arProductIds)) { $dbCatalogProduct = \CCatalogProduct::GetList(array(), array('@ID' => $arProductIds)); while ($arCatalogProduct = $dbCatalogProduct->fetch()) { $arItemsResult[$arCatalogProduct['ID']]['PRODUCT'] = $arCatalogProduct; } $offersExistsIds = \CCatalogSKU::getExistOffers($arProductIds, $this->getIblockId()); $noOffersIds = array(); if (empty($offersExistsIds)) { $noOffersIds = $arProductIds; } else { $this->loadAllSku(array_keys(array_filter($offersExistsIds))); foreach ($offersExistsIds as $id => $bExists) { $arItem =& $arItemsResult[$id]; if ($bExists) { $arItem['SKU_ITEMS'] = $this->getProductSku($arItem); } else { $noOffersIds[] = $id; } } unset($id, $bExists); } if (!empty($noOffersIds)) { $productRatioList = Catalog\ProductTable::getCurrentRatioWithMeasure($noOffersIds); if (!empty($productRatioList)) { foreach ($productRatioList as $productId => $productRatio) { if (!isset($arItemsResult[$productId]['PRODUCT'])) { continue; } $arItemsResult[$productId]['PRODUCT']['MEASURE_RATIO'] = $productRatio['RATIO']; $arItemsResult[$productId]['PRODUCT']['MEASURE'] = $productRatio['MEASURE']; } unset($productRatio, $productId); } unset($productRatioList); $priceIds = $this->getVisiblePrices(); foreach ($priceIds as $priceId) { $dbPrice = \CPrice::GetListEx(array(), array('PRODUCT_ID' => $noOffersIds, 'CATALOG_GROUP_ID' => $priceId), false, false, array('PRODUCT_ID', 'PRICE', 'CURRENCY', 'QUANTITY_FROM', 'QUANTITY_TO')); while ($arPrice = $dbPrice->fetch()) { $arPrice['QUANTITY_FROM'] = (int) $arPrice['QUANTITY_FROM']; $arPrice['QUANTITY_TO'] = (int) $arPrice['QUANTITY_TO']; if (!isset($arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId]) || $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId]['QUANTITY_FROM'] > $arPrice['QUANTITY_FROM']) { $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId] = array('PRICE' => $arPrice['PRICE'], 'CURRENCY' => $arPrice['CURRENCY'], 'QUANTITY_FROM' => $arPrice['QUANTITY_FROM'], 'QUANTITY_TO' => $arPrice['QUANTITY_TO']); } } unset($arPrice, $dbPrice); } if ($this->getStoreId()) { $dbStoreProduct = \CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $noOffersIds, "STORE_ID" => $this->getStoreId())); while ($arStoreProduct = $dbStoreProduct->Fetch()) { $arItemsResult[$arStoreProduct["PRODUCT_ID"]]['PRODUCT']['STORE_AMOUNT'] = $arStoreProduct["AMOUNT"]; } } $groupsIterator = CCatalogProductSet::getList(array(), array('OWNER_ID' => $noOffersIds, 'SET_ID' => 0, 'TYPE' => \CCatalogProductSet::TYPE_GROUP), false, false, array('ID', 'OWNER_ID', 'ITEM_ID', 'SET_ID', 'TYPE')); while ($group = $groupsIterator->Fetch()) { if ($group['OWNER_ID'] == $group['ITEM_ID']) { $arItemsResult[$group['OWNER_ID']]['PRODUCT']['IS_GROUP'] = true; } } } } return $arItemsResult; }
$countSetDefaultItems = 0; $select = array('ID', 'NAME', 'CODE', 'IBLOCK_ID', 'IBLOCK_SECTION_ID', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'DETAIL_PICTURE', 'PREVIEW_TEXT', 'CATALOG_AVAILABLE', 'CATALOG_MEASURE'); $arResult["PRICES"] = CIBlockPriceTools::GetCatalogPrices($arResult['PRODUCT_IBLOCK_ID'], $arParams["PRICE_CODE"]); foreach ($arResult["PRICES"] as $key => $value) { if (!$value['CAN_VIEW'] && !$value['CAN_BUY']) { continue; } $select[] = $value["SELECT"]; } $arResult["SET_ITEMS"]["DEFAULT"] = array(); $arResult["SET_ITEMS"]["OTHER"] = array(); $arResult["SET_ITEMS"]["PRICE"] = 0; $arResult["SET_ITEMS"]["OLD_PRICE"] = 0; $arResult["SET_ITEMS"]["PRICE_DISCOUNT_DIFFERENCE"] = 0; $arResult['ITEMS_RATIO'] = array_fill_keys($arSetItemsID, 1); $ratioResult = Catalog\ProductTable::getCurrentRatioWithMeasure($arSetItemsID); foreach ($ratioResult as $ratioProduct => $ratioData) { $arResult['ITEMS_RATIO'][$ratioProduct] = $ratioData['RATIO']; } unset($ratioProduct, $ratioData); $tagIblockList = array(); $tagIblockList[$arResult['PRODUCT_IBLOCK_ID']] = $arResult['PRODUCT_IBLOCK_ID']; $tagIblockList[$arResult['ELEMENT_IBLOCK_ID']] = $arResult['ELEMENT_IBLOCK_ID']; $tagCurrencyList = array(); $found = false; $itemsIterator = CIBlockElement::GetList(array(), array('ID' => $arSetItemsID), false, false, $select); while ($item = $itemsIterator->GetNext()) { $found = true; $item['ID'] = (int) $item['ID']; $item['IBLOCK_ID'] = (int) $item['IBLOCK_ID']; $tagIblockList[$item['IBLOCK_ID']] = $item['IBLOCK_ID'];
public static function getItemsInfo(&$arSets) { $itemList = array(); $itemIds = array(); if (empty($arSets) || !is_array($arSets)) { return; } foreach ($arSets as $key => $arOneSet) { foreach ($arOneSet['ITEMS'] as $keyItem => $arItem) { if ('' == $arItem['ITEM_ID']) { continue; } $intItemID = (int) $arItem['ITEM_ID']; if (0 >= $intItemID) { continue; } if (!isset($itemList[$intItemID])) { $itemList[$intItemID] = array(); $itemIds[] = $intItemID; } $itemList[$intItemID][] =& $arSets[$key]['ITEMS'][$keyItem]; } } if (!empty($itemList)) { $productIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'NAME'), 'filter' => array('@ID' => $itemIds))); while ($product = $productIterator->fetch()) { $product['ID'] = (int) $product['ID']; if (!isset($itemList[$product['ID']])) { continue; } foreach ($itemList[$product['ID']] as &$setItem) { $setItem['ITEM_NAME'] = $product['NAME']; } unset($setItem); } unset($product, $productIterator); $productRatio = Catalog\ProductTable::getCurrentRatioWithMeasure($itemIds); if (!empty($productRatio)) { foreach ($productRatio as $productId => $productData) { if (!isset($itemList[$productId])) { continue; } foreach ($itemList[$productId] as &$setItem) { $setItem['RATIO'] = $productData['RATIO']; $setItem['MEASURE'] = $productData['MEASURE']; } unset($setItem); } unset($productId, $productData); } unset($productRatio); } unset($itemIds, $itemList); }