static function GetProductSkuProps($ID, $IBLOCK_ID = '', $getExt = false) { $getExt = $getExt === true; $arSkuProps = array(); $ID = (int) $ID; $IBLOCK_ID = (int) $IBLOCK_ID; if ($ID > 0 && \Bitrix\Main\Loader::includeModule('catalog')) { $filter = array('ID' => $ID, 'ACTIVE' => 'Y'); if ($IBLOCK_ID > 0) { $filter['IBLOCK_ID'] = $IBLOCK_ID; } $res = CIBlockElement::GetList(array(), $filter, false, false, array("ID", "IBLOCK_ID")); $arElement = $res->Fetch(); if ($arElement) { $arElement['ID'] = (int) $arElement['ID']; $arParent = CCatalogSku::GetProductInfo($ID, $arElement["IBLOCK_ID"]); if ($arParent) { $arElement['PROPERTIES'] = array(); $arElementLink = array($arElement['ID'] => &$arElement); $arFilter = array('ID' => $arElement['ID'], 'IBLOCK_ID' => $arElement["IBLOCK_ID"]); CIBlockElement::GetPropertyValuesArray($arElementLink, $arElement["IBLOCK_ID"], $arFilter); if (!empty($arElement['PROPERTIES'])) { foreach ($arElement['PROPERTIES'] as &$prop) { if ($prop['XML_ID'] == 'CML2_LINK' || $prop['PROPERTY_TYPE'] == 'F') { continue; } $boolArr = is_array($prop["VALUE"]); if ($boolArr && !empty($prop["VALUE"]) || !$boolArr && strlen($prop["VALUE"]) > 0) { $displayProperty = CIBlockFormatProperties::GetDisplayValue($arElement, $prop, ''); $mxValues = ''; if ('E' == $prop['PROPERTY_TYPE']) { if (!empty($displayProperty['LINK_ELEMENT_VALUE'])) { $mxValues = array(); foreach ($displayProperty['LINK_ELEMENT_VALUE'] as $arTempo) { $mxValues[] = $arTempo['NAME'] . ' [' . $arTempo['ID'] . ']'; } } } elseif ('G' == $prop['PROPERTY_TYPE']) { if (!empty($displayProperty['LINK_SECTION_VALUE'])) { $mxValues = array(); foreach ($displayProperty['LINK_SECTION_VALUE'] as $arTempo) { $mxValues[] = $arTempo['NAME'] . ' [' . $arTempo['ID'] . ']'; } } } if (empty($mxValues)) { $mxValues = $displayProperty["DISPLAY_VALUE"]; } if ($getExt) { $arSkuProps[$prop["ID"]] = array('ID' => $prop["ID"], 'CODE' => $prop['CODE'], 'NAME' => $prop["NAME"], 'VALUE' => strip_tags(is_array($mxValues) ? implode("/ ", $mxValues) : $mxValues)); } else { $arSkuProps[$prop["NAME"]] = strip_tags(is_array($mxValues) ? implode("/ ", $mxValues) : $mxValues); } } } unset($prop); } } } } return $arSkuProps; }
public static function getTabs($iblockElementInfo) { $showTab = false; $request = Context::getCurrent()->getRequest(); if ($iblockElementInfo["ID"] > 0 && (!isset($request['action']) || $request['action'] != 'copy')) { $showTab = true; if (Loader::includeModule('catalog')) { /* $dbRes = CatalogIblockTable::getList(array( 'filter' => array( '=IBLOCK_ID' => $iblockElementInfo["IBLOCK"]["ID"], '!PRODUCT_IBLOCK_ID' => 0 ), 'select' => array('IBLOCK_ID'), )); if($dbRes->fetch()) { $showTab = false; } */ if (\CCatalogSku::getInfoByOfferIBlock($iblockElementInfo["IBLOCK"]["ID"]) !== false) { $showTab = false; } } } return $showTab ? array(array("DIV" => "seo_adv", "SORT" => 4, "TAB" => Loc::getMessage("SEO_ADV_TAB"), "TITLE" => Loc::getMessage("SEO_ADV_TAB_TITLE"))) : null; }
static function GetProductSkuProps($ID, $IBLOCK_ID = '') { $arSkuProps = array(); if (CModule::IncludeModule('iblock') && CModule::IncludeModule('catalog')) { if (IntVal($IBLOCK_ID) <= 0) { $res = CIBlockElement::GetList(array(), array("ID" => $ID), false, false, array("IBLOCK_ID")); $arElement = $res->Fetch(); $IBLOCK_ID = $arElement["IBLOCK_ID"]; } $arOfferProperties = array(); $arOfferPropsValue = array(); $arFilter = array("ID" => $ID, "IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"); $arSelect = array("ID" => 1, "IBLOCK_ID" => 1); $arParent = CCatalogSku::GetProductInfo($ID); if ($arParent) { if (!is_array($arOfferProperties[$IBLOCK_ID]) || count($arOfferProperties[$IBLOCK_ID]) <= 0) { $dbOfferProperties = CIBlock::GetProperties($IBLOCK_ID, array(), array("!XML_ID" => "CML2_LINK")); while ($arTmp = $dbOfferProperties->Fetch()) { $arOfferProperties[$IBLOCK_ID][] = $arTmp; $arSelect["PROPERTY_" . $arTmp["CODE"]] = 1; } } $rsOffers = CIBlockElement::GetList(array("SORT" => "ASC"), $arFilter, false, false, array_keys($arSelect)); while ($obOffer = $rsOffers->GetNextElement()) { $arOfferPropsValue[$ID] = $obOffer->fields; } if (is_array($arOfferProperties[$IBLOCK_ID]) && count($arOfferProperties[$IBLOCK_ID]) > 0) { foreach ($arOfferProperties[$IBLOCK_ID] as $val) { $arSkuProps[$val["NAME"]] = $arOfferPropsValue[$ID]["PROPERTY_" . $val["CODE"] . "_VALUE"]; } } } } return $arSkuProps; }
static function productView($arResult, $user_id = false) { if ($arResult["ID"] != "") { $arResult["PRODUCT_ID"] = $arResult["ID"]; } if (class_exists("DataManager")) { return false; } if (self::contains($_SERVER["HTTP_USER_AGENT"], "facebook.com")) { return; } $api_key = COption::GetOptionString(self::$MODULE_ID, "tracker_code", ''); if (!$api_key) { return; } global $APPLICATION; global $USER; $visitor_uid = false; if (!$user_id) { $user_id = $USER->GetID(); } $visitor_info = false; if ($user_id && ($visitor_info = self::getVisitorInfo($user_id))) { $visitor_uid = (int) $user_id; } $guest_uid = self::getUid($visitor_uid); $tracker = new ConveadTracker($api_key, SITE_SERVER_NAME, $guest_uid, $visitor_uid, $visitor_info, false, SITE_SERVER_NAME); $arProduct = CCatalogProduct::GetByIDEx($arResult["PRODUCT_ID"]); if ($arProduct && strpos($APPLICATION->GetCurPage(), $arProduct["DETAIL_PAGE_URL"]) !== false) { if (CCatalogSku::IsExistOffers($arResult["PRODUCT_ID"])) { $arOffers = CIBlockPriceTools::GetOffersArray(array("IBLOCK_ID" => $arProduct["IBLOCK_ID"]), array($arResult["PRODUCT_ID"]), array(), array("ID", "ACTIVE")); foreach ($arOffers as $array) { if ($array["ACTIVE"] == "Y") { $arResult["PRODUCT_ID"] = $array["ID"]; break; } } } $_SESSION["CONVEAD_PRODUCT_ID"] = $arResult["PRODUCT_ID"]; $_SESSION["CONVEAD_PRODUCT_NAME"] = str_replace("'", ''', $arProduct["NAME"]); $_SESSION["CONVEAD_PRODUCT_URL"] = "http://" . SITE_SERVER_NAME . $arProduct["DETAIL_PAGE_URL"]; $product_id = $arResult["PRODUCT_ID"]; $product_name = $arProduct["NAME"]; $product_url = "http://" . SITE_SERVER_NAME . $arProduct["DETAIL_PAGE_URL"]; if ($_SESSION["LAST_VIEW_ID"] == $arResult["PRODUCT_ID"]) { return false; } else { $_SESSION["LAST_VIEW_ID"] = $arResult["PRODUCT_ID"]; return true; } //$result = $tracker->eventProductView($product_id, $product_name, $product_url); return true; } }
static function GetProductSkuProps($ID, $IBLOCK_ID = '') { $arSkuProps = array(); if (CModule::IncludeModule('iblock') && CModule::IncludeModule('catalog')) { $res = CIBlockElement::GetList( array(), array( "ID" => $ID, "ACTIVE" => "Y", ), false, false, array( "ID", "IBLOCK_ID", ) ); $arElement = $res->Fetch(); if ($arElement) { $IBLOCK_ID = $arElement["IBLOCK_ID"]; $arParent = CCatalogSku::GetProductInfo($ID); if ($arParent) { $rsOffers = CIBlockElement::GetProperty( $IBLOCK_ID, $ID ); while ($arOffer = $rsOffers->GetNext()) { if ($arOffer["XML_ID"] != "CML2_LINK") { if ($arOffer["PROPERTY_TYPE"] == "L") $arSkuProps[$arOffer["NAME"]] = $arOffer["VALUE_ENUM"]; else $arSkuProps[$arOffer["NAME"]] = $arOffer["VALUE"]; } } } } } return $arSkuProps; }
public static function canCreateSetByProduct($intProductID, $intSetType) { $intProductID = (int) $intProductID; if ($intProductID <= 0) { return false; } if (self::isProductInSet($intProductID, $intSetType)) { return false; } if (CCatalogSku::IsExistOffers($intProductID)) { return false; } return true; }
<?php CModule::includeModule('catalog'); CModule::includeModule('iblock'); CModule::includeModule('sale'); $dbBasketItems = CSaleBasket::GetList(array(), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "DELAY" => 'Y', "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, array("ID", "PRODUCT_ID")); while ($arItems = $dbBasketItems->Fetch()) { $mxResult = CCatalogSku::GetProductInfo($arItems['PRODUCT_ID']); if (is_array($mxResult)) { $id = $mxResult['ID']; } else { $id = $arItems['PRODUCT_ID']; } $GLOBALS['wished']['ID'][] = $id; }
/** * Get common data from cache. * @return mixed[] */ protected function getReferences() { $this->arParams['CACHE_GROUPS'] = isset($this->arParams['CACHE_GROUPS']) && $this->arParams['CACHE_GROUPS'] == 'N' ? 'N' : 'Y'; $obCache = new CPHPCache(); if ($this->arParams['CACHE_GROUPS'] == 'Y') { $userGroups = implode(",", Main\UserTable::getUserGroupIds($this->getUserId())); $cacheId = implode("-", array(__CLASS__, $this->getLanguageId(), $this->getSiteId(), $userGroups)); } else { $cacheId = implode("-", array(__CLASS__, $this->getLanguageId(), $this->getSiteId())); } $cached = array(); if ($obCache->StartDataCache($this->arParams["CACHE_TIME"], $cacheId, $this->getSiteId() . '/' . $this->getRelativePath() . '/reference')) { // Catalog Groups $cached['CATALOG_GROUP'] = array(); $catalogGroupIterator = CCatalogGroup::GetList(array("SORT" => "ASC")); while ($catalogGroup = $catalogGroupIterator->fetch()) { $cached['CATALOG_GROUP'][$catalogGroup['NAME']] = $catalogGroup; } // Catalog Prices $cached['CATALOG_PRICE'] = CIBlockPriceTools::GetCatalogPrices(false, array_keys($cached['CATALOG_GROUP'])); // Catalog Currency $cached['CURRENCY'] = array(); if ($this->isCurrency) { $by = "currency"; $order = "asc"; $currencyIterator = CCurrency::getList($by, $order); while ($currency = $currencyIterator->fetch()) { $cached['CURRENCY'][$currency['CURRENCY']] = $currency; } } // Catalogs list $cached['CATALOG'] = array(); $catalogIterator = CCatalog::getList(array("IBLOCK_ID" => "ASC")); while ($catalog = $catalogIterator->fetch()) { $info = CCatalogSku::getInfoByIblock($catalog['IBLOCK_ID']); $catalog['CATALOG_TYPE'] = $info['CATALOG_TYPE']; $cached['CATALOG'][$catalog['IBLOCK_ID']] = $catalog; } // Measure list $cached['MEASURE'] = array(); $measureIterator = CCatalogMeasure::getList(array("CODE" => "ASC")); while ($measure = $measureIterator->fetch()) { $cached['MEASURE'][$measure['ID']] = $measure; } // Default Measure $cached['DEFAULT_MEASURE'] = CCatalogMeasure::getDefaultMeasure(true, true); $additionalCache = $this->getAdditionalRefereneces(); if (!empty($additionalCache) && is_array($additionalCache)) { foreach ($additionalCache as $cacheKey => $cacheData) { $cached[$cacheKey] = $cacheData; } unset($cacheKey, $cacheData); } unset($additionalCache); $obCache->EndDataCache($cached); } else { $cached = $obCache->GetVars(); } return $cached; }
} } foreach ($arResult["ITEMS"]["nAnCanBuy"] as $key => $val) { if ($arResult["ITEMS_IMG"][$val["ID"]]) { $arResult["ITEMS"]["nAnCanBuy"][$key]["DETAIL_PICTURE"] = $arResult["ITEMS_IMG"][$val["ID"]]; } if ($productId = CCatalogSku::GetProductInfo($val["PRODUCT_ID"])) { $arElementsID[] = $productId["ID"]; $arProductsToElements[$productId["ID"]][] = $val["PRODUCT_ID"]; } } foreach ($arResult["ITEMS"]["ProdSubscribe"] as $key => $val) { if ($arResult["ITEMS_IMG"][$val["ID"]]) { $arResult["ITEMS"]["ProdSubscribe"][$key]["DETAIL_PICTURE"] = $arResult["ITEMS_IMG"][$val["ID"]]; } if ($productId = CCatalogSku::GetProductInfo($val["PRODUCT_ID"])) { $arElementsID[] = $productId["ID"]; $arProductsToElements[$productId["ID"]][] = $val["PRODUCT_ID"]; } } $arElementsID = array_unique($arElementsID); $db_res = CIBlockElement::GetList(array("SORT" => "ASC"), array("ID" => $arElementsID), false, false, array("ID", "IBLOCK_ID", "DETAIL_PAGE_URL", "DETAIL_PICTURE", "PREVIEW_PICTURE")); while ($arElement = $db_res->GetNext()) { foreach ($arResult["ITEMS"]["AnDelCanBuy"] as $key => $val) { if ($arProductsToElements && in_array($val["PRODUCT_ID"], $arProductsToElements[$arElement["ID"]])) { $arResult["ITEMS"]["AnDelCanBuy"][$key]["DETAIL_PAGE_URL"] = $arElement["DETAIL_PAGE_URL"]; if (!$arResult["ITEMS"]["AnDelCanBuy"][$key]["DETAIL_PICTURE"]["SRC"]) { if (!$arResult["ITEMS"]["AnDelCanBuy"][$key]["PREVIEW_PICTURE"]["SRC"]) { $img = array(); if ($arElement["DETAIL_PICTURE"]) { $img = CFile::ResizeImageGet($arElement["DETAIL_PICTURE"], array("width" => "60", "height" => "60"));
function getProductDataToFillBasket($productId, $quantity, $userId, $LID, $userColumns, $tmpId = "") { if (!\Bitrix\Main\Loader::includeModule("catalog")) return array(); $arParams = array(); $productId = (int)$productId; if ($productId <= 0) { return $arParams; } $iblockId = (int)CIBlockElement::GetIBlockByID($productId); if ($iblockId <= 0) { return $arParams; } $arSku2Parent = array(); $arElementId = array(); $arElementId[] = $productId; $arParent = CCatalogSku::GetProductInfo($productId, $iblockId); if ($arParent) { $arElementId[] = $arParent["ID"]; $arSku2Parent[$productId] = $arParent["ID"]; } $arPropertyInfo = array(); $userColumns = (string)$userColumns; $arUserColumns = ($userColumns != '') ? explode(",", $userColumns) : array(); foreach ($arUserColumns as $key => $column) { if (strncmp($column, 'PROPERTY_', 9) != 0) { unset($arUserColumns[$key]); } else { $propertyCode = substr($column, 9); if ($propertyCode == '') { unset($arUserColumns[$key]); continue; } $dbres = CIBlockProperty::GetList(array(), array("CODE" => $propertyCode)); if ($arPropData = $dbres->GetNext()) $arPropertyInfo[$column] = $arPropData; } } $arSelect = array_merge( array("ID", "NAME", "LID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "DETAIL_PICTURE", "PREVIEW_PICTURE", "DETAIL_PAGE_URL", "XML_ID", "IBLOCK_XML_ID"), $arUserColumns ); $arProductData = getProductProps($arElementId, $arSelect); $defaultMeasure = CCatalogMeasure::getDefaultMeasure(true, true); if (!empty($arProductData)) { $arElementInfo = array(); foreach ($arProductData as $elemId => &$arElement) { foreach ($arElement as $key => $value) { if (strncmp($key, 'PROPERTY_', 9) == 0 && substr($key, -6) == "_VALUE") { $columnCode = str_replace("_VALUE", "", $key); $arElement[$key] = getIblockPropInfo($value, $arPropertyInfo[$columnCode], array("WIDTH" => 90, "HEIGHT" => 90)); } } } unset($arElement); if (isset($arProductData[$productId])) $arElementInfo = $arProductData[$productId]; if (isset( $arSku2Parent[$productId])) $arParent = $arProductData[$arSku2Parent[$productId]]; if (!empty($arSku2Parent)) // if sku element doesn't have value of some property - we'll show parent element value instead { foreach ($arUserColumns as $field) { $fieldVal = $field."_VALUE"; $parentId = $arSku2Parent[$productId]; if ((!isset($arElementInfo[$fieldVal]) || (isset($arElementInfo[$fieldVal]) && strlen($arElementInfo[$fieldVal]) == 0)) && (isset($arProductData[$parentId][$fieldVal]) && !empty($arProductData[$parentId][$fieldVal]))) // can be array or string { $arElementInfo[$fieldVal] = $arProductData[$parentId][$fieldVal]; } } if (strpos($arElementInfo["~XML_ID"], '#') === false) { $arElementInfo["~XML_ID"] = $arParent['~XML_ID'].'#'.$arElementInfo["~XML_ID"]; } } $arElementInfo["MODULE"] = "catalog"; $arElementInfo["PRODUCT_PROVIDER_CLASS"] = "CCatalogProductProvider"; $arElementInfo["PRODUCT_ID"] = $arElementInfo["ID"]; if ($arElementInfo["IBLOCK_ID"] > 0) { $arElementInfo["EDIT_PAGE_URL"] = CIBlock::GetAdminElementEditLink($arElementInfo["IBLOCK_ID"], $arElementInfo["PRODUCT_ID"], array( "find_section_section" => $arElementInfo["IBLOCK_SECTION_ID"], 'WF' => 'Y', )); } $arBuyerGroups = CUser::GetUserGroup($userId); // price $arPrice = CCatalogProduct::GetOptimalPrice($arElementInfo["ID"], 1, $arBuyerGroups, "N", array(), $LID); $currentPrice = $arPrice["DISCOUNT_PRICE"]; $arElementInfo["PRICE"] = $currentPrice; $arElementInfo["CURRENCY"] = $arPrice["PRICE"]["CURRENCY"]; $arElementInfo["DISCOUNT_PRICE"] = $arPrice["PRICE"]["PRICE"] - $arPrice["DISCOUNT_PRICE"]; $currentTotalPrice = ($arElementInfo["PRICE"] + $arElementInfo["DISCOUNT_PRICE"]); $discountPercent = 0; if ($arElementInfo["DISCOUNT_PRICE"] > 0) $discountPercent = intval(($arElementInfo["DISCOUNT_PRICE"] * 100) / $currentTotalPrice); $rsProducts = CCatalogProduct::GetList( array(), array('ID' => $productId), false, false, array('ID', 'QUANTITY', 'WEIGHT', 'MEASURE', 'TYPE', 'BARCODE_MULTI') ); if (!($arProduct = $rsProducts->Fetch())) { return array(); } $balance = floatval($arProduct["QUANTITY"]); // sku props $arSkuData = array(); $arProps[] = array( "NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $arElementInfo['~IBLOCK_XML_ID'] ); $arSkuProperty = CSaleProduct::GetProductSkuProps($productId, '', true); if (!empty($arSkuProperty)) { foreach ($arSkuProperty as &$val) { $arSkuData[] = array( 'NAME' => $val['NAME'], 'VALUE' => $val['VALUE'], 'CODE' => $val['CODE'] ); } unset($val); } $arSkuData[] = array( "NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arElementInfo["~XML_ID"] ); // currency $arCurFormat = CCurrencyLang::GetCurrencyFormat($arElementInfo["CURRENCY"]); $priceValutaFormat = str_replace("#", "", $arCurFormat["FORMAT_STRING"]); $arElementInfo["WEIGHT"] = $arProduct["WEIGHT"]; // measure $arElementInfo["MEASURE_TEXT"] = ""; if ((int)$arProduct["MEASURE"] > 0) { $dbMeasure = CCatalogMeasure::GetList(array(), array("ID" => intval($arProduct["MEASURE"])), false, false, array("ID", "SYMBOL_RUS", "SYMBOL_INTL")); if ($arMeasure = $dbMeasure->Fetch()) $arElementInfo["MEASURE_TEXT"] = ($arMeasure["SYMBOL_RUS"] != '' ? $arMeasure["SYMBOL_RUS"] : $arMeasure["SYMBOL_INTL"]); } if ($arElementInfo["MEASURE_TEXT"] == '') { $arElementInfo["MEASURE_TEXT"] = ($defaultMeasure["SYMBOL_RUS"] != '' ? $defaultMeasure["SYMBOL_RUS"] : $defaultMeasure["SYMBOL_INTL"]); } // ratio $arElementInfo["RATIO"] = 1; $dbratio = CCatalogMeasureRatio::GetList(array(), array("PRODUCT_ID" => $productId)); if ($arRatio = $dbratio->Fetch()) $arElementInfo["RATIO"] = $arRatio["RATIO"]; // image if ($arElementInfo["PREVIEW_PICTURE"] > 0) $imgCode = $arElementInfo["PREVIEW_PICTURE"]; elseif ($arElementInfo["DETAIL_PICTURE"] > 0) $imgCode = $arElementInfo["DETAIL_PICTURE"]; if ($imgCode == "" && count($arParent) > 0) { if ($arParent["PREVIEW_PICTURE"] > 0) $imgCode = $arParent["PREVIEW_PICTURE"]; elseif ($arParent["DETAIL_PICTURE"] > 0) $imgCode = $arParent["DETAIL_PICTURE"]; } if ($imgCode > 0) { $arFile = CFile::GetFileArray($imgCode); $arImgProduct = CFile::ResizeImageGet($arFile, array('width'=>80, 'height'=>80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); if (is_array($arImgProduct)) $imgUrl = $arImgProduct["src"]; } $arSetInfo = array(); $arStores = array(); /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider(array("MODULE" => $arElementInfo["MODULE"], "PRODUCT_PROVIDER_CLASS" => $arElementInfo["PRODUCT_PROVIDER_CLASS"]))) { // get set items if it is set if ($arProduct["TYPE"] == CCatalogProduct::TYPE_SET) { if (method_exists($productProvider, "GetSetItems")) { $arSets = $productProvider::GetSetItems($productId, CSaleBasket::TYPE_SET); if ($tmpId == "") $tmpId = randString(7); if (!empty($arSets)) { foreach ($arSets as $arSetData) { foreach ($arSetData["ITEMS"] as $setItem) { $arSetItemParams = getProductDataToFillBasket($setItem["PRODUCT_ID"], $setItem["QUANTITY"], $userId, $LID, $userColumns, $tmpId); // recursive call // re-define some fields with set data values $arSetItemParams["id"] = $setItem["PRODUCT_ID"]; $arSetItemParams["name"] = $setItem["NAME"]; $arSetItemParams["module"] = $setItem["MODULE"]; $arSetItemParams["productProviderClass"] = $setItem["PRODUCT_PROVIDER_CLASS"]; $arSetItemParams["url"] = $setItem["DETAIL_PAGE_URL"]; $arSetItemParams["quantity"] = $setItem["QUANTITY"] * $quantity; $arSetItemParams["barcodeMulti"] = $setItem["BARCODE_MULTI"]; $arSetItemParams["productType"] = $setItem["TYPE"]; $arSetItemParams["weight"] = $setItem["WEIGHT"]; $arSetItemParams["vatRate"] = $setItem["VAT_RATE"]; $arSetItemParams["setItems"] = ""; $arSetItemParams["setParentId"] = $productId."_tmp".$tmpId; $arSetItemParams["isSetItem"] = "Y"; $arSetItemParams["isSetParent"] = "N"; $arSetInfo[] = $arSetItemParams; } } } } } // get stores $storeCount = $productProvider::GetStoresCount(array("SITE_ID" => $LID)); // with exact SITE_ID or SITE_ID = NULL if ($storeCount > 0) { if ($arProductStore = $productProvider::GetProductStores(array("PRODUCT_ID" => $productId, "SITE_ID" => $LID))) $arStores = $arProductStore; } } $currentTotalPrice = (float)$currentTotalPrice; // params array $arParams["id"] = $productId; $arParams["name"] = $arElementInfo["~NAME"]; $arParams["url"] = htmlspecialcharsex($arElementInfo["~DETAIL_PAGE_URL"]); $arParams["urlEdit"] = $arElementInfo["EDIT_PAGE_URL"]; $arParams["urlImg"] = $imgUrl; $arParams["price"] = floatval($arElementInfo["PRICE"]); $arParams["priceBase"] = $currentTotalPrice; $arParams["priceBaseFormat"] = CCurrencyLang::CurrencyFormat($currentTotalPrice, $arElementInfo["CURRENCY"], false); $arParams["priceFormated"] = CCurrencyLang::CurrencyFormat(floatval($arElementInfo["PRICE"]), $arElementInfo["CURRENCY"], false); $arParams["valutaFormat"] = $priceValutaFormat; $arParams["dimensions"] = serialize(array("WIDTH" => $arElementInfo["WIDTH"], "HEIGHT" => $arElementInfo["HEIGHT"], "LENGTH" => $arElementInfo["LENGTH"])); $arParams["priceDiscount"] = floatval($arElementInfo["DISCOUNT_PRICE"]); $arParams["priceTotalFormated"] = CCurrencyLang::CurrencyFormat($currentTotalPrice, $arElementInfo["CURRENCY"], true); $arParams["discountPercent"] = $discountPercent; $arParams["summaFormated"] = CCurrencyLang::CurrencyFormat($arElementInfo["PRICE"], $arElementInfo["CURRENCY"], false); $arParams["quantity"] = $quantity; $arParams["module"] = $arElementInfo["MODULE"]; $arParams["currency"] = $arElementInfo["CURRENCY"]; $arParams["weight"] = $arElementInfo["WEIGHT"]; $arParams["vatRate"] = $arPrice["PRICE"]["VAT_RATE"]; $arParams["priceType"] = $arPrice["PRICE"]["CATALOG_GROUP_NAME"]; $arParams["balance"] = $balance; $arParams["notes"] = (is_array($arPrice["PRICE"]) && array_key_exists("CATALOG_GROUP_NAME", $arPrice["PRICE"])) ? $arPrice["PRICE"]["CATALOG_GROUP_NAME"] : ""; $arParams["catalogXmlID"] = $arElementInfo["~IBLOCK_XML_ID"]; $arParams["productXmlID"] = $arElementInfo["~XML_ID"]; $arParams["callback"] = ""; $arParams["orderCallback"] = ""; $arParams["cancelCallback"] = ""; $arParams["payCallback"] = ""; $arParams["productProviderClass"] = $arElementInfo["PRODUCT_PROVIDER_CLASS"]; $arParams["skuProps"] = $arSkuData; $arParams["measureText"] = $arElementInfo["MEASURE_TEXT"]; $arParams["ratio"] = $arElementInfo["RATIO"]; $arParams["barcodeMulti"] = $arProduct["BARCODE_MULTI"]; $arParams["productType"] = empty($arSetInfo) ? "" : CSaleBasket::TYPE_SET; $arParams["setParentId"] = empty($arSetInfo) ? "" : $productId."_tmp".$tmpId; $arParams["setItems"] = $arSetInfo; $arParams["isSetItem"] = "N"; $arParams["isSetParent"] = empty($arSetInfo) ? "N" : "Y"; $arParams["stores"] = empty($arSetInfo) ? $arStores : array(); $arParams["productPropsValues"] = $arElementInfo; // along with other information also contains values of properties with correct keys (after getProductProps) } return $arParams; }
} } if ($bErrorField) { $arResult["ERROR"][] = GetMessage("SOA_ERROR_REQUIRE") . " \"" . $arOrderProps["NAME"] . "\""; } //}//end isset } //end while } /* Check Values End */ // get properties for iblock elements and their parents (if any) $arSelect = array_merge(array("ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "PREVIEW_TEXT"), $arCustomSelectFields); $arProductData = getProductProps($arElementId, $arSelect); foreach ($arResult["BASKET_ITEMS"] as &$arResultItem) { $productId = $arResultItem["PRODUCT_ID"]; $arParent = CCatalogSku::GetProductInfo($productId); if (intval($arProductData[$productId]["PREVIEW_PICTURE"]) <= 0 && intval($arProductData[$productId]["DETAIL_PICTURE"]) <= 0 && $arParent) { $productId = $arParent["ID"]; } if (intval($arProductData[$productId]["PREVIEW_PICTURE"]) > 0) { $arResultItem["PREVIEW_PICTURE"] = $arProductData[$productId]["PREVIEW_PICTURE"]; } if (intval($arProductData[$productId]["DETAIL_PICTURE"]) > 0) { $arResultItem["DETAIL_PICTURE"] = $arProductData[$productId]["DETAIL_PICTURE"]; } if (strlen($arProductData[$productId]["PREVIEW_TEXT"]) > 0) { $arResultItem["PREVIEW_TEXT"] = $arProductData[$productId]["PREVIEW_TEXT"]; } foreach ($arProductData[$arResultItem["PRODUCT_ID"]] as $key => $value) { if (strpos($key, "PROPERTY_") !== false) { $arResultItem[$key] = $value;
echo "window.onload = function () {"; echo "fUserGetProfile(BX(\"user_id\"));\n"; if (CModule::IncludeModule('catalog') && CModule::IncludeModule('iblock') && isset($_GET["product"]) && count($_GET["product"]) > 0) { $bXmlId = COption::GetOptionString("sale", "show_order_product_xml_id", "N"); $arProductId = array(); $arBuyerGroups = CUser::GetUserGroup($str_USER_ID); $arGetProduct = array(); $arSkuParentChildren = array(); $arSkuParentId = array(); $arSkuParent = array(); foreach ($_GET["product"] as $key => $val) { $key = IntVal($key); if ($key > 0) { $arProductId[] = $key; $arGetProduct[$key] = floatval($val) > 0 ? floatval($val) : 1; $arParent = CCatalogSku::GetProductInfo($key); if ($arParent) { $arSkuParentChildren[$key] = $arParent["ID"]; $arSkuParentId[$arParent["ID"]] = $arParent["ID"]; } } } $res = CIBlockElement::GetList(array(), array("ID" => $arSkuParentId), false, false, array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "NAME", "DETAIL_PAGE_URL")); while ($arItems = $res->GetNext()) { $arSkuParent[$arItems["ID"]] = $arItems; } $arOrder["SORT"] = "ASC"; if (count($arGetProduct) > 0) { $res = CIBlockElement::GetList(array(), array("ID" => $arProductId), false, false, array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "NAME", "DETAIL_PAGE_URL")); while ($arItems = $res->GetNext()) { $productImg = "";
function CalculateAffiliate($affiliate, $dateFrom = false, $dateTo = false, $datePlanFrom = false, $datePlanTo = false) { global $DB; // Prepare function params - affiliate $arAffiliate = CSaleAffiliate::CheckAffiliateFunc($affiliate); if (!$arAffiliate) { return False; } $db_events = GetModuleEvents("sale", "OnBeforeAffiliateCalculate"); while ($arEvent = $db_events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array(&$arAffiliate, &$dateFrom, &$dateTo, &$datePlanFrom, &$datePlanTo)) === false) { return false; } } $affiliateID = IntVal($arAffiliate["ID"]); if (!$dateFrom || StrLen($dateFrom) <= 0) { if (StrLen($arAffiliate["LAST_CALCULATE"]) > 0) { $dateFrom = $arAffiliate["LAST_CALCULATE"]; } else { $dateFrom = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), mktime(0, 0, 0, 1, 1, 1990)); } } if (!$dateTo || StrLen($dateTo) <= 0) { $dateTo = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time() + CTimeZone::GetOffset()); } // Get affiliate plan $arAffiliatePlan = CSaleAffiliate::SetAffiliatePlan($arAffiliate, $datePlanFrom, $datePlanTo); if (!$arAffiliatePlan) { return False; } if ($arAffiliatePlan && !is_array($arAffiliatePlan)) { return true; } // Get affiliate plan params $arPlanSections = array(); $dbPlanSection = CSaleAffiliatePlanSection::GetList(array(), array("PLAN_ID" => $arAffiliate["PLAN_ID"]), false, false, array("ID", "MODULE_ID", "SECTION_ID", "RATE", "RATE_TYPE", "RATE_CURRENCY")); while ($arPlanSection = $dbPlanSection->Fetch()) { $arPlanSections[$arPlanSection["MODULE_ID"] . $arPlanSection["SECTION_ID"]] = $arPlanSection; } // Get affiliate parents $arAffiliateParents = array(); $affiliateParent = IntVal($arAffiliate["AFFILIATE_ID"]); $count = 0; while ($affiliateParent > 0 && $count < 5) { $dbAffiliateParent = CSaleAffiliate::GetList(array(), array("ID" => $affiliateParent, "ACTIVE" => "Y"), false, false, array("ID", "AFFILIATE_ID")); if ($arAffiliateParent = $dbAffiliateParent->Fetch()) { $count++; $arAffiliateParents[] = $affiliateParent; $affiliateParent = IntVal($arAffiliateParent["AFFILIATE_ID"]); } else { $affiliateParent = 0; } } // Get tier if (!array_key_exists("SALE_AFFILIATE_TIER_TMP_CACHE", $GLOBALS)) { $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"] = array(); } if (!array_key_exists($arAffiliate["SITE_ID"], $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"])) { $dbAffiliateTier = CSaleAffiliateTier::GetList(array(), array("SITE_ID" => $arAffiliate["SITE_ID"]), false, false, array("RATE1", "RATE2", "RATE3", "RATE4", "RATE5")); if ($arAffiliateTier = $dbAffiliateTier->Fetch()) { $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]] = array(DoubleVal($arAffiliateTier["RATE1"]), DoubleVal($arAffiliateTier["RATE2"]), DoubleVal($arAffiliateTier["RATE3"]), DoubleVal($arAffiliateTier["RATE4"]), DoubleVal($arAffiliateTier["RATE5"])); } else { $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]] = array(0, 0, 0, 0, 0); } } // Orders cicle $affiliateSum = 0; $affiliateCurrency = CSaleLang::GetLangCurrency($arAffiliate["SITE_ID"]); $dbOrders = \Bitrix\Sale\Internals\OrderTable::getList(array('filter' => array("=ALLOW_DELIVERY" => 'Y', ">=DATE_ALLOW_DELIVERY" => $dateFrom, "<DATE_ALLOW_DELIVERY" => $dateTo, "=AFFILIATE_ID" => $affiliateID, "=LID" => $arAffiliate["SITE_ID"], "=CANCELED" => 'N'), 'select' => array("ID", "LID", "PRICE_DELIVERY", "PRICE", "CURRENCY", "TAX_VALUE", "AFFILIATE_ID", "BASKET_QUANTITY" => 'BASKET.QUANTITY', "BASKET_PRODUCT_ID" => 'BASKET.PRODUCT_ID', "BASKET_MODULE" => 'BASKET.MODULE', "BASKET_PRICE" => 'BASKET.PRICE', "BASKET_CURRENCY" => 'BASKET.CURRENCY', "BASKET_DISCOUNT_PRICE" => 'BASKET.DISCOUNT_PRICE'), 'order' => array('ID' => 'ASC'))); $fOrderId = ""; while ($arOrder = $dbOrders->fetch()) { $arProductSections = array(); if (!array_key_exists("SALE_PRODUCT_SECTION_CACHE", $GLOBALS)) { $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] = array(); } if (array_key_exists($arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"], $GLOBALS["SALE_PRODUCT_SECTION_CACHE"])) { $arProductSections = $GLOBALS["SALE_PRODUCT_SECTION_CACHE"][$arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"]]; unset($GLOBALS["SALE_PRODUCT_SECTION_CACHE"][$arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"]]); $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] = $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] + array($arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"] => $arProductSections); } else { if ($arOrder["BASKET_MODULE"] == "catalog") { CModule::IncludeModule("catalog"); $arSku = CCatalogSku::GetProductInfo($arOrder["BASKET_PRODUCT_ID"]); if ($arSku && count($arSku) > 0) { $elementId = $arSku["ID"]; } else { $elementId = $arOrder["BASKET_PRODUCT_ID"]; } $arProductSections = CCatalogProduct::GetProductSections($elementId); } else { $events = GetModuleEvents("sale", "OnAffiliateGetSections"); if ($arEvent = $events->Fetch()) { $arProductSections = ExecuteModuleEventEx($arEvent, array($arOrder["BASKET_MODULE"], $arOrder["BASKET_PRODUCT_ID"])); } } $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] = $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] + array($arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"] => $arProductSections); if (count($GLOBALS["SALE_PRODUCT_SECTION_CACHE"]) > 20) { array_shift($GLOBALS["SALE_PRODUCT_SECTION_CACHE"]); } } $realRate = $arAffiliatePlan["BASE_RATE"]; $realRateType = $arAffiliatePlan["BASE_RATE_TYPE"]; $realRateCurrency = $arAffiliatePlan["BASE_RATE_CURRENCY"]; $coountArProd = count($arProductSections); for ($i = 0; $i < $coountArProd; $i++) { if (array_key_exists($arOrder["BASKET_MODULE"] . $arProductSections[$i], $arPlanSections)) { $realRate = $arPlanSections[$arOrder["BASKET_MODULE"] . $arProductSections[$i]]["RATE"]; $realRateType = $arPlanSections[$arOrder["BASKET_MODULE"] . $arProductSections[$i]]["RATE_TYPE"]; $realRateCurrency = $arPlanSections[$arOrder["BASKET_MODULE"] . $arProductSections[$i]]["RATE_CURRENCY"]; break; } } if ($realRateType == "P") { if ($arOrder["CURRENCY"] != $affiliateCurrency) { if (!array_key_exists("SALE_CONVERT_CURRENCY_CACHE", $GLOBALS)) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"] = array(); } if (!array_key_exists($arOrder["CURRENCY"] . "-" . $affiliateCurrency, $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"])) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$arOrder["CURRENCY"] . "-" . $affiliateCurrency] = CCurrencyRates::GetConvertFactor($arOrder["CURRENCY"], $affiliateCurrency); } if ($fOrderId != $arOrder["ID"]) { $affiliateSum += \Bitrix\Sale\PriceMaths::roundPrecision(($arOrder["PRICE"] - $arOrder["PRICE_DELIVERY"]) * $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$arOrder["CURRENCY"] . "-" . $affiliateCurrency] * $realRate / 100); $fOrderId = $arOrder["ID"]; } } else { if ($fOrderId != $arOrder["ID"]) { $affiliateSum += \Bitrix\Sale\PriceMaths::roundPrecision(($arOrder["PRICE"] - $arOrder["PRICE_DELIVERY"]) * $realRate / 100); $fOrderId = $arOrder["ID"]; } } } else { if ($realRateCurrency != $affiliateCurrency) { if (!array_key_exists("SALE_CONVERT_CURRENCY_CACHE", $GLOBALS)) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"] = array(); } if (!array_key_exists($realRateCurrency . "-" . $affiliateCurrency, $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"])) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$realRateCurrency . "-" . $affiliateCurrency] = CCurrencyRates::GetConvertFactor($realRateCurrency, $affiliateCurrency); } $affiliateSum += roundEx($realRate * $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$realRateCurrency . "-" . $affiliateCurrency], SALE_VALUE_PRECISION); } else { $affiliateSum += roundEx($realRate, SALE_VALUE_PRECISION); } } } $arFields = array("=PENDING_SUM" => "PENDING_SUM + " . $affiliateSum, "LAST_CALCULATE" => $dateTo); $res = CSaleAffiliate::Update($affiliateID, $arFields); if (!$res) { return False; } if ($affiliateSum > 0) { $cnt = min(count($arAffiliateParents), count($GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]])); for ($i = 0; $i < $cnt; $i++) { $affiliateSumTmp = roundEx($affiliateSum * $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]][$i] / 100, SALE_VALUE_PRECISION); $arFields = array("=PENDING_SUM" => "PENDING_SUM + " . $affiliateSumTmp); CSaleAffiliate::Update($arAffiliateParents[$i], $arFields); } } $events = GetModuleEvents("sale", "OnAfterAffiliateCalculate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($affiliateID)); } return True; }
<?php $quantity = $arResult["GRID"]["HEADERS"][5]; $price = $arResult["GRID"]["HEADERS"][4]; $arResult["GRID"]["HEADERS"][4] = $quantity; $arResult["GRID"]["HEADERS"][5] = $price; unset($arResult["GRID"]["HEADERS"][7]); unset($arResult["GRID"]["HEADERS"][8]); foreach ($arResult["GRID"]["ROWS"] as $k => $arItem) { if (CModule::IncludeModule('iblock')) { $bres = CCatalogSku::GetProductInfo($arItem['PRODUCT_ID']); if ($bres['ID'] > 0) { $idToSearch = $bres['ID']; } else { $idToSearch = $arItem['PRODUCT_ID']; } $arResult["GRID"]["ROWS"][$k]['realid'] = $idToSearch; $res = CIBlockElement::GetByID($idToSearch); $tovar = $res->GetNext(); $arResult["GRID"]["ROWS"][$k]['DETAIL_PAGE_URL'] = $tovar['DETAIL_PAGE_URL']; } if ($arItem["PREVIEW_PICTURE"]) { $arFileTmp = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array("width" => 134, "height" => 100), BX_RESIZE_IMAGE_PROPORTIONAL, true); $marginl = (134 - $arFileTmp['width']) / 2; $margint = (100 - $arFileTmp['height']) / 2; $arResult["GRID"]["ROWS"][$k]['small_pict'] = array("SMALL_SRC" => $arFileTmp["src"], "SMALL_MARGIN_LEFT" => $marginl); } }
/** * Get common data from cache. * @return mixed[] */ protected function getReferences() { global $USER; $this->arParams['CACHE_GROUPS'] = isset($this->arParams['CACHE_GROUPS']) && $this->arParams['CACHE_GROUPS'] == 'N' ? 'N' : 'Y'; $obCache = new CPHPCache(); if ($this->arParams['CACHE_GROUPS'] == 'Y') { $cacheId = implode("-", array(__CLASS__, LANGUAGE_ID, SITE_ID, $USER->GetGroups())); } else { $cacheId = implode("-", array(__CLASS__, LANGUAGE_ID, SITE_ID)); } $cached = array(); if ($obCache->StartDataCache($this->arParams["CACHE_TIME"], $cacheId, SITE_ID . '/' . $this->getRelativePath() . '/reference')) { // Catalog Groups $cached['CATALOG_GROUP'] = array(); $catalogGroupIterator = CCatalogGroup::GetList(array("SORT" => "ASC")); while ($catalogGroup = $catalogGroupIterator->fetch()) { $cached['CATALOG_GROUP'][$catalogGroup['NAME']] = $catalogGroup; } // Catalog Prices $cached['CATALOG_PRICE'] = CIBlockPriceTools::GetCatalogPrices(false, array_keys($cached['CATALOG_GROUP'])); // Catalog Currency $cached['CURRENCY'] = array(); if ($this->isCurrency) { $by = "currency"; $order = "asc"; $currencyIterator = CCurrency::getList($by, $order); while ($currency = $currencyIterator->fetch()) { $cached['CURRENCY'][$currency['CURRENCY']] = $currency; } } // Catalogs list $cached['CATALOG'] = array(); $catalogIterator = CCatalog::getList(array("IBLOCK_ID" => "ASC")); while ($catalog = $catalogIterator->fetch()) { $info = CCatalogSku::getInfoByIblock($catalog['IBLOCK_ID']); $catalog['CATALOG_TYPE'] = $info['CATALOG_TYPE']; $cached['CATALOG'][$catalog['IBLOCK_ID']] = $catalog; } // Measure list $cached['MEASURE'] = array(); $measureIterator = CCatalogMeasure::getList(array("CODE" => "ASC")); while ($measure = $measureIterator->fetch()) { $cached['MEASURE'][$measure['ID']] = $measure; } // Default Measure $cached['DEFAULT_MEASURE'] = CCatalogMeasure::getDefaultMeasure(true, true); $obCache->EndDataCache($cached); } else { $cached = $obCache->GetVars(); } return $cached; }
/** * @param $productId * @param $quantity * @param $userId * @param $LID * @param $userColumns * @param string $tmpId we can suggest that this mean the set_item * @return array * @throws Main\LoaderException */ protected function getProductDataToFillBasket($productId, $quantity, $userId, $LID, $userColumns, $tmpId = "") { $isSetItem = $tmpId != ""; if (self::$catalogIncluded === null) { self::$catalogIncluded = Main\Loader::includeModule('catalog'); } if (!self::$catalogIncluded) { return array(); } $arParams = array(); static $proxyIblockElement = array(); static $proxyCatalogMeasure = array(); static $proxyParent = array(); static $proxyIblockProperty = array(); static $proxyProductData = array(); static $proxyCatalogProduct = array(); static $proxyCatalogMeasureRatio = array(); $productId = (int) $productId; if ($productId <= 0) { return $arParams; } if (!empty($proxyIblockElement[$productId])) { $iblockId = $proxyIblockElement[$productId]; } else { $iblockId = (int) \CIBlockElement::getIBlockByID($productId); if ($iblockId > 0) { $proxyIblockElement[$productId] = $iblockId; } } if ($iblockId <= 0) { return $arParams; } $arSku2Parent = array(); $arElementId = array(); $arElementId[] = $productId; $proxyParentKey = $productId . "|" . $iblockId; if (!empty($proxyParent[$proxyParentKey]) && is_array($proxyParent[$proxyParentKey])) { $arParent = $proxyParent[$proxyParentKey]; } else { $arParent = \CCatalogSku::getProductInfo($productId, $iblockId); $proxyParent[$proxyParentKey] = $arParent; } if ($arParent) { $arElementId[] = $arParent["ID"]; $arSku2Parent[$productId] = $arParent["ID"]; } $arPropertyInfo = array(); $userColumns = (string) $userColumns; $arUserColumns = $userColumns != '' ? explode(",", $userColumns) : array(); foreach ($arUserColumns as $key => $column) { if (strncmp($column, 'PROPERTY_', 9) != 0) { unset($arUserColumns[$key]); } else { $propertyCode = substr($column, 9); if ($propertyCode == '') { unset($arUserColumns[$key]); continue; } if (!empty($proxyIblockProperty[$propertyCode]) && is_array($proxyIblockProperty[$propertyCode])) { $arPropertyInfo[$column] = $proxyIblockProperty[$propertyCode]; } else { $dbres = \CIBlockProperty::GetList(array(), array("CODE" => $propertyCode)); if ($arPropData = $dbres->GetNext()) { $arPropertyInfo[$column] = $arPropData; $proxyIblockProperty[$propertyCode] = $arPropData; } } } } $arSelect = array_merge(array("ID", "NAME", "IBLOCK_ID", "IBLOCK_SECTION_ID", "DETAIL_PICTURE", "PREVIEW_PICTURE", "XML_ID", "IBLOCK_XML_ID"), $arUserColumns); $proxyProductDataKey = md5(join('|', $arElementId) . "_" . join('|', $arSelect)); if (!empty($proxyProductData[$proxyProductDataKey]) && is_array($proxyProductData[$proxyProductDataKey])) { $arProductData = $proxyProductData[$proxyProductDataKey]; } else { $arProductData = getProductProps($arElementId, $arSelect); $proxyProductData[$proxyProductDataKey] = $arProductData; } $defaultMeasure = \CCatalogMeasure::getDefaultMeasure(true, true); if (!empty($arProductData)) { $arElementInfo = array(); foreach ($arProductData as $elemId => &$arElement) { foreach ($arElement as $key => $value) { if (strncmp($key, 'PROPERTY_', 9) == 0 && substr($key, -6) == "_VALUE") { $columnCode = str_replace("_VALUE", "", $key); $arElement[$key] = getIblockPropInfo($value, $arPropertyInfo[$columnCode], array("WIDTH" => 90, "HEIGHT" => 90)); } } } unset($arElement); if (isset($arProductData[$productId])) { $arElementInfo = $arProductData[$productId]; } if (isset($arSku2Parent[$productId])) { $arParent = $arProductData[$arSku2Parent[$productId]]; } if (!empty($arSku2Parent)) { foreach ($arUserColumns as $field) { $fieldVal = $field . "_VALUE"; $parentId = $arSku2Parent[$productId]; if ((!isset($arElementInfo[$fieldVal]) || isset($arElementInfo[$fieldVal]) && strlen($arElementInfo[$fieldVal]) == 0) && (isset($arProductData[$parentId][$fieldVal]) && !empty($arProductData[$parentId][$fieldVal]))) { $arElementInfo[$fieldVal] = $arProductData[$parentId][$fieldVal]; } } if (strpos($arElementInfo["~XML_ID"], '#') === false) { $arElementInfo["~XML_ID"] = $arParent['~XML_ID'] . '#' . $arElementInfo["~XML_ID"]; } } $arElementInfo["MODULE"] = "catalog"; $arElementInfo["PRODUCT_PROVIDER_CLASS"] = "CCatalogProductProvider"; $arElementInfo["PRODUCT_ID"] = $arElementInfo["ID"]; if ($arElementInfo["IBLOCK_ID"] > 0) { $arElementInfo["EDIT_PAGE_URL"] = \CIBlock::GetAdminElementEditLink($arElementInfo["IBLOCK_ID"], $arElementInfo["PRODUCT_ID"], array("find_section_section" => $arElementInfo["IBLOCK_SECTION_ID"], 'WF' => 'Y')); } static $buyersGroups = array(); if (empty($buyersGroups[$userId])) { $buyersGroups[$userId] = \CUser::getUserGroup($userId); } $arBuyerGroups = $buyersGroups[$userId]; // price $currentVatMode = \CCatalogProduct::getPriceVatIncludeMode(); $currentUseDiscount = \CCatalogProduct::getUseDiscount(); \CCatalogProduct::setUseDiscount(!$isSetItem); \CCatalogProduct::setPriceVatIncludeMode(true); \CCatalogProduct::setUsedCurrency(Sale\Internals\SiteCurrencyTable::getSiteCurrency($LID)); $arPrice = \CCatalogProduct::getOptimalPrice($arElementInfo["ID"], 1, $arBuyerGroups, "N", array(), $LID); \CCatalogProduct::clearUsedCurrency(); \CCatalogProduct::setPriceVatIncludeMode($currentVatMode); \CCatalogProduct::setUseDiscount($currentUseDiscount); unset($currentUseDiscount, $currentVatMode); $currentPrice = $arPrice['RESULT_PRICE']['DISCOUNT_PRICE']; $arElementInfo['PRICE'] = $currentPrice; $arElementInfo['CURRENCY'] = $arPrice['RESULT_PRICE']['CURRENCY']; $currentTotalPrice = $arPrice['RESULT_PRICE']['BASE_PRICE']; $arProduct = array(); if (!empty($proxyCatalogProduct[$productId]) && is_array($proxyCatalogProduct[$productId])) { $arProduct = $proxyCatalogProduct[$productId]; } else { $rsProducts = \CCatalogProduct::getList(array(), array('ID' => $productId), false, false, array('ID', 'QUANTITY', 'WEIGHT', 'MEASURE', 'TYPE', 'BARCODE_MULTI')); if ($arProduct = $rsProducts->Fetch()) { $proxyCatalogProduct[$productId] = $arProduct; } } if (empty($arProduct) || !is_array($arProduct)) { return array(); } $balance = floatval($arProduct["QUANTITY"]); // sku props $arSkuData = array(); $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $arElementInfo['~IBLOCK_XML_ID']); static $proxySkuProperty = array(); if (!empty($proxySkuProperty[$productId]) && is_array($proxySkuProperty[$productId])) { $arSkuProperty = $proxySkuProperty[$productId]; } else { $arSkuProperty = \CSaleProduct::GetProductSkuProps($productId, '', true); $proxySkuProperty[$productId] = $arSkuProperty; } if (!empty($arSkuProperty)) { foreach ($arSkuProperty as &$val) { $arSkuData[] = array('NAME' => $val['NAME'], 'VALUE' => $val['VALUE'], 'CODE' => $val['CODE']); } unset($val); } $arSkuData[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arElementInfo["~XML_ID"]); $arElementInfo["WEIGHT"] = $arProduct["WEIGHT"]; // measure $arElementInfo["MEASURE_TEXT"] = ""; $arElementInfo["MEASURE_CODE"] = 0; if ((int) $arProduct["MEASURE"] > 0) { if (!empty($proxyCatalogMeasure[$arProduct["MEASURE"]]) && is_array($proxyCatalogMeasure[$arProduct["MEASURE"]])) { $arMeasure = $proxyCatalogMeasure[$arProduct["MEASURE"]]; } else { $dbMeasure = \CCatalogMeasure::GetList(array(), array("ID" => intval($arProduct["MEASURE"])), false, false, array("ID", "SYMBOL_RUS", "SYMBOL_INTL")); if ($arMeasure = $dbMeasure->Fetch()) { $proxyCatalogMeasure[$arProduct["MEASURE"]] = $arMeasure; } } if (!empty($arMeasure) && is_array($arMeasure)) { $arElementInfo["MEASURE_TEXT"] = $arMeasure["SYMBOL_RUS"] != '' ? $arMeasure["SYMBOL_RUS"] : $arMeasure["SYMBOL_INTL"]; $arElementInfo["MEASURE_CODE"] = $arMeasure["CODE"]; } } if ($arElementInfo["MEASURE_TEXT"] == '') { $arElementInfo["MEASURE_TEXT"] = $defaultMeasure["SYMBOL_RUS"] != '' ? $defaultMeasure["SYMBOL_RUS"] : $defaultMeasure["SYMBOL_INTL"]; } // ratio $arElementInfo["RATIO"] = 1; if (!empty($proxyCatalogMeasureRatio[$productId]) && is_array($proxyCatalogMeasureRatio[$productId])) { $arRatio = $proxyCatalogMeasureRatio[$productId]; } else { $dbratio = \CCatalogMeasureRatio::GetList(array(), array("PRODUCT_ID" => $productId)); if ($arRatio = $dbratio->Fetch()) { $proxyCatalogMeasureRatio[$productId] = $arRatio; } } if (!empty($arRatio) && is_array($arRatio)) { $arElementInfo["RATIO"] = $arRatio["RATIO"]; } // image $imgCode = ''; $imgUrl = ''; if ($arElementInfo["PREVIEW_PICTURE"] > 0) { $imgCode = $arElementInfo["PREVIEW_PICTURE"]; } elseif ($arElementInfo["DETAIL_PICTURE"] > 0) { $imgCode = $arElementInfo["DETAIL_PICTURE"]; } if ($imgCode == "" && count($arParent) > 0) { if ($arParent["PREVIEW_PICTURE"] > 0) { $imgCode = $arParent["PREVIEW_PICTURE"]; } elseif ($arParent["DETAIL_PICTURE"] > 0) { $imgCode = $arParent["DETAIL_PICTURE"]; } } if ($imgCode > 0) { $arFile = \CFile::GetFileArray($imgCode); $arImgProduct = \CFile::ResizeImageGet($arFile, array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); if (is_array($arImgProduct)) { $imgUrl = $arImgProduct["src"]; } } $arSetInfo = array(); $arStores = array(); /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = \CSaleBasket::GetProductProvider(array("MODULE" => $arElementInfo["MODULE"], "PRODUCT_PROVIDER_CLASS" => $arElementInfo["PRODUCT_PROVIDER_CLASS"]))) { // get set items if it is set if ($arProduct["TYPE"] == \CCatalogProduct::TYPE_SET) { if (method_exists($productProvider, "GetSetItems")) { $arSets = $productProvider::GetSetItems($productId, \CSaleBasket::TYPE_SET); if ($tmpId == "") { $tmpId = randString(7); } if (!empty($arSets)) { foreach ($arSets as $arSetData) { foreach ($arSetData["ITEMS"] as $setItem) { $arSetItemParams = self::getProductDataToFillBasket($setItem["PRODUCT_ID"], $setItem["QUANTITY"], $userId, $LID, $userColumns, $tmpId); // recursive call // re-define some fields with set data values $arSetItemParams["PARENT_OFFER_ID"] = $productId; $arSetItemParams["OFFER_ID"] = $setItem["PRODUCT_ID"]; $arSetItemParams["NAME"] = $setItem["NAME"]; $arSetItemParams["MODULE"] = $setItem["MODULE"]; $arSetItemParams["PRODUCT_PROVIDER_CLASS"] = $setItem["PRODUCT_PROVIDER_CLASS"]; $arSetItemParams["QUANTITY"] = $setItem["QUANTITY"] * $quantity; $arSetItemParams["BARCODE_MULTI"] = $setItem["BARCODE_MULTI"]; $arSetItemParams["PRODUCT_TYPE"] = $setItem["TYPE"]; $arSetItemParams["WEIGHT"] = $setItem["WEIGHT"]; $arSetItemParams["VAT_RATE"] = $setItem["VAT_RATE"]; $arSetItemParams["SET_ITEMS"] = ""; $arSetItemParams["OLD_PARENT_ID"] = $productId . "_tmp" . $tmpId; $arSetItemParams["IS_SET_ITEM"] = "Y"; $arSetItemParams["IS_SET_PARENT"] = "N"; $arSetItemParams["PROVIDER_DATA"] = serialize($setItem); $arSetInfo[] = $arSetItemParams; } } } } } // get stores $storeCount = $productProvider::GetStoresCount(array("SITE_ID" => $LID)); // with exact SITE_ID or SITE_ID = NULL if ($storeCount > 0) { if ($arProductStore = $productProvider::GetProductStores(array("PRODUCT_ID" => $productId, "SITE_ID" => $LID))) { $arStores = $arProductStore; } } } $currentTotalPrice = (double) $currentTotalPrice; // params array $arParams["OFFER_ID"] = $productId; $arParams["NAME"] = $arElementInfo["~NAME"]; $arParams["EDIT_PAGE_URL"] = $arElementInfo["EDIT_PAGE_URL"]; $arParams["DETAIL_PAGE_URL"] = htmlspecialcharsex($arElementInfo["~DETAIL_PAGE_URL"]); $arParams["PICTURE_URL"] = $imgUrl; $arParams["PRICE"] = floatval($arElementInfo["PRICE"]); $arParams["PRICE_BASE"] = $currentTotalPrice; $arParams["DIMENSIONS"] = serialize(array("WIDTH" => $arElementInfo["WIDTH"], "HEIGHT" => $arElementInfo["HEIGHT"], "LENGTH" => $arElementInfo["LENGTH"])); $arParams["QUANTITY"] = $quantity; $arParams["MODULE"] = $arElementInfo["MODULE"]; $arParams["CURRENCY"] = $arElementInfo["CURRENCY"]; $arParams["WEIGHT"] = $arElementInfo["WEIGHT"]; $arParams["VAT_RATE"] = $arPrice["PRICE"]["VAT_RATE"]; $arParams["PRICE_TYPE"] = $arPrice["PRICE"]["CATALOG_GROUP_NAME"]; $arParams["AVAILABLE"] = $balance; $arParams["NOTES"] = !empty($arPrice["PRICE"]["CATALOG_GROUP_NAME"]) ? $arPrice["PRICE"]["CATALOG_GROUP_NAME"] : ""; $arParams["CATALOG_XML_ID"] = $arElementInfo["~IBLOCK_XML_ID"]; $arParams["PRODUCT_XML_ID"] = $arElementInfo["~XML_ID"]; $arParams["PRODUCT_PROVIDER_CLASS"] = $arElementInfo["PRODUCT_PROVIDER_CLASS"]; $arParams["PROPS"] = $arSkuData; $arParams["MEASURE_TEXT"] = $arElementInfo["MEASURE_TEXT"]; $arParams["MEASURE_CODE"] = $arElementInfo["MEASURE_CODE"]; $arParams["MEASURE_RATIO"] = $arElementInfo["RATIO"]; $arParams["BARCODE_MULTI"] = $arProduct["BARCODE_MULTI"]; $arParams["PRODUCT_TYPE"] = empty($arSetInfo) ? "" : \CSaleBasket::TYPE_SET; $arParams["OLD_PARENT_ID"] = empty($arSetInfo) ? "" : $productId . "_tmp" . $tmpId; $arParams["SET_ITEMS"] = $arSetInfo; $arParams["IS_SET_ITEM"] = "N"; $arParams["IS_SET_PARENT"] = empty($arSetInfo) ? "N" : "Y"; $arParams["STORES"] = empty($arSetInfo) ? $arStores : array(); $arParams["PRODUCT_PROPS_VALUES"] = $arElementInfo; // along with other information also contains values of properties with correct keys (after getProductProps) } return $arParams; }
<?php CModule::IncludeModule("sale"); CModule::IncludeModule("iblock"); $arID = array(); $arBasketItems = array(); $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, array("ID", "PRODUCT_ID")); while ($arItems = $dbBasketItems->Fetch()) { $arProducts[] = $arItems['PRODUCT_ID']; } foreach ($arProducts as $key => $prod) { $mxResult = CCatalogSku::GetProductInfo($prod); if (is_array($mxResult)) { $arProducts[$key] = $mxResult['ID']; } } $arFilter = array("ID" => $arProducts); $arAccessories = array(); $sections_id = array(); $res = CIBlockElement::GetList(array(), $arFilter, false, false, array("ID", 'IBLOCK_ID', 'NAME', 'IBLOCK_SECTION_ID', 'PROPERTY_ACCESSORIES')); while ($ar_fields = $res->GetNext()) { $arAccessories[] = $ar_fields['PROPERTY_ACCESSORIES_VALUE']; if (!in_array($ar_fields['IBLOCK_SECTION_ID'], $sections_id)) { $sections_id[] = $ar_fields['IBLOCK_SECTION_ID']; } } $arSecProducts = array(); if (count($sections_id) > 0) { $arFilter1 = array('SECTION_ID' => $sections_id); $obj = CIBlockElement::GetList(array(), $arFilter1, false, false, array('ID')); while ($res1 = $obj->GetNext()) {
private function getProducts() { if (!($arFilter = $this->getUserFilter())) { return array(); } if ($this->arParams['SHOW_NOTAVAIL'] == 'N') { $arFilter['CAN_BUY'] = 'Y'; } if ($this->arParams['SHOW_DELAY'] == 'N') { $arFilter['DELAY'] = 'N'; } if ($this->arParams['SHOW_SUBSCRIBE'] == 'N') { $arFilter["SUBSCRIBE"] = 'N'; } $dbItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), $arFilter, false, false, array("ID", "NAME", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "DETAIL_PAGE_URL", "CURRENCY", "VAT_RATE", "CATALOG_XML_ID", "MEASURE_NAME", "PRODUCT_XML_ID", "SUBSCRIBE", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS", "TYPE", "SET_PARENT_ID")); $arBasketItems = array(); $arElementId = array(); $arSku2Parent = array(); while ($arItem = $dbItems->GetNext(true, false)) { if (CSaleBasketHelper::isSetItem($arItem)) { continue; } $arItem["PRICE_FMT"] = CCurrencyLang::CurrencyFormat($arItem["PRICE"], $arItem["CURRENCY"], true); $arItem["FULL_PRICE"] = CCurrencyLang::CurrencyFormat($arItem["PRICE"] + $arItem["DISCOUNT_PRICE"], $arItem["CURRENCY"], true); $arItem['QUANTITY'] += 0; // remove excessive zeros after period if (!$arItem['MEASURE_NAME']) { $arItem['MEASURE_NAME'] = GetMessage('TSB1_MEASURE_NAME'); } if ($this->arParams['SHOW_IMAGE'] == 'Y' && $this->bUseCatalog && $arItem["MODULE"] == 'catalog') { $arElementId[] = $arItem["PRODUCT_ID"]; $arParent = CCatalogSku::GetProductInfo($arItem["PRODUCT_ID"]); if ($arParent) { $arElementId[] = $arParent["ID"]; $arSku2Parent[$arItem["PRODUCT_ID"]] = $arParent["ID"]; } } $arBasketItems[] = $arItem; } $arResult = array('CATEGORIES' => array(), 'TOTAL_PRICE' => 0); if ($arBasketItems) { if ($this->arParams['SHOW_IMAGE'] == 'Y') { $this->setImgSrc($arBasketItems, $arElementId, $arSku2Parent); } $arResult["CATEGORIES"] = array("READY" => array(), "DELAY" => array(), "SUBSCRIBE" => array(), "NOTAVAIL" => array()); // fill item arrays for templates foreach ($arBasketItems as $arItem) { if ($arItem["CAN_BUY"] == "Y") { if ($arItem["DELAY"] == "Y") { $arResult["CATEGORIES"]["DELAY"][] = $arItem; } else { $arResult["CATEGORIES"]["READY"][] = $arItem; } } else { if ($arItem["SUBSCRIBE"] == "Y") { $arResult["CATEGORIES"]["SUBSCRIBE"][] = $arItem; } else { $arResult["CATEGORIES"]["NOTAVAIL"][] = $arItem; } } } if ($this->arParams['SHOW_PRICE'] == 'Y' || $this->arParams['SHOW_SUMMARY'] == 'Y' || $this->arParams['SHOW_TOTAL_PRICE'] == 'Y') { $arOrder = $this->calculateOrder($arResult["CATEGORIES"]["READY"]); $arResult["CATEGORIES"]["READY"] = $arOrder['BASKET_ITEMS']; foreach ($arResult["CATEGORIES"]["READY"] as &$arItem) { $arItem["SUM"] = CCurrencyLang::CurrencyFormat($arItem["PRICE"] * $arItem["QUANTITY"], $arItem["CURRENCY"], true); $arItem["PRICE_FMT"] = CCurrencyLang::CurrencyFormat($arItem["PRICE"], $arItem["CURRENCY"], true); } $arResult["TOTAL_PRICE"] = $arOrder['ORDER_PRICE']; } } return array('NUM_PRODUCTS' => count($arBasketItems), 'TOTAL_PRICE' => $arResult["TOTAL_PRICE"], 'CATEGORIES' => $arResult["CATEGORIES"]); }
public static function _GetProductUrl($OF_ELEMENT_ID, $OF_IBLOCK_ID, $server_name = false, $arrType = false) { static $arIBlockCache = array(); static $arElementCache = array(); $product_url = ""; $OF_ELEMENT_ID = (int) $OF_ELEMENT_ID; $OF_IBLOCK_ID = (int) $OF_IBLOCK_ID; if ($arrType === "E" && $OF_IBLOCK_ID > 0 && $OF_ELEMENT_ID > 0 && Loader::includeModule('catalog')) { if (!isset($arIBlockCache[$OF_IBLOCK_ID])) { $arIBlockCache[$OF_IBLOCK_ID] = CCatalogSku::GetInfoByOfferIBlock($OF_IBLOCK_ID); if (is_array($arIBlockCache[$OF_IBLOCK_ID])) { $arIBlockCache[$OF_IBLOCK_ID]["PRODUCT_IBLOCK"] = CIBlock::GetArrayByID($arIBlockCache[$OF_IBLOCK_ID]["PRODUCT_IBLOCK_ID"]); } } if (is_array($arIBlockCache[$OF_IBLOCK_ID])) { if (!array_key_exists($OF_ELEMENT_ID, $arElementCache)) { $OF_PROP_ID = $arIBlockCache[$OF_IBLOCK_ID]["SKU_PROPERTY_ID"]; $rsOffer = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $arIBlockCache[$OF_IBLOCK_ID]["IBLOCK_ID"], "=ID" => $OF_ELEMENT_ID), false, false, array("LANG_DIR", "PROPERTY_" . $OF_PROP_ID . ".ID", "PROPERTY_" . $OF_PROP_ID . ".CODE", "PROPERTY_" . $OF_PROP_ID . ".XML_ID", "PROPERTY_" . $OF_PROP_ID . ".IBLOCK_ID", "PROPERTY_" . $OF_PROP_ID . ".IBLOCK_SECTION_ID")); if ($arOffer = $rsOffer->Fetch()) { $arOffer["PROPERTY_" . $OF_PROP_ID . "_IBLOCK_SECTION_CODE"] = ''; if (intval($arOffer["PROPERTY_" . $OF_PROP_ID . "_IBLOCK_SECTION_ID"]) > 0) { $rsSections = CIBlockSection::GetByID($arOffer["PROPERTY_" . $OF_PROP_ID . "_IBLOCK_SECTION_ID"]); if ($arSection = $rsSections->Fetch()) { $arOffer["PROPERTY_" . $OF_PROP_ID . "_IBLOCK_SECTION_CODE"] = $arSection['CODE']; } } $arElementCache[$OF_ELEMENT_ID] = array("LANG_DIR" => $arOffer["LANG_DIR"], "ID" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_ID"], "ELEMENT_ID" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_ID"], "CODE" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_CODE"], "ELEMENT_CODE" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_CODE"], "EXTERNAL_ID" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_XML_ID"], "IBLOCK_TYPE_ID" => $arIBlockCache[$OF_IBLOCK_ID]["PRODUCT_IBLOCK"]["IBLOCK_TYPE_ID"], "IBLOCK_ID" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_IBLOCK_ID"], "IBLOCK_CODE" => $arIBlockCache[$OF_IBLOCK_ID]["PRODUCT_IBLOCK"]["CODE"], "IBLOCK_EXTERNAL_ID" => $arIBlockCache[$OF_IBLOCK_ID]["PRODUCT_IBLOCK"]["XML_ID"], "IBLOCK_SECTION_ID" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_IBLOCK_SECTION_ID"], "SECTION_CODE" => $arOffer["PROPERTY_" . $OF_PROP_ID . "_IBLOCK_SECTION_CODE"]); } } if (is_array($arElementCache[$OF_ELEMENT_ID])) { $product_url = CIBlock::ReplaceDetailUrl($arIBlockCache[$OF_IBLOCK_ID]["PRODUCT_IBLOCK"]["DETAIL_PAGE_URL"], $arElementCache[$OF_ELEMENT_ID], $server_name, $arrType); } } } return $product_url; }
private function basket_items() { CModule::IncludeModule("iblock"); CModule::IncludeModule("sale"); CSaleBasket::UpdateBasketPrices(CSaleBasket::GetBasketUserID(), SITE_ID); /* Check Values Begin */ $arSelFields = array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS", "DIMENSIONS", "TYPE", "SET_PARENT_ID", "DETAIL_PAGE_URL" ); $dbBasketItems = CSaleBasket::GetList( array("ID" => "ASC"), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, $arSelFields ); while ($arItem = $dbBasketItems->GetNext()) { if ($arItem["DELAY"] == "N" && $arItem["CAN_BUY"] == "Y") { $arItem["PRICE"] = roundEx($arItem["PRICE"], SALE_VALUE_PRECISION); $arItem["QUANTITY"] = DoubleVal($arItem["QUANTITY"]); $arItem["WEIGHT"] = DoubleVal($arItem["WEIGHT"]); $arItem["VAT_RATE"] = DoubleVal($arItem["VAT_RATE"]); $arDim = unserialize($arItem["~DIMENSIONS"]); if(is_array($arDim)) { $arItem["DIMENSIONS"] = $arDim; unset($arItem["~DIMENSIONS"]); $arResult["MAX_DIMENSIONS"] = CSaleDeliveryHelper::getMaxDimensions( array( $arDim["WIDTH"], $arDim["HEIGHT"], $arDim["LENGTH"] ), $arResult["MAX_DIMENSIONS"]); $arResult["ITEMS_DIMENSIONS"][] = $arDim; } if($arItem["VAT_RATE"] > 0 && !CSaleBasketHelper::isSetItem($arItem)) { $arResult["bUsingVat"] = "Y"; if($arItem["VAT_RATE"] > $arResult["VAT_RATE"]) $arResult["VAT_RATE"] = $arItem["VAT_RATE"]; //$arItem["VAT_VALUE"] = roundEx((($arItem["PRICE"] / ($arItem["VAT_RATE"] +1)) * $arItem["VAT_RATE"]), SALE_VALUE_PRECISION); $arItem["VAT_VALUE"] = (($arItem["PRICE"] / ($arItem["VAT_RATE"] +1)) * $arItem["VAT_RATE"]); $arResult["VAT_SUM"] += roundEx($arItem["VAT_VALUE"] * $arItem["QUANTITY"], SALE_VALUE_PRECISION); } $arItem["PRICE_FORMATED"] = SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]); $arItem["WEIGHT_FORMATED"] = roundEx(DoubleVal($arItem["WEIGHT"]/$arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION)." ".$arResult["WEIGHT_UNIT"]; if($arItem["DISCOUNT_PRICE"] > 0) { $arItem["DISCOUNT_PRICE_PERCENT"] = $arItem["DISCOUNT_PRICE"]*100 / ($arItem["DISCOUNT_PRICE"] + $arItem["PRICE"]); $arItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arItem["DISCOUNT_PRICE_PERCENT"], 0)."%"; } $arItem["PROPS"] = Array(); $dbProp = CSaleBasket::GetPropsList(Array("SORT" => "ASC", "ID" => "ASC"), Array("BASKET_ID" => $arItem["ID"], "!CODE" => array("CATALOG.XML_ID", "PRODUCT.XML_ID"))); while($arProp = $dbProp -> GetNext()) { if (array_key_exists('BASKET_ID', $arProp)) { unset($arProp['BASKET_ID']); } if (array_key_exists('~BASKET_ID', $arProp)) { unset($arProp['~BASKET_ID']); } $arProp = array_filter($arProp, array("CSaleBasketHelper", "filterFields")); $arItem["PROPS"][] = $arProp; } if (!CSaleBasketHelper::isSetItem($arItem)) { $DISCOUNT_PRICE_ALL += $arItem["DISCOUNT_PRICE"] * $arItem["QUANTITY"]; $arItem["DISCOUNT_PRICE"] = roundEx($arItem["DISCOUNT_PRICE"], SALE_VALUE_PRECISION); $arResult["ORDER_PRICE"] += $arItem["PRICE"] * $arItem["QUANTITY"]; } $arResult["ORDER_WEIGHT"] += $arItem["WEIGHT"] * $arItem["QUANTITY"]; if (CSaleBasketHelper::isSetItem($arItem)) $arSetParentWeight[$arItem["SET_PARENT_ID"]] += $arItem["WEIGHT"] * $arItem['QUANTITY']; //get product section $db_groups = CIBlockElement::GetElementGroups($arItem["PRODUCT_ID"], true); while($ar_group = $db_groups->Fetch()) $arItem["IBLOCK_SECTION_ID"][] = $ar_group["ID"]; if(!$arItem["IBLOCK_SECTION_ID"]){ $arItem["PARENT"] = CCatalogSku::GetProductInfo( $arItem["PRODUCT_ID"] ); $db_groups = CIBlockElement::GetElementGroups($arItem["PARENT"]["ID"], true); while($ar_group = $db_groups->Fetch()) $arItem["IBLOCK_SECTION_ID"][] = $ar_group["ID"]; } if($arItem["IBLOCK_SECTION_ID"]){ foreach($arItem["IBLOCK_SECTION_ID"] as $section){ $res_1 = CIBlockSection::GetByID($section); if($ar_res_1 = $res_1->GetNext()){ $arItem["SECTION_NAME"][] = $ar_res_1["NAME"]; } } } $arResult["BASKET_ITEMS"][] = $arItem; } $arResult["PRICE_WITHOUT_DISCOUNT"] = SaleFormatCurrency($arResult["ORDER_PRICE"] + $DISCOUNT_PRICE_ALL, $allCurrency); // count weight for set parent products foreach ($arResult["BASKET_ITEMS"] as &$arItem) { if (CSaleBasketHelper::isSetParent($arItem)) { $arItem["WEIGHT"] = $arSetParentWeight[$arItem["ID"]] / $arItem["QUANTITY"]; $arItem["WEIGHT_FORMATED"] = roundEx(doubleval($arItem["WEIGHT"] / $arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION)." ".$arResult["WEIGHT_UNIT"]; } } $arResult["ORDER_WEIGHT_FORMATED"] = roundEx(DoubleVal($arResult["ORDER_WEIGHT"]/$arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION)." ".$arResult["WEIGHT_UNIT"]; $arResult["ORDER_PRICE_FORMATED"] = SaleFormatCurrency($arResult["ORDER_PRICE"], $arResult["BASE_LANG_CURRENCY"]); $arResult["VAT_SUM_FORMATED"] = SaleFormatCurrency($arResult["VAT_SUM"], $arResult["BASE_LANG_CURRENCY"]); $arElementId[] = $arItem["PRODUCT_ID"]; if ($bUseCatalog) { $arParent = CCatalogSku::GetProductInfo($arItem["PRODUCT_ID"]); if ($arParent) { $arElementId[] = $arParent["ID"]; $arSku2Parent[$arItem["PRODUCT_ID"]] = $arParent["ID"]; } } unset($arItem); } return $arResult["BASKET_ITEMS"]; }
/** * Find product photo ID * @param integer $item_id Item ID * @return integer|null */ public static function getProductPhotoId($item_id) { $picture = null; // Получаем цену товара или товарного предложения if (CCatalogSku::IsExistOffers($item_id)) { // Пытаемся найти цену среди торговых предложений $res = CIBlockElement::GetByID($item_id); if ($ar_res = $res->GetNext()) { if (isset($ar_res['IBLOCK_ID']) && $ar_res['IBLOCK_ID']) { $offers = CIBlockPriceTools::GetOffersArray(array('IBLOCK_ID' => $ar_res['IBLOCK_ID'], 'HIDE_NOT_AVAILABLE' => 'Y', 'CHECK_PERMISSIONS' => 'Y'), array($item_id)); foreach ($offers as $offer) { // Ищем фото if (isset($offer['DETAIL_PICTURE']) && (int) $offer['DETAIL_PICTURE'] > 0) { $picture = $offer['DETAIL_PICTURE']; } } } } } if ($picture == null) { $item_id = intval($item_id); $libCatalogProduct = new CCatalogProduct(); $item = $libCatalogProduct->GetByIDEx($item_id); $picture = $item['DETAIL_PICTURE'] ?: $item['PREVIEW_PICTURE']; } return $picture; }
/** * @override * @return integer[] */ protected function getProductIds() { if (!$this->arParams['ID']) { return array(); } $info = CCatalogSku::GetProductInfo($this->arParams['ID']); $ids = array(); if ($info) { $ids = $this->getRecommendedIds($this->arParams['ID'], $this->arParams['OFFERS_PROPERTY_LINK']); if (!count($ids)) { $ids = $this->getRecommendedIds($info['ID'], $this->arParams['PROPERTY_LINK']); } } else { $ids = $this->getRecommendedIds($this->arParams['ID'], $this->arParams['PROPERTY_LINK']); } return $ids; }
public static function GetSetItems($productID, $intType, $arProducInfo = array()) { $arProductId = array(); static $proxyCatalogProductSet = array(); static $proxyCatalogSkuData = array(); static $proxyCatalogProduct = array(); static $proxyIblockProperty = array(); static $proxyProductProperty = array(); $proxyCatalogProductSetKey = $productID . "|" . $intType; if (!empty($proxyCatalogProductSet[$proxyCatalogProductSetKey]) && is_array($proxyCatalogProductSet[$proxyCatalogProductSetKey])) { $arSets = $proxyCatalogProductSet[$proxyCatalogProductSetKey]; } else { $arSets = CCatalogProductSet::getAllSetsByProduct($productID, $intType); if (!empty($arSets) && is_array($arSets)) { $proxyCatalogProductSet[$proxyCatalogProductSetKey] = $arSets; } } if (is_array($arSets)) { foreach ($arSets as $k => $arSet) { foreach ($arSet["ITEMS"] as $k1 => $item) { $arItem = self::GetProductData(array("PRODUCT_ID" => $item["ITEM_ID"], "QUANTITY" => $item["QUANTITY"], "CHECK_QUANTITY" => "N", "CHECK_PRICE" => "N")); if (array_key_exists('QUANTITY_TRACE', $arItem)) { unset($arItem['QUANTITY_TRACE']); } $arItem["PRODUCT_ID"] = $item["ITEM_ID"]; $arItem["MODULE"] = "catalog"; $arItem["PRODUCT_PROVIDER_CLASS"] = "CCatalogProductProvider"; if ($intType == CCatalogProductSet::TYPE_SET) { $arItem['SET_DISCOUNT_PERCENT'] = $item['DISCOUNT_PERCENT'] == '' ? false : (double) $item['DISCOUNT_PERCENT']; } $arProductId[] = $item["ITEM_ID"]; $arItem["PROPS"] = array(); if (!empty($proxyCatalogSkuData[$item["ITEM_ID"]]) && is_array($proxyCatalogSkuData[$item["ITEM_ID"]])) { $arParentSku = $proxyCatalogSkuData[$item["ITEM_ID"]]; } else { if ($arParentSku = CCatalogSku::GetProductInfo($item["ITEM_ID"])) { $proxyCatalogSkuData[$item["ITEM_ID"]] = $arParentSku; } } if (!empty($arParentSku)) { $arPropsSku = array(); if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT', $item["ITEM_ID"]))) { $dbProduct = CIBlockElement::GetList(array(), array("ID" => $item["ITEM_ID"]), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'IBLOCK_SECTION_ID')); if ($arProduct = $dbProduct->Fetch()) { static::setHitCache('IBLOCK_ELEMENT', $item["ITEM_ID"], $arProduct); } } if (!($arPropsSku = static::getHitCache('IBLOCK_PROPERTY', $arProduct["IBLOCK_ID"]))) { $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK")); while ($arOfferProperties = $dbOfferProperties->Fetch()) { $arPropsSku[] = $arOfferProperties["CODE"]; } static::setHitCache('IBLOCK_PROPERTY', $arProduct["IBLOCK_ID"], $arPropsSku); } $proxyProductPropertyKey = $item["ITEM_ID"] . "_" . $arParentSku["IBLOCK_ID"] . "_" . md5(join('|', $arPropsSku)); if (!($product_properties = static::getHitCache('PRODUCT_PROPERTY', $proxyProductPropertyKey))) { $product_properties = CIBlockPriceTools::GetOfferProperties($item["ITEM_ID"], $arParentSku["IBLOCK_ID"], $arPropsSku); static::setHitCache('PRODUCT_PROPERTY', $proxyProductPropertyKey, $product_properties); } foreach ($product_properties as $propData) { $arItem["PROPS"][] = array("NAME" => $propData["NAME"], "CODE" => $propData["CODE"], "VALUE" => $propData["VALUE"], "SORT" => $propData["SORT"]); } } $arSets[$k]["ITEMS"][$k1] = array_merge($item, $arItem); } } if (!($productList = static::getHitCache('IBLOCK_ELEMENT_LIST', $productID))) { $rsProducts = CIBlockElement::GetList(array(), array('ID' => $arProductId), false, false, array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "IBLOCK_TYPE_ID", "XML_ID")); while ($arProduct = $rsProducts->GetNext()) { $productList[] = $arProduct; } if (!empty($productList) && is_array($productList)) { static::setHitCache('IBLOCK_ELEMENT_LIST', $productID, $productList); } } if (!empty($productList) && is_array($productList)) { foreach ($productList as $arProduct) { foreach ($arSets as $k => $arSet) { foreach ($arSet["ITEMS"] as $k1 => $item) { if ($item["ITEM_ID"] == $arProduct["ID"]) { $arProps = array(); $strIBlockXmlID = strval(CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID')); if ($strIBlockXmlID != "") { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"]); $arSets["{$k}"]["ITEMS"][$k1]["IBLOCK_ID"] = $arProduct["IBLOCK_ID"]; $arSets["{$k}"]["ITEMS"][$k1]["IBLOCK_SECTION_ID"] = $arProduct["IBLOCK_SECTION_ID"]; $arSets["{$k}"]["ITEMS"][$k1]["PREVIEW_PICTURE"] = $arProduct["PREVIEW_PICTURE"]; $arSets["{$k}"]["ITEMS"][$k1]["DETAIL_PICTURE"] = $arProduct["DETAIL_PICTURE"]; $arSets["{$k}"]["ITEMS"][$k1]["PROPS"] = array_merge($arSets["{$k}"]["ITEMS"][$k1]["PROPS"], $arProps); } } } } } } foreach (GetModuleEvents("sale", "OnGetSetItems", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arSets)); } return $arSets; }
$viewedMessage = ""; } else { $dbProduct = CIBlockElement::GetList(array(), array("ID" => $PRODUCT_ID), false, false, array('ID', 'NAME', "XML_ID", "IBLOCK_EXTERNAL_ID")); $arProduct = $dbProduct->Fetch(); $arViews['NAME'] = $arProduct["NAME"]; $arViews['PRODUCT_ID'] = $arProduct["ID"]; $arViews['MODULE'] = "catalog"; $arViews["LID"] = $LID; } } else { $dbViewsList = CSaleViewedProduct::GetList(array(), array("FUSER_ID" => $arFuserItems["ID"], "PRODUCT_ID" => $PRODUCT_ID), false, false); $arViews = $dbViewsList->Fetch(); } if (strlen($viewedError) <= 0) { $arFields = array("PROPS" => array()); $arParentSku = CCatalogSku::GetProductInfo($PRODUCT_ID); if ($arParentSku && count($arParentSku) > 0) { $arPropsSku = array(); $dbProduct = CIBlockElement::GetList(array(), array("ID" => $PRODUCT_ID), false, false, array('IBLOCK_ID')); $arProduct = $dbProduct->Fetch(); $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK")); while ($arOfferProperties = $dbOfferProperties->Fetch()) { $arPropsSku[] = $arOfferProperties["CODE"]; } $arFields["PROPS"] = CIBlockPriceTools::GetOfferProperties($PRODUCT_ID, $arParentSku["IBLOCK_ID"], $arPropsSku); } $arFields["USER_ID"] = $ID; $arFields["PRODUCT_ID"] = $PRODUCT_ID; $arFields["PRICE"] = $arViews["PRICE"]; $arFields["CURRENCY"] = $arViews["CURRENCY"]; $arFields["QUANTITY"] = 1;
"QUANTITY", "NAME", "MODULE", "CALLBACK_FUNC", "NOTES", "DETAIL_PAGE_URL", "DISCOUNT_PRICE", "DISCOUNT_VALUE", "ORDER_CALLBACK_FUNC", "CANCEL_CALLBACK_FUNC", "PAY_CALLBACK_FUNC", "CATALOG_XML_ID", "PRODUCT_XML_ID", "VAT_RATE", "DISCOUNT_NAME", "DISCOUNT_COUPON", "PRODUCT_PROVIDER_CLASS", "CUSTOM_PRICE", "TYPE", "SET_PARENT_ID", "DIMENSIONS", "RECOMMENDATION" ) ); while ($arBasketTmp = $dbBasketTmp->GetNext()) { $arBasketId[] = $arBasketTmp["ID"]; $arBasketTmp["DIMENSIONS"] = unserialize($arBasketTmp["~DIMENSIONS"]); $arBasketItems[] = $arBasketTmp; if (CModule::IncludeModule("catalog")) { $arParent = CCatalogSku::GetProductInfo($arBasketTmp["PRODUCT_ID"]); if ($arParent) { $arElementId[] = $arParent["ID"]; $arSku2Parent[$arBasketTmp["PRODUCT_ID"]] = $arParent["ID"]; } } $arElementId[] = $arBasketTmp["PRODUCT_ID"]; $arBasketPropsValues[$arBasketTmp["PRODUCT_ID"]] = array(); if (!CSaleBasketHelper::isSetItem($arBasketTmp)) $orderTotalPrice += ($arBasketTmp["PRICE"] + $arBasketTmp["DISCOUNT_PRICE"]) * $arBasketTmp["QUANTITY"]; if (!CSaleBasketHelper::isSetParent($arBasketTmp)) {
/** * @param int $intProductID * @param array $arRewriteFields * @param array $arProductParams * @return bool|int */ function SubscribeProduct($intProductID, $arRewriteFields = array(), $arProductParams = array()) { global $USER, $APPLICATION; if (!CCatalog::IsUserExists()) { return false; } if (!$USER->IsAuthorized()) { return false; } $intUserID = (int) $USER->GetID(); $intProductID = (int) $intProductID; if ($intProductID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } if (!Loader::includeModule("sale")) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (Loader::includeModule("statistic") && isset($_SESSION['SESS_SEARCHER_ID']) && (int) $_SESSION["SESS_SEARCHER_ID"] > 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $intProductID), false, false, array('ID', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'TYPE', 'MEASURE', 'SUBSCRIBE')); if (!($arCatalogProduct = $rsProducts->Fetch())) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } if ($arCatalogProduct['SUBSCRIBE'] == 'N') { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_SUBSCRIBE'), 'SUBSCRIBE'); return false; } $arCatalogProduct['MEASURE'] = (int) $arCatalogProduct['MEASURE']; $arCatalogProduct['MEASURE_NAME'] = ''; $arCatalogProduct['MEASURE_CODE'] = 0; if ($arCatalogProduct['MEASURE'] <= 0) { $arMeasure = CCatalogMeasure::getDefaultMeasure(true, true); $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } else { $rsMeasures = CCatalogMeasure::getList(array(), array('ID' => $arCatalogProduct['MEASURE']), false, false, array('ID', 'SYMBOL_RUS', 'CODE')); if ($arMeasure = $rsMeasures->GetNext()) { $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } } $rsItems = CIBlockElement::GetList(array(), array("ID" => $intProductID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'XML_ID', 'DETAIL_PAGE_URL')); if (!($arProduct = $rsItems->GetNext())) { return false; } $arParentSku = CCatalogSku::GetProductInfo($intProductID, $arProduct['IBLOCK_ID']); if (!empty($arParentSku)) { if (strpos($arProduct["~XML_ID"], '#') === false) { $parentIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'XML_ID'), 'filter' => array('ID' => $arParentSku['ID']))); if ($parent = $parentIterator->fetch()) { $arProduct["~XML_ID"] = $parent['XML_ID'] . '#' . $arProduct["~XML_ID"]; } unset($parent, $parentIterator); } } $arPrice = array('PRICE' => 0.0, 'CURRENCY' => CSaleLang::GetLangCurrency(SITE_ID), 'VAT_RATE' => 0, 'PRODUCT_PRICE_ID' => 0, 'CATALOG_GROUP_NAME' => ''); $arBuyerGroups = $USER->GetUserGroupArray(); $arSubscrPrice = CCatalogProduct::GetOptimalPrice($intProductID, 1, $arBuyerGroups, "N", array(), SITE_ID, array()); if (!empty($arSubscrPrice) && is_array($arSubscrPrice)) { $arPrice['PRICE'] = $arSubscrPrice['DISCOUNT_PRICE']; $arPrice['CURRENCY'] = CCurrency::GetBaseCurrency(); $arPrice['VAT_RATE'] = $arSubscrPrice['PRICE']['VAT_RATE']; $arPrice['PRODUCT_PRICE_ID'] = $arSubscrPrice["PRICE"]["ID"]; $arPrice['CATALOG_GROUP_NAME'] = $arSubscrPrice["PRICE"]["CATALOG_GROUP_NAME"]; } $arProps = array(); $strIBlockXmlID = (string) CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID'); if ($strIBlockXmlID !== '') { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID); } if (!empty($arProductParams) && is_array($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array("NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"]); } unset($arOneProductParams); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"]); $arFields = array("PRODUCT_ID" => $intProductID, "PRODUCT_PRICE_ID" => $arPrice['PRODUCT_PRICE_ID'], "PRICE" => $arPrice['PRICE'], "CURRENCY" => $arPrice['CURRENCY'], "WEIGHT" => $arCatalogProduct["WEIGHT"], "DIMENSIONS" => serialize(array("WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"])), "QUANTITY" => 1, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "N", "SUBSCRIBE" => "Y", "NAME" => $arProduct["~NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arProduct["~DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $strIBlockXmlID, "PRODUCT_XML_ID" => $arProduct["~XML_ID"], "PROPS" => $arProps, "TYPE" => $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : NULL, "MEASURE_NAME" => $arCatalogProduct['MEASURE_NAME'], "MEASURE_CODE" => $arCatalogProduct['MEASURE_CODE'], 'IGNORE_CALLBACK_FUNC' => 'Y'); if (!empty($arRewriteFields) && is_array($arRewriteFields)) { if (array_key_exists('SUBSCRIBE', $arRewriteFields)) { unset($arRewriteFields['SUBSCRIBE']); } if (array_key_exists('CAN_BUY', $arRewriteFields)) { unset($arRewriteFields['CAN_BUY']); } if (array_key_exists('DELAY', $arRewriteFields)) { unset($arRewriteFields['DELAY']); } if (!empty($arRewriteFields)) { $arFields = array_merge($arFields, $arRewriteFields); } } $mxBasketID = CSaleBasket::Add($arFields); if ($mxBasketID) { if (!isset($_SESSION['NOTIFY_PRODUCT'])) { $_SESSION['NOTIFY_PRODUCT'] = array($intUserID = array()); } elseif (!isset($_SESSION['NOTIFY_PRODUCT'][$intUserID])) { $_SESSION['NOTIFY_PRODUCT'][$intUserID] = array(); } $_SESSION["NOTIFY_PRODUCT"][$intUserID][$intProductID] = $intProductID; if (Loader::includeModule("statistic")) { CStatistic::Set_Event("sale2basket", "subscribe", $intProductID); } } return $mxBasketID; }
$arProductImg = array(); $hidden = ""; $setItemClass = ""; if (CSaleBasketHelper::isSetItem($val)) { $hidden = "style=\"display:none\""; $setItemClass = "class=\"set_item_".$val["SET_PARENT_ID"]."\""; } if ($bUseIblock) { $arProductImg["PREVIEW_PICTURE"] = $arProductData[$val["PRODUCT_ID"]]["PREVIEW_PICTURE"]; $arProductImg["DETAIL_PICTURE"] = $arProductData[$val["PRODUCT_ID"]]["DETAIL_PICTURE"]; if ($bUseCatalog) $arParent = CCatalogSku::GetProductInfo($val["PRODUCT_ID"]); if ($arParent) { if (empty($arProductImg["PREVIEW_PICTURE"])) $arProductImg["PREVIEW_PICTURE"] = $arProductData[$arParent["ID"]]["PREVIEW_PICTURE"]; if (empty($arProductImg["DETAIL_PICTURE"])) $arProductImg["DETAIL_PICTURE"] = $arProductData[$arParent["ID"]]["DETAIL_PICTURE"]; } if($arProductImg["PREVIEW_PICTURE"] != "") $productImg = $arProductImg["PREVIEW_PICTURE"]; elseif($arProductImg["DETAIL_PICTURE"] != "") $productImg = $arProductImg["DETAIL_PICTURE"]; }
$arFilter["FUSER_ID"] = CSaleBasket::GetBasketUserID(); $arGroups = $USER->GetUserGroupArray(); //add to busket if (array_key_exists($arParams["ACTION_VARIABLE"], $_REQUEST) && array_key_exists($arParams["PRODUCT_ID_VARIABLE"], $_REQUEST)) { if (array_key_exists($arParams["ACTION_VARIABLE"] . "BUY", $_REQUEST)) { $action = "BUY"; } elseif (array_key_exists($arParams["ACTION_VARIABLE"] . "ADD2BASKET", $_REQUEST)) { $action = "ADD2BASKET"; } else { $action = ToUpper($_REQUEST[$arParams["ACTION_VARIABLE"]]); } $productID = intval($_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]]); //get props sku $product_properties = array(); $arPropsSku = array(); $arParentSku = CCatalogSku::GetProductInfo($productID); if ($arParentSku && count($arParentSku) > 0) { $dbProduct = CIBlockElement::GetList(array(), array("ID" => $productID), false, false, array('IBLOCK_ID', 'IBLOCK_SECTION_ID')); $arProduct = $dbProduct->Fetch(); $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK")); while ($arOfferProperties = $dbOfferProperties->Fetch()) { $arPropsSku[] = $arOfferProperties["CODE"]; } $product_properties = CIBlockPriceTools::GetOfferProperties($productID, $arParentSku["IBLOCK_ID"], $arPropsSku); } if (($action == "ADD2BASKET" || $action == "BUY") && $productID > 0) { if (CModule::IncludeModule('catalog')) { Add2BasketByProductID($productID, 1, array(), $product_properties); } if ($action == "BUY") { LocalRedirect($arParams["BASKET_URL"]);
/** * Function gets order basket info from the database * @param mixed[] Cached data taken from obtainDataCachedStructure() * @return void */ protected function obtainBasket(&$cached) { if (empty($this->dbResult["ID"])) { return; } $basket = array(); $arSetParentWeight = array(); $dbBasket = CSaleBasket::GetList(array("NAME" => "ASC"), array("ORDER_ID" => $this->dbResult["ID"]), false, false, array("ID", "DETAIL_PAGE_URL", "NAME", "NOTES", "QUANTITY", "PRICE", "CURRENCY", "PRODUCT_ID", "DISCOUNT_PRICE", "WEIGHT", "CATALOG_XML_ID", "VAT_RATE", "PRODUCT_XML_ID", "TYPE", "SET_PARENT_ID", "MEASURE_CODE", "MEASURE_NAME", "MODULE")); while ($arItem = $dbBasket->Fetch()) { if (CSaleBasketHelper::isSetItem($arItem)) { continue; } if ($this->useCatalog && $this->cameFromCatalog($arItem)) { $arParent = CCatalogSku::GetProductInfo($arItem["PRODUCT_ID"]); if (!empty($arParent)) { $arItem['PARENT'] = $arParent; } } // adjust some sale params $arItem["PRICE_VAT_VALUE"] = $arItem["PRICE"] / ($arItem["VAT_RATE"] + 1) * $arItem["VAT_RATE"]; $arItem["WEIGHT"] = doubleval($arItem["WEIGHT"]); // weight manipulation for product that has type "SET" (nabor) if (CSaleBasketHelper::isSetItem($arItem)) { $arSetParentWeight[$arItem["SET_PARENT_ID"]] += $arItem["WEIGHT"] * $arItem["QUANTITY"]; } if (CSaleBasketHelper::isSetParent($arItem)) { $arItem["WEIGHT"] = $arSetParentWeight[$arItem["ID"]] / $arItem["QUANTITY"]; } $basket[] = $arItem; } // fetching all properties $this->obtainBasketProps($basket); $cached["BASKET"] = $basket; }
public static function GetSetItems($productID, $intType, $arProducInfo = array()) { $arProductId = array(); $arSets = CCatalogProductSet::getAllSetsByProduct($productID, $intType); if (is_array($arSets)) { foreach ($arSets as $k => $arSet) { foreach ($arSet["ITEMS"] as $k1 => $item) { $arItem = self::GetProductData(array("PRODUCT_ID" => $item["ITEM_ID"], "QUANTITY" => $item["QUANTITY"], "CHECK_QUANTITY" => "N", "CHECK_PRICE" => "N")); $arItem["PRODUCT_ID"] = $item["ITEM_ID"]; $arItem["MODULE"] = "catalog"; $arItem["PRODUCT_PROVIDER_CLASS"] = "CCatalogProductProvider"; if ($intType == CCatalogProductSet::TYPE_SET) { $arItem['SET_DISCOUNT_PERCENT'] = ($item['DISCOUNT_PERCENT'] == '' ? false : (float)$item['DISCOUNT_PERCENT']); } $arProductId[] = $item["ITEM_ID"]; $arItem["PROPS"] = array(); $arParentSku = CCatalogSku::GetProductInfo($item["ITEM_ID"]); if (!empty($arParentSku)) { $arPropsSku = array(); $dbProduct = CIBlockElement::GetList(array(), array("ID" => $item["ITEM_ID"]), false, false, array('IBLOCK_ID', 'IBLOCK_SECTION_ID')); $arProduct = $dbProduct->Fetch(); $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK")); while($arOfferProperties = $dbOfferProperties->Fetch()) $arPropsSku[] = $arOfferProperties["CODE"]; $product_properties = CIBlockPriceTools::GetOfferProperties( $item["ITEM_ID"], $arParentSku["IBLOCK_ID"], $arPropsSku ); foreach ($product_properties as $propData) { $arItem["PROPS"][] = array( "NAME" => $propData["NAME"], "CODE" => $propData["CODE"], "VALUE" => $propData["VALUE"], "SORT" => $propData["SORT"] ); } } $arSets[$k]["ITEMS"][$k1] = array_merge($item, $arItem); } } $rsProducts = CIBlockElement::GetList( array(), array('ID' => $arProductId), false, false, array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "IBLOCK_TYPE_ID", "XML_ID") ); while ($arProduct = $rsProducts->GetNext()) { foreach ($arSets as $k => $arSet) { foreach ($arSet["ITEMS"] as $k1 => $item) { if ($item["ITEM_ID"] == $arProduct["ID"]) { $arProps = array(); $strIBlockXmlID = strval(CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID')); if ($strIBlockXmlID != "") { $arProps[] = array( "NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID ); } $arProps[] = array( "NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"] ); $arSets["$k"]["ITEMS"][$k1]["IBLOCK_ID"] = $arProduct["IBLOCK_ID"]; $arSets["$k"]["ITEMS"][$k1]["IBLOCK_SECTION_ID"] = $arProduct["IBLOCK_SECTION_ID"]; $arSets["$k"]["ITEMS"][$k1]["PREVIEW_PICTURE"] = $arProduct["PREVIEW_PICTURE"]; $arSets["$k"]["ITEMS"][$k1]["DETAIL_PICTURE"] = $arProduct["DETAIL_PICTURE"]; $arSets["$k"]["ITEMS"][$k1]["PROPS"] = array_merge($arSets["$k"]["ITEMS"][$k1]["PROPS"], $arProps); } } } } } foreach(GetModuleEvents("sale", "OnGetSetItems", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arSets)); return $arSets; }