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']; $priceList = CIBlockPriceTools::GetItemPrices($item['IBLOCK_ID'], $arResult['PRICES'], $item, $arParams['PRICE_VAT_INCLUDE'], $arConvertParams); if (empty($priceList)) { continue; } //TODO: after iblock 15.5.9 change this code to CIBlockPriceTools::getMinPriceFromList foreach ($priceList as &$price) { $tagCurrencyList[$price['CURRENCY']] = $price['CURRENCY']; if (isset($price['ORIG_CURRENCY'])) { $tagCurrencyList[$price['ORIG_CURRENCY']] = $price['ORIG_CURRENCY']; } if ($price['MIN_PRICE'] == "Y") { $item['PRICE_CURRENCY'] = $price['CURRENCY']; $item['PRICE_DISCOUNT_VALUE'] = $price['DISCOUNT_VALUE']; $item['PRICE_PRINT_DISCOUNT_VALUE'] = $price['PRINT_DISCOUNT_VALUE']; $item['PRICE_VALUE'] = $price['VALUE']; $item['PRICE_PRINT_VALUE'] = $price['PRINT_VALUE'];
unset($comparePath, $currentPath); foreach ($arResult["ITEMS"] as &$arItem) { $arItem["PRICES"] = array(); $arItem["PRICE_MATRIX"] = false; $arItem['MIN_PRICE'] = false; if ($arParams["USE_PRICE_COUNT"]) { if ($bCatalog) { $arItem["PRICE_MATRIX"] = CatalogGetPriceTableEx($arItem["ID"], 0, $arPriceTypeID, 'Y', $arConvertParams); if (isset($arItem["PRICE_MATRIX"]["COLS"]) && is_array($arItem["PRICE_MATRIX"]["COLS"])) { foreach ($arItem["PRICE_MATRIX"]["COLS"] as $keyColumn => $arColumn) { $arItem["PRICE_MATRIX"]["COLS"][$keyColumn]["NAME_LANG"] = htmlspecialcharsex($arColumn["NAME_LANG"]); } } } } else { $arItem["PRICES"] = CIBlockPriceTools::GetItemPrices($arParams["IBLOCK_ID"], $arResult["PRICES"], $arItem, $arParams['PRICE_VAT_INCLUDE'], $arConvertParams); if (!empty($arItem["PRICES"])) { foreach ($arItem['PRICES'] as &$arOnePrice) { if ('Y' == $arOnePrice['MIN_PRICE']) { $arItem['MIN_PRICE'] = $arOnePrice; break; } } unset($arOnePrice); } } $arItem["CAN_BUY"] = CIBlockPriceTools::CanBuy($arParams["IBLOCK_ID"], $arResult["PRICES"], $arItem); $arItem['~BUY_URL'] = str_replace('#ID#', $arItem["ID"], $arResult['~BUY_URL_TEMPLATE']); $arItem['BUY_URL'] = str_replace('#ID#', $arItem["ID"], $arResult['BUY_URL_TEMPLATE']); $arItem['~ADD_URL'] = str_replace('#ID#', $arItem["ID"], $arResult['~ADD_URL_TEMPLATE']); $arItem['ADD_URL'] = str_replace('#ID#', $arItem["ID"], $arResult['ADD_URL_TEMPLATE']);
public static function GetOffersArray($arFilter, $arElementID, $arOrder, $arSelectFields, $arSelectProperties, $limit, $arPrices, $vat_include, $arCurrencyParams = array(), $USER_ID = 0, $LID = SITE_ID) { $arResult = array(); $boolCheckPermissions = false; $boolHideNotAvailable = false; $IBLOCK_ID = 0; if (!empty($arFilter) && is_array($arFilter)) { if (isset($arFilter['IBLOCK_ID'])) $IBLOCK_ID = $arFilter['IBLOCK_ID']; if (isset($arFilter['HIDE_NOT_AVAILABLE'])) $boolHideNotAvailable = 'Y' === $arFilter['HIDE_NOT_AVAILABLE']; if (isset($arFilter['CHECK_PERMISSIONS'])) $boolCheckPermissions = 'Y' === $arFilter['CHECK_PERMISSIONS']; } else { $IBLOCK_ID = $arFilter; } $arOffersIBlock = CIBlockPriceTools::GetOffersIBlock($IBLOCK_ID); if($arOffersIBlock) { $arDefaultMeasure = CCatalogMeasure::getDefaultMeasure(true, true); $limit = intval($limit); if (0 > $limit) $limit = 0; if(!isset($arOrder["ID"])) $arOrder["ID"] = "DESC"; $intOfferIBlockID = $arOffersIBlock["OFFERS_IBLOCK_ID"]; $arFilter = array( "IBLOCK_ID" => $intOfferIBlockID, "PROPERTY_".$arOffersIBlock["OFFERS_PROPERTY_ID"] => $arElementID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", ); if ($boolHideNotAvailable) $arFilter['CATALOG_AVAILABLE'] = 'Y'; if ($boolCheckPermissions) { $arFilter['CHECK_PERMISSIONS'] = "Y"; $arFilter['MIN_PERMISSION'] = "R"; } $arSelect = array( "ID" => 1, "IBLOCK_ID" => 1, "PROPERTY_".$arOffersIBlock["OFFERS_PROPERTY_ID"] => 1, "CATALOG_QUANTITY" => 1 ); //if(!$arParams["USE_PRICE_COUNT"]) { foreach($arPrices as $value) { if (!$value['CAN_VIEW'] && !$value['CAN_BUY']) continue; $arSelect[$value["SELECT"]] = 1; } } foreach($arSelectFields as $code) $arSelect[$code] = 1; //mark to select if (!isset($arSelect['PREVIEW_PICTURE'])) $arSelect['PREVIEW_PICTURE'] = 1; if (!isset($arSelect['DETAIL_PICTURE'])) $arSelect['DETAIL_PICTURE'] = 1; $arOfferIDs = array(); $arMeasureMap = array(); $intKey = 0; $arOffersPerElement = array(); $arOffersLink = array(); $rsOffers = CIBlockElement::GetList($arOrder, $arFilter, false, false, array_keys($arSelect)); while($arOffer = $rsOffers->GetNext()) { $arOffer['ID'] = intval($arOffer['ID']); $element_id = $arOffer["PROPERTY_".$arOffersIBlock["OFFERS_PROPERTY_ID"]."_VALUE"]; //No more than limit offers per element if($limit > 0) { $arOffersPerElement[$element_id]++; if($arOffersPerElement[$element_id] > $limit) continue; } if($element_id > 0) { $arOffer["LINK_ELEMENT_ID"] = intval($element_id); $arOffer["PROPERTIES"] = array(); $arOffer["DISPLAY_PROPERTIES"] = array(); $arOffer['CHECK_QUANTITY'] = ('Y' == $arOffer['CATALOG_QUANTITY_TRACE'] && 'N' == $arOffer['CATALOG_CAN_BUY_ZERO']); $arOffer['CATALOG_TYPE'] = CCatalogProduct::TYPE_OFFER; $arOffer['CATALOG_MEASURE_NAME'] = $arDefaultMeasure['SYMBOL_RUS']; $arOffer['~CATALOG_MEASURE_NAME'] = $arDefaultMeasure['SYMBOL_RUS']; $arOffer["CATALOG_MEASURE_RATIO"] = 1; if (!isset($arOffer['CATALOG_MEASURE'])) $arOffer['CATALOG_MEASURE'] = 0; $arOffer['CATALOG_MEASURE'] = intval($arOffer['CATALOG_MEASURE']); if (0 > $arOffer['CATALOG_MEASURE']) $arOffer['CATALOG_MEASURE'] = 0; if (0 < $arOffer['CATALOG_MEASURE']) { if (!isset($arMeasureMap[$arOffer['CATALOG_MEASURE']])) $arMeasureMap[$arOffer['CATALOG_MEASURE']] = array(); $arMeasureMap[$arOffer['CATALOG_MEASURE']][] = $intKey; } $arOfferIDs[] = $arOffer['ID']; $arResult[$intKey] = $arOffer; $arOffersLink[$arOffer['ID']] = &$arResult[$intKey]; $intKey++; } } if (!empty($arOfferIDs)) { $rsRatios = CCatalogMeasureRatio::getList( array(), array('PRODUCT_ID' => $arOfferIDs), false, false, array('PRODUCT_ID', 'RATIO') ); while ($arRatio = $rsRatios->Fetch()) { $arRatio['PRODUCT_ID'] = intval($arRatio['PRODUCT_ID']); if (isset($arOffersLink[$arRatio['PRODUCT_ID']])) { $intRatio = intval($arRatio['RATIO']); $dblRatio = doubleval($arRatio['RATIO']); $mxRatio = ($dblRatio > $intRatio ? $dblRatio : $intRatio); if (CATALOG_VALUE_EPSILON > abs($mxRatio)) $mxRatio = 1; elseif (0 > $mxRatio) $mxRatio = 1; $arOffersLink[$arRatio['PRODUCT_ID']]['CATALOG_MEASURE_RATIO'] = $mxRatio; } } if (!empty($arSelectProperties)) { CIBlockElement::GetPropertyValuesArray($arOffersLink, $intOfferIBlockID, $arFilter); foreach ($arResult as &$arOffer) { CCatalogDiscount::SetProductPropertiesCache($arOffer['ID'], $arOffer["PROPERTIES"]); foreach ($arSelectProperties as $pid) { if (!isset($arOffer["PROPERTIES"][$pid])) continue; $prop = &$arOffer["PROPERTIES"][$pid]; $boolArr = is_array($prop["VALUE"]); if( ($boolArr && !empty($prop["VALUE"])) || (!$boolArr && strlen($prop["VALUE"])>0)) { $arOffer["DISPLAY_PROPERTIES"][$pid] = CIBlockFormatProperties::GetDisplayValue($arOffer, $prop, "catalog_out"); } } if (isset($arOffer)) unset($arOffer); } } CCatalogDiscount::SetProductSectionsCache($arOfferIDs); CCatalogDiscount::SetDiscountProductCache($arOfferIDs, array('IBLOCK_ID' => $intOfferIBlockID, 'GET_BY_ID' => 'Y')); foreach ($arResult as &$arOffer) { $arOffer['CATALOG_QUANTITY'] = ( 0 < $arOffer['CATALOG_QUANTITY'] && is_float($arOffer['CATALOG_MEASURE_RATIO']) ? floatval($arOffer['CATALOG_QUANTITY']) : intval($arOffer['CATALOG_QUANTITY']) ); $arOffer['MIN_PRICE'] = false; $arOffer["PRICES"] = CIBlockPriceTools::GetItemPrices($arOffersIBlock["OFFERS_IBLOCK_ID"], $arPrices, $arOffer, $vat_include, $arCurrencyParams, $USER_ID, $LID); if (!empty($arOffer["PRICES"])) { foreach ($arOffer['PRICES'] as &$arOnePrice) { if ('Y' == $arOnePrice['MIN_PRICE']) { $arOffer['MIN_PRICE'] = $arOnePrice; break; } } unset($arOnePrice); } $arOffer["CAN_BUY"] = CIBlockPriceTools::CanBuy($arOffersIBlock["OFFERS_IBLOCK_ID"], $arPrices, $arOffer); } if (isset($arOffer)) unset($arOffer); } if (!empty($arMeasureMap)) { $rsMeasures = CCatalogMeasure::getList( array(), array('@ID' => array_keys($arMeasureMap)), false, false, array('ID', 'SYMBOL_RUS') ); while ($arMeasure = $rsMeasures->GetNext()) { $arMeasure['ID'] = intval($arMeasure['ID']); if (isset($arMeasureMap[$arMeasure['ID']]) && !empty($arMeasureMap[$arMeasure['ID']])) { foreach ($arMeasureMap[$arMeasure['ID']] as &$intOneKey) { $arResult[$intOneKey]['CATALOG_MEASURE_NAME'] = $arMeasure['SYMBOL_RUS']; $arResult[$intOneKey]['~CATALOG_MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; } unset($intOneKey); } } } } return $arResult; }
$ID = $arElement["PROPERTY_".strtoupper($arParams["LINK_PROPERTY_SID"])."_VALUE"]; if(!array_key_exists($ID, $arFound) || (strpos($arElement["XML_ID"], "#")===false)) { $arFound[$ID] = true; $arItem = &$arResult["ITEMS"][$arMap[$ID]]; if($arParams["USE_PRICE_COUNT"]) { if(CModule::IncludeModule("catalog")) { $arItem["PRICE_MATRIX"] = CatalogGetPriceTableEx($arElement["ID"]); foreach($arItem["PRICE_MATRIX"]["COLS"] as $keyColumn=>$arColumn) $arItem["PRICE_MATRIX"]["COLS"][$keyColumn]["NAME_LANG"] = htmlspecialchars($arColumn["NAME_LANG"]); } else { $arItem["PRICE_MATRIX"] = false; } $arItem["PRICES"] = array(); } else { $arItem["PRICE_MATRIX"] = false; $arItem["PRICES"] = CIBlockPriceTools::GetItemPrices($arParams["LINK_IBLOCK_ID"], $arResult["PRICES"], $arElement); } $arItem["CAN_BUY"] = CIBlockPriceTools::CanBuy($arParams["LINK_IBLOCK_ID"], $arResult["PRICES"], $arElement); } } } ?>
public static function GetOffersArray($IBLOCK_ID, $arElementID, $arOrder, $arSelectFields, $arSelectProperties, $limit, $arPrices, $vat_include, $arCurrencyParams = array(), $USER_ID = 0, $LID = SITE_ID) { $arResult = array(); $arOffersIBlock = CIBlockPriceTools::GetOffersIBlock($IBLOCK_ID); if($arOffersIBlock) { $limit = intval($limit); if (0 > $limit) $limit = 0; if(!array_key_exists("ID", $arOrder)) $arOrder["ID"] = "DESC"; $arFilter = array( "IBLOCK_ID" => $arOffersIBlock["OFFERS_IBLOCK_ID"], "PROPERTY_".$arOffersIBlock["OFFERS_PROPERTY_ID"] => $arElementID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", ); $arSelect = array( "ID" => 1, "IBLOCK_ID" => 1, "PROPERTY_".$arOffersIBlock["OFFERS_PROPERTY_ID"] => 1, ); //if(!$arParams["USE_PRICE_COUNT"]) { foreach($arPrices as $value) { $arSelect[$value["SELECT"]] = 1; //$arrFilter["CATALOG_SHOP_QUANTITY_".$value["ID"]] = $arParams["SHOW_PRICE_COUNT"]; } } foreach($arSelectFields as $code) $arSelect[$code] = 1; //mark to select $arOffersPerElement = array(); $rsOffers = CIBlockElement::GetList($arOrder, $arFilter, false, false, array_keys($arSelect)); while($obOffer = $rsOffers->GetNextElement()) { $arOffer = $obOffer->GetFields(); $element_id = $arOffer["PROPERTY_".$arOffersIBlock["OFFERS_PROPERTY_ID"]."_VALUE"]; //No more than limit offers per element if($limit > 0) { $arOffersPerElement[$element_id]++; if($arOffersPerElement[$element_id] > $limit) continue; } if($element_id > 0) { $arOffer["LINK_ELEMENT_ID"] = $element_id; $arOffer["DISPLAY_PROPERTIES"] = array(); if(!empty($arSelectProperties)) { $arOffer["PROPERTIES"] = $obOffer->GetProperties(); foreach($arSelectProperties as $pid) { $prop = &$arOffer["PROPERTIES"][$pid]; if((is_array($prop["VALUE"]) && count($prop["VALUE"])>0) || (!is_array($prop["VALUE"]) && strlen($prop["VALUE"])>0)) { $arOffer["DISPLAY_PROPERTIES"][$pid] = CIBlockFormatProperties::GetDisplayValue($arOffer, $prop, "catalog_out"); } } } $arOffer["PRICES"] = CIBlockPriceTools::GetItemPrices($arOffersIBlock["OFFERS_IBLOCK_ID"], $arPrices, $arOffer, $vat_include, $arCurrencyParams, $USER_ID, $LID); $arOffer["CAN_BUY"] = CIBlockPriceTools::CanBuy($arOffersIBlock["OFFERS_IBLOCK_ID"], $arPrices, $arOffer); } $arResult[] = $arOffer; } } return $arResult; }
$arFields = $obEl->GetFields(); if (!empty($arFields["IBLOCK_SECTION_ID"])) { $arSec = $arSect; } $path = !empty($arFields['DETAIL_PICTURE']) ? $arFields['DETAIL_PICTURE'] : $arFields['PREVIEW_PICTURE']; if (empty($path)) { $arProp = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], array(), array('CODE' => 'MORE_PHOTO'))->Fetch(); $path = $arProp["VALUE"]; } $path = CFile::ResizeImageGet($path, array('width' => 150, 'height' => 150), BX_RESIZE_IMAGE_PROPORTIONAL, false); $path = $path['src']; if (CModule::IncludeModule('catalog')) { $arResultPrices = CIBlockPriceTools::GetCatalogPrices($arFields["IBLOCK_ID"], array($arParams["PRICE_CODE"])); $arProduct = CCatalogProduct::GetByID($arFields["ID"]); $arProduct['VAT_INCLUDED'] = $arProduct['VAT_INCLUDED'] == 'Y' ? true : false; $arPrices = CIBlockPriceTools::GetItemPrices($arFields["IBLOCK_ID"], $arResultPrices, $arFields, $arProduct['VAT_INCLUDED'], array("CURRENCY_ID" => $arParams["CURRENCY"])); } $arHits[$index][] = array("NAME" => $arFields["NAME"], "SECTION" => $arSec["NAME"], "SECTION_PAGE_URL" => $arSec["SECTION_PAGE_URL"], "DETAIL_PAGE_URL" => $arFields["DETAIL_PAGE_URL"], "PHOTO" => $path, "PRICE" => $arPrices, "SALELEADER" => $arFields["PROPERTY_SALELEADER_VALUE"], "NEWPRODUCT" => $arFields["PROPERTY_NEWPRODUCT_VALUE"], "SPECIAL_OFFER" => $arFields["PROPERTY_SPECIAL_OFFER_VALUE"]); } // while( $obEl = $dbRes->GetNextElement() ) $arResult['HITS'][$index] = $arHits[$index]; } // if($arParams["VIEW_HIT"] == "Y" && $arItem['DEPTH_LEVEL'] == 1) } // foreach($arResult as &$arItem => $index) if ($obCache->StartDataCache($life_time, $cache_id, "/")) { $obCache->EndDataCache(array("MENU_HITS" => $arHits)); } } // if(!is_array($arResult['HITS'])) unset($obCache);
$arPriceTypeID[] = $value["ID"]; } if (isset($value)) { unset($value); } } $arFound = array(); $rsElements = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect); while ($arElement = $rsElements->GetNext()) { $ID = $arElement["PROPERTY_" . strtoupper($arParams["LINK_PROPERTY_SID"]) . "_VALUE"]; if (!array_key_exists($ID, $arFound) || strpos($arElement["XML_ID"], "#") === false) { $arFound[$ID] = true; $arItem =& $arResult["ITEMS"][$arMap[$ID]]; if ($arParams["USE_PRICE_COUNT"]) { if (CModule::IncludeModule("catalog")) { $arItem["PRICE_MATRIX"] = CatalogGetPriceTableEx($arElement["ID"], 0, $arPriceTypeID, 'Y', $arResult['CONVERT_CURRENCY']); foreach ($arItem["PRICE_MATRIX"]["COLS"] as $keyColumn => $arColumn) { $arItem["PRICE_MATRIX"]["COLS"][$keyColumn]["NAME_LANG"] = htmlspecialcharsbx($arColumn["NAME_LANG"]); } } else { $arItem["PRICE_MATRIX"] = false; } $arItem["PRICES"] = array(); } else { $arItem["PRICE_MATRIX"] = false; $arItem["PRICES"] = CIBlockPriceTools::GetItemPrices($arParams["LINK_IBLOCK_ID"], $arResult["PRICES"], $arElement, $arParams['PRICE_VAT_INCLUDE'], $arResult['CONVERT_CURRENCY']); } $arItem["CAN_BUY"] = CIBlockPriceTools::CanBuy($arParams["LINK_IBLOCK_ID"], $arResult["PRICES"], $arElement); } } }
/** * set prices for all items * @return array currency list */ protected function setItemsPrices() { global $APPLICATION; // Get Available prices $prices = $this->data['CATALOG_PRICES']; // Convert params $convertParams = array(); if ('Y' == $this->arParams['CONVERT_CURRENCY']) { if (!$this->isCurrency) { $this->arParams['CONVERT_CURRENCY'] = 'N'; $this->arParams['CURRENCY_ID'] = ''; } else { $currencyInfo = $this->data['CURRENCY'][$this->arParams['CURRENCY_ID']]; if (!empty($currencyInfo) && is_array($currencyInfo)) { $this->arParams['CURRENCY_ID'] = $currencyInfo['CURRENCY']; $convertParams['CURRENCY_ID'] = $currencyInfo['CURRENCY']; } else { $this->arParams['CONVERT_CURRENCY'] = 'N'; $this->arParams['CURRENCY_ID'] = ''; } } } $this->data['CONVERT_CURRENCY'] = $convertParams; // Set items Prices foreach ($this->items as &$item) { $item["PRICES"] = array(); $item['MIN_PRICE'] = false; $item["PRICES"] = CIBlockPriceTools::GetItemPrices($item['IBLOCK_ID'], $prices, $item, $this->arParams['PRICE_VAT_INCLUDE'], $convertParams); if (!empty($item["PRICES"])) { foreach ($item['PRICES'] as &$onePrice) { if ('Y' == $onePrice['MIN_PRICE']) { $item['MIN_PRICE'] = $onePrice; break; } } unset($onePrice); } $item["CAN_BUY"] = CIBlockPriceTools::CanBuy($item['IBLOCK_ID'], $prices, $item); // Action links $item["~BUY_URL"] = $APPLICATION->GetCurPageParam($this->arParams["ACTION_VARIABLE"] . "=BUY&" . $this->arParams["PRODUCT_ID_VARIABLE"] . "=" . $item["ID"], array($this->arParams["PRODUCT_ID_VARIABLE"], $this->arParams["ACTION_VARIABLE"])); $item["BUY_URL"] = htmlspecialcharsbx($item["~BUY_URL"]); $item["~ADD_URL"] = $APPLICATION->GetCurPageParam($this->arParams["ACTION_VARIABLE"] . "=ADD2BASKET&" . $this->arParams["PRODUCT_ID_VARIABLE"] . "=" . $item["ID"], array($this->arParams["PRODUCT_ID_VARIABLE"], $this->arParams["ACTION_VARIABLE"])); $item["ADD_URL"] = htmlspecialcharsbx($item["~ADD_URL"]); $item["~COMPARE_URL"] = $APPLICATION->GetCurPageParam("action=ADD_TO_COMPARE_LIST&id=" . $item["ID"], array("action", "id")); $item["COMPARE_URL"] = htmlspecialcharsbx($item["~COMPARE_URL"]); $item["~SUBSCRIBE_URL"] = $APPLICATION->GetCurPageParam($this->arParams["ACTION_VARIABLE"] . "=SUBSCRIBE_PRODUCT&" . $this->arParams["PRODUCT_ID_VARIABLE"] . "=" . $item["ID"], array($this->arParams["PRODUCT_ID_VARIABLE"], $this->arParams["ACTION_VARIABLE"])); $item["SUBSCRIBE_URL"] = htmlspecialcharsbx($item["~SUBSCRIBE_URL"]); } }
/** * set prices for all items * @return array currency list */ protected function setItemsPrices() { // Set items Prices foreach ($this->items as &$item) { $item["PRICES"] = array(); $item['MIN_PRICE'] = false; $item["CAN_BUY"] = false; $item['~BUY_URL'] = $this->urlTemplates['~BUY_URL_TEMPLATE'] . $item['ID']; $item['BUY_URL'] = $this->urlTemplates['BUY_URL_TEMPLATE'] . $item['ID']; $item['~ADD_URL'] = $this->urlTemplates['~ADD_URL_TEMPLATE'] . $item['ID']; $item['ADD_URL'] = $this->urlTemplates['ADD_URL_TEMPLATE'] . $item['ID']; $item['~COMPARE_URL'] = $this->urlTemplates['~COMPARE_URL_TEMPLATE'] . $item['ID']; $item['COMPARE_URL'] = $this->urlTemplates['COMPARE_URL_TEMPLATE'] . $item['ID']; $item['~SUBSCRIBE_URL'] = $this->urlTemplates['~SUBSCRIBE_URL_TEMPLATE'] . $item['ID']; $item['SUBSCRIBE_URL'] = $this->urlTemplates['SUBSCRIBE_URL_TEMPLATE'] . $item['ID']; if (!empty($item['OFFERS'])) { continue; } $item['PRICES'] = CIBlockPriceTools::GetItemPrices($item['IBLOCK_ID'], $this->data['CATALOG_PRICES'], $item, $this->arParams['PRICE_VAT_INCLUDE'], $this->data['CONVERT_CURRENCY']); $item['MIN_PRICE'] = CIBlockPriceTools::getMinPriceFromList($item['PRICES']); $item['CAN_BUY'] = CIBlockPriceTools::CanBuy($item['IBLOCK_ID'], $this->data['CATALOG_PRICES'], $item); } unset($item); }
public static function GetOffersArray($arFilter, $arElementID, $arOrder, $arSelectFields, $arSelectProperties, $limit, $arPrices, $vat_include, $arCurrencyParams = array(), $USER_ID = 0, $LID = SITE_ID) { global $USER; $arResult = array(); $boolCheckPermissions = false; $boolHideNotAvailable = false; $showPriceCount = false; $IBLOCK_ID = 0; if (!empty($arFilter) && is_array($arFilter)) { if (isset($arFilter['IBLOCK_ID'])) { $IBLOCK_ID = $arFilter['IBLOCK_ID']; } if (isset($arFilter['HIDE_NOT_AVAILABLE'])) { $boolHideNotAvailable = $arFilter['HIDE_NOT_AVAILABLE'] === 'Y'; } if (isset($arFilter['CHECK_PERMISSIONS'])) { $boolCheckPermissions = $arFilter['CHECK_PERMISSIONS'] === 'Y'; } if (isset($arFilter['SHOW_PRICE_COUNT'])) { $showPriceCount = (int) $arFilter['SHOW_PRICE_COUNT']; if ($showPriceCount <= 0) { $showPriceCount = false; } } } else { $IBLOCK_ID = $arFilter; } if (self::$needDiscountCache === null) { $pricesAllow = CIBlockPriceTools::GetAllowCatalogPrices($arPrices); if (empty($pricesAllow)) { self::$needDiscountCache = false; } else { $USER_ID = (int) $USER_ID; $userGroups = $USER_ID > 0 ? CUser::GetUserGroup($USER_ID) : $USER->GetUserGroupArray(); self::$needDiscountCache = CIBlockPriceTools::SetCatalogDiscountCache($pricesAllow, $userGroups); unset($userGroups); } unset($pricesAllow); } $arOffersIBlock = CIBlockPriceTools::GetOffersIBlock($IBLOCK_ID); if ($arOffersIBlock) { $arDefaultMeasure = CCatalogMeasure::getDefaultMeasure(true, true); $limit = (int) $limit; if (0 > $limit) { $limit = 0; } if (!isset($arOrder["ID"])) { $arOrder["ID"] = "DESC"; } $intOfferIBlockID = $arOffersIBlock["OFFERS_IBLOCK_ID"]; $productProperty = 'PROPERTY_' . $arOffersIBlock['OFFERS_PROPERTY_ID']; $productPropertyValue = $productProperty . '_VALUE'; $arFilter = array("IBLOCK_ID" => $intOfferIBlockID, $productProperty => $arElementID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y"); if ($boolHideNotAvailable) { $arFilter['CATALOG_AVAILABLE'] = 'Y'; } if ($boolCheckPermissions) { $arFilter['CHECK_PERMISSIONS'] = "Y"; $arFilter['MIN_PERMISSION'] = "R"; } $arSelect = array("ID" => 1, "IBLOCK_ID" => 1, $productProperty => 1, "CATALOG_QUANTITY" => 1); foreach ($arPrices as $value) { if (!$value['CAN_VIEW'] && !$value['CAN_BUY']) { continue; } $arSelect[$value["SELECT"]] = 1; if ($showPriceCount !== false) { $arFilter['CATALOG_SHOP_QUANTITY_' . $value['ID']] = $showPriceCount; } } foreach ($arSelectFields as $code) { $arSelect[$code] = 1; } //mark to select if (!isset($arSelect['PREVIEW_PICTURE'])) { $arSelect['PREVIEW_PICTURE'] = 1; } if (!isset($arSelect['DETAIL_PICTURE'])) { $arSelect['DETAIL_PICTURE'] = 1; } $arOfferIDs = array(); $arMeasureMap = array(); $intKey = 0; $arOffersPerElement = array(); $arOffersLink = array(); $extPrices = array(); $rsOffers = CIBlockElement::GetList($arOrder, $arFilter, false, false, array_keys($arSelect)); while ($arOffer = $rsOffers->GetNext()) { $arOffer['ID'] = (int) $arOffer['ID']; $element_id = (int) $arOffer[$productPropertyValue]; //No more than limit offers per element if ($limit > 0) { $arOffersPerElement[$element_id]++; if ($arOffersPerElement[$element_id] > $limit) { continue; } } if ($element_id > 0) { $arOffer["LINK_ELEMENT_ID"] = $element_id; $arOffer["PROPERTIES"] = array(); $arOffer["DISPLAY_PROPERTIES"] = array(); $arOffer['CHECK_QUANTITY'] = 'Y' == $arOffer['CATALOG_QUANTITY_TRACE'] && 'N' == $arOffer['CATALOG_CAN_BUY_ZERO']; $arOffer['CATALOG_TYPE'] = CCatalogProduct::TYPE_OFFER; $arOffer['CATALOG_MEASURE_NAME'] = $arDefaultMeasure['SYMBOL_RUS']; $arOffer['~CATALOG_MEASURE_NAME'] = $arDefaultMeasure['SYMBOL_RUS']; $arOffer["CATALOG_MEASURE_RATIO"] = 1; if (!isset($arOffer['CATALOG_MEASURE'])) { $arOffer['CATALOG_MEASURE'] = 0; } $arOffer['CATALOG_MEASURE'] = (int) $arOffer['CATALOG_MEASURE']; if (0 > $arOffer['CATALOG_MEASURE']) { $arOffer['CATALOG_MEASURE'] = 0; } if (0 < $arOffer['CATALOG_MEASURE']) { if (!isset($arMeasureMap[$arOffer['CATALOG_MEASURE']])) { $arMeasureMap[$arOffer['CATALOG_MEASURE']] = array(); } $arMeasureMap[$arOffer['CATALOG_MEASURE']][] = $intKey; } $arOfferIDs[] = $arOffer['ID']; $arResult[$intKey] = $arOffer; if (!isset($arOffersLink[$arOffer['ID']])) { $arOffersLink[$arOffer['ID']] =& $arResult[$intKey]; } else { if (!isset($extPrices[$arOffer['ID']])) { $extPrices[$arOffer['ID']] = array(); } $extPrices[$arOffer['ID']][] =& $arResult[$intKey]; } $intKey++; } } if (!empty($arOfferIDs)) { $rsRatios = CCatalogMeasureRatio::getList(array(), array('@PRODUCT_ID' => $arOfferIDs), false, false, array('PRODUCT_ID', 'RATIO')); while ($arRatio = $rsRatios->Fetch()) { $arRatio['PRODUCT_ID'] = (int) $arRatio['PRODUCT_ID']; if (isset($arOffersLink[$arRatio['PRODUCT_ID']])) { $intRatio = (int) $arRatio['RATIO']; $dblRatio = (double) $arRatio['RATIO']; $mxRatio = $dblRatio > $intRatio ? $dblRatio : $intRatio; if (CATALOG_VALUE_EPSILON > abs($mxRatio)) { $mxRatio = 1; } elseif (0 > $mxRatio) { $mxRatio = 1; } $arOffersLink[$arRatio['PRODUCT_ID']]['CATALOG_MEASURE_RATIO'] = $mxRatio; } } if (!empty($arSelectProperties)) { CIBlockElement::GetPropertyValuesArray($arOffersLink, $intOfferIBlockID, $arFilter); foreach ($arResult as &$arOffer) { if (self::$needDiscountCache) { CCatalogDiscount::SetProductPropertiesCache($arOffer['ID'], $arOffer["PROPERTIES"]); } foreach ($arSelectProperties as $pid) { if (!isset($arOffer["PROPERTIES"][$pid])) { continue; } $prop =& $arOffer["PROPERTIES"][$pid]; $boolArr = is_array($prop["VALUE"]); if ($boolArr && !empty($prop["VALUE"]) || !$boolArr && strlen($prop["VALUE"]) > 0) { $arOffer["DISPLAY_PROPERTIES"][$pid] = CIBlockFormatProperties::GetDisplayValue($arOffer, $prop, "catalog_out"); } unset($prop); } } unset($arOffer); } if (!empty($extPrices)) { foreach ($extPrices as $origID => $prices) { foreach ($prices as $oneRow) { $oneRow['PROPERTIES'] = $arOffersLink[$origID]['PROPERTIES']; $oneRow['DISPLAY_PROPERTIES'] = $arOffersLink[$origID]['DISPLAY_PROPERTIES']; $oneRow['CATALOG_MEASURE_RATIO'] = $arOffersLink[$origID]['CATALOG_MEASURE_RATIO']; } } } if (self::$needDiscountCache) { CCatalogDiscount::SetProductSectionsCache($arOfferIDs); CCatalogDiscount::SetDiscountProductCache($arOfferIDs, array('IBLOCK_ID' => $intOfferIBlockID, 'GET_BY_ID' => 'Y')); } foreach ($arResult as &$arOffer) { $arOffer['CATALOG_QUANTITY'] = 0 < $arOffer['CATALOG_QUANTITY'] && is_float($arOffer['CATALOG_MEASURE_RATIO']) ? (double) $arOffer['CATALOG_QUANTITY'] : (int) $arOffer['CATALOG_QUANTITY']; $arOffer['MIN_PRICE'] = false; $arOffer["PRICES"] = CIBlockPriceTools::GetItemPrices($arOffersIBlock["OFFERS_IBLOCK_ID"], $arPrices, $arOffer, $vat_include, $arCurrencyParams, $USER_ID, $LID); if (!empty($arOffer["PRICES"])) { foreach ($arOffer['PRICES'] as &$arOnePrice) { if ($arOnePrice['MIN_PRICE'] == 'Y') { $arOffer['MIN_PRICE'] = $arOnePrice; break; } } unset($arOnePrice); } $arOffer["CAN_BUY"] = CIBlockPriceTools::CanBuy($arOffersIBlock["OFFERS_IBLOCK_ID"], $arPrices, $arOffer); } if (isset($arOffer)) { unset($arOffer); } } if (!empty($arMeasureMap)) { $rsMeasures = CCatalogMeasure::getList(array(), array('@ID' => array_keys($arMeasureMap)), false, false, array('ID', 'SYMBOL_RUS')); while ($arMeasure = $rsMeasures->GetNext()) { $arMeasure['ID'] = (int) $arMeasure['ID']; if (isset($arMeasureMap[$arMeasure['ID']]) && !empty($arMeasureMap[$arMeasure['ID']])) { foreach ($arMeasureMap[$arMeasure['ID']] as &$intOneKey) { $arResult[$intOneKey]['CATALOG_MEASURE_NAME'] = $arMeasure['SYMBOL_RUS']; $arResult[$intOneKey]['~CATALOG_MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; } unset($intOneKey); } } } } return $arResult; }
$arParams['CURRENCY_ID'] = $arCurrencyInfo['CURRENCY']; $arConvertParams['CURRENCY_ID'] = $arCurrencyInfo['CURRENCY']; } } } $bCatalog = CModule::IncludeModule('catalog'); foreach ($arResult["SET_ITEMS"] as $key => $setItem) { if ($arParams["USE_PRICE_COUNT"]) { if ($bCatalog) { $arResult["SET_ITEMS"][$key]["PRICE_MATRIX"] = CatalogGetPriceTableEx($arResult["SET_ITEMS"][$key]["ID"], 0, $arPriceTypeID, 'Y', $arConvertParams); foreach ($arResult["SET_ITEMS"][$key]["PRICE_MATRIX"]["COLS"] as $keyColumn => $arColumn) { $arResult["SET_ITEMS"][$key]["PRICE_MATRIX"]["COLS"][$keyColumn]["NAME_LANG"] = htmlspecialcharsbx($arColumn["NAME_LANG"]); } } } else { $arResult["SET_ITEMS"][$key]["PRICES"] = CIBlockPriceTools::GetItemPrices($arParams["IBLOCK_ID"], $arResultPrices, $arResult["SET_ITEMS"][$key], $arParams['PRICE_VAT_INCLUDE'], $arConvertParams); if (!empty($arResult["SET_ITEMS"][$key]["PRICES"])) { foreach ($arResult["SET_ITEMS"][$key]['PRICES'] as &$arOnePrice) { if ('Y' == $arOnePrice['MIN_PRICE']) { $arResult["SET_ITEMS"][$key]['MIN_PRICE'] = $arOnePrice; break; } } unset($arOnePrice); } } if ($arParams["SHOW_MEASURE"] == "Y" && $setItem["CATALOG_MEASURE"]) { $arResult["SET_ITEMS"][$key]["MEASURE"] = CCatalogMeasure::getList(array(), array("ID" => $setItem["CATALOG_MEASURE"]), false, false, array())->GetNext(); } } }
public static function bx_format_price($price_codes, $arItem) { $arCatalogPrices = \CIBlockPriceTools::GetCatalogPrices($arItem['IBLOCK_ID'], $price_codes); return \CIBlockPriceTools::GetItemPrices($arItem['IBLOCK_ID'], $arCatalogPrices, $arItem); }
if (strlen($arParams["SECTION_URL"]) > 0) { $arPath["SECTION_PAGE_URL"] = htmlspecialchars(str_replace(array("#SERVER_NAME#", "#SITE_DIR#", "#IBLOCK_ID#", "#SECTION_ID#"), array(SITE_SERVER_NAME, SITE_DIR, $arPath["IBLOCK_ID"], $arPath["ID"]), $arParams["SECTION_URL"])); } $arResult["SECTION"]["PATH"][] = $arPath; } } if ($arParams["USE_PRICE_COUNT"]) { if (CModule::IncludeModule("catalog")) { $arResult["PRICE_MATRIX"] = CatalogGetPriceTableEx($arResult["ID"]); } else { $arResult["PRICE_MATRIX"] = false; } $arResult["PRICES"] = array(); } else { $arResult["PRICE_MATRIX"] = false; $arResult["PRICES"] = CIBlockPriceTools::GetItemPrices($arParams["IBLOCK_ID"], $arResult["CAT_PRICES"], $arResult); } $arResult["CAN_BUY"] = CIBlockPriceTools::CanBuy($arParams["IBLOCK_ID"], $arResult["PRICES"], $arResult); $arResult["BUY_URL"] = htmlspecialchars($APPLICATION->GetCurPageParam($arParams["ACTION_VARIABLE"] . "=BUY&" . $arParams["PRODUCT_ID_VARIABLE"] . "=" . $arResult["ID"], array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"]))); $arResult["ADD_URL"] = htmlspecialchars($APPLICATION->GetCurPageParam($arParams["ACTION_VARIABLE"] . "=ADD2BASKET&" . $arParams["PRODUCT_ID_VARIABLE"] . "=" . $arResult["ID"], array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"]))); $arResult["LINK_URL"] = str_replace(array("#ELEMENT_ID#", "#SECTION_ID#"), array($arResult["ID"], $arResult["SECTION"]["ID"]), $arParams["LINK_ELEMENTS_URL"]); $this->IncludeComponentTemplate(); } else { $this->AbortResultCache(); ShowError(GetMessage("CATALOG_ELEMENT_NOT_FOUND")); @define("ERROR_404", "Y"); } } else { $this->AbortResultCache(); ShowError(GetMessage("CATALOG_ELEMENT_NOT_FOUND")); @define("ERROR_404", "Y");