Ejemplo n.º 1
0
 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;
     }
 }
Ejemplo n.º 2
0
 if (!isset($arParams["OFFERS_PROPERTY_CODE"])) {
     $arParams["OFFERS_PROPERTY_CODE"] = array();
 } elseif (!is_array($arParams["OFFERS_PROPERTY_CODE"])) {
     $arParams["OFFERS_PROPERTY_CODE"] = array($arParams["OFFERS_PROPERTY_CODE"]);
 }
 foreach ($arParams["OFFERS_PROPERTY_CODE"] as $key => $value) {
     if ($value === "") {
         unset($arParams["OFFERS_PROPERTY_CODE"][$key]);
     }
 }
 if ($bCatalog && !empty($arResult["ELEMENTS"]) && (!empty($arParams["OFFERS_FIELD_CODE"]) || !empty($arParams["OFFERS_PROPERTY_CODE"]))) {
     $offersFilter = array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'HIDE_NOT_AVAILABLE' => $arParams['HIDE_NOT_AVAILABLE']);
     if (!$arParams["USE_PRICE_COUNT"]) {
         $offersFilter['SHOW_PRICE_COUNT'] = $arParams['SHOW_PRICE_COUNT'];
     }
     $arOffers = CIBlockPriceTools::GetOffersArray($offersFilter, $arResult["ELEMENTS"], array($arParams["OFFERS_SORT_FIELD"] => $arParams["OFFERS_SORT_ORDER"], $arParams["OFFERS_SORT_FIELD2"] => $arParams["OFFERS_SORT_ORDER2"]), $arParams["OFFERS_FIELD_CODE"], $arParams["OFFERS_PROPERTY_CODE"], $arParams["OFFERS_LIMIT"], $arResult["PRICES"], $arParams['PRICE_VAT_INCLUDE'], $arConvertParams);
     if (!empty($arOffers)) {
         foreach ($arResult["ELEMENTS"] as $id) {
             $arElementLink[$id]['OFFERS'] = array();
         }
         unset($id);
         foreach ($arOffers as $arOffer) {
             if (isset($arElementLink[$arOffer["LINK_ELEMENT_ID"]])) {
                 $arOffer['~BUY_URL'] = str_replace('#ID#', $arOffer["ID"], $arResult['~BUY_URL_TEMPLATE']);
                 $arOffer['BUY_URL'] = str_replace('#ID#', $arOffer["ID"], $arResult['BUY_URL_TEMPLATE']);
                 $arOffer['~ADD_URL'] = str_replace('#ID#', $arOffer["ID"], $arResult['~ADD_URL_TEMPLATE']);
                 $arOffer['ADD_URL'] = str_replace('#ID#', $arOffer["ID"], $arResult['ADD_URL_TEMPLATE']);
                 if ($arParams['DISPLAY_COMPARE']) {
                     $arOffer['~COMPARE_URL'] = str_replace('#ID#', $arOffer["ID"], $arResult['~COMPARE_URL_TEMPLATE']);
                     $arOffer['COMPARE_URL'] = str_replace('#ID#', $arOffer["ID"], $arResult['COMPARE_URL_TEMPLATE']);
                 }
Ejemplo n.º 3
0
		!empty($arResult["ELEMENTS"])
		&& (
			!empty($arParams["OFFERS_FIELD_CODE"])
			|| !empty($arParams["OFFERS_PROPERTY_CODE"])
		)
	)
	{
		$arOffers = CIBlockPriceTools::GetOffersArray(
			array(
				'IBLOCK_ID' => $arParams["IBLOCK_ID"],
				'HIDE_NOT_AVAILABLE' => $arParams['HIDE_NOT_AVAILABLE'],
			)
			,$arResult["ELEMENTS"]
			,array(
				$arParams["OFFERS_SORT_FIELD"] => $arParams["OFFERS_SORT_ORDER"],
				$arParams["OFFERS_SORT_FIELD2"] => $arParams["OFFERS_SORT_ORDER2"],
			)
			,$arParams["OFFERS_FIELD_CODE"]
			,$arParams["OFFERS_PROPERTY_CODE"]
			,$arParams["OFFERS_LIMIT"]
			,$arResult["PRICES"]
			,$arParams['PRICE_VAT_INCLUDE']
			,$arConvertParams
		);
		if(!empty($arOffers))
		{
			$arElementOffer = array();
			foreach($arResult["ELEMENTS"] as $i => $id)
			{
				$arResult["ITEMS"][$i]["OFFERS"] = array();
				$arElementOffer[$id] = &$arResult["ITEMS"][$i]["OFFERS"];
/**
 * @param $userId
 * @param $lid
 * @param $productId
 * @param string $productName
 * @param string $currency
 * @param array $arProduct
 * @return array|bool
 */
function GetProductSku($userId, $lid, $productId, $productName = '', $currency = '', $arProduct = array())
{
    $userId = intval($userId);
    $productId = intval($productId);
    if ($productId <= 0) {
        return false;
    }
    $lid = trim($lid);
    if (strlen($lid) <= 0) {
        return false;
    }
    $productName = trim($productName);
    $arResult = array();
    static $arCacheGroups = array();
    if (!isset($arCacheGroups[$userId])) {
        $arCacheGroups[$userId] = CUser::GetUserGroup($userId);
    }
    $arGroups = $arCacheGroups[$userId];
    if (!isset($arProduct["IBLOCK_ID"]) || 0 >= intval($arProduct["IBLOCK_ID"])) {
        $arProduct["IBLOCK_ID"] = CIBlockElement::GetIBlockByID($arProduct["IBLOCK_ID"]);
    }
    static $arOffersIblock = array();
    if (!isset($arOffersIblock[$arProduct["IBLOCK_ID"]])) {
        $mxResult = CCatalogSKU::GetInfoByProductIBlock($arProduct["IBLOCK_ID"]);
        if (is_array($mxResult)) {
            $arOffersIblock[$arProduct["IBLOCK_ID"]] = $mxResult["IBLOCK_ID"];
        }
    }
    if ($arOffersIblock[$arProduct["IBLOCK_ID"]] > 0) {
        static $arCacheOfferProperties = array();
        if (!is_set($arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]])) {
            $dbOfferProperties = CIBlockProperty::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('IBLOCK_ID' => $arOffersIblock[$arProduct["IBLOCK_ID"]], 'ACTIVE' => 'Y', "!XML_ID" => "CML2_LINK"));
            while ($arOfferProperties = $dbOfferProperties->Fetch()) {
                if ('F' == $arOfferProperties['PROPERTY_TYPE']) {
                    continue;
                }
                $arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]][] = $arOfferProperties;
            }
        }
        $arOfferProperties = $arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]];
        $arIblockOfferProps = array();
        $arIblockOfferPropsFilter = array();
        if (is_array($arOfferProperties)) {
            foreach ($arOfferProperties as $val) {
                $arIblockOfferProps[] = array("CODE" => $val["CODE"], "NAME" => $val["NAME"]);
                $arIblockOfferPropsFilter[] = $val["CODE"];
            }
        }
        $arOffers = CIBlockPriceTools::GetOffersArray($arProduct["IBLOCK_ID"], $productId, array("ID" => "DESC"), array("NAME", "EXTERNAL_ID"), $arIblockOfferPropsFilter, 0, array(), 1, array(), $userId, $lid);
        $arSku = array();
        $arSkuId = array();
        $arImgSku = array();
        foreach ($arOffers as $arOffer) {
            $arSkuId[] = $arOffer['ID'];
        }
        if (!empty($arSkuId)) {
            $res = CIBlockElement::GetList(array(), array("ID" => $arSkuId), false, false, array("ID", "IBLOCK_ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE", "DETAIL_PAGE_URL", "ACTIVE"));
            while ($arOfferImg = $res->GetNext()) {
                $arImgSku[$arOfferImg["ID"]] = $arOfferImg;
            }
        }
        $arOffersId = array();
        foreach ($arOffers as $arOffer) {
            $arOffersId[] = $arOffer['ID'];
        }
        $dbCatalogProduct = CCatalogProduct::GetList(array(), array("ID" => $arOffersId));
        while ($arCatalogProduct = $dbCatalogProduct->fetch()) {
            $arCatalogProductResult[$arCatalogProduct["ID"]] = $arCatalogProduct;
        }
        foreach ($arOffers as $arOffer) {
            $arSkuTmp = array();
            $active = '';
            $arOffer["CAN_BUY"] = "N";
            $arCatalogProduct = $arCatalogProductResult[$arOffer["ID"]];
            if (!empty($arCatalogProduct)) {
                if ($arCatalogProduct["CAN_BUY_ZERO"] != "Y" && ($arCatalogProduct["QUANTITY_TRACE"] == "Y" && doubleval($arCatalogProduct["QUANTITY"]) <= 0)) {
                    $arOffer["CAN_BUY"] = "N";
                } else {
                    $arOffer["CAN_BUY"] = "Y";
                }
            }
            $arSkuTmp["ImageUrl"] = '';
            if ($arOffer["CAN_BUY"] == "Y") {
                if (isset($arImgSku[$arOffer['ID']]) && !empty($arImgSku[$arOffer['ID']])) {
                    if ('' == $productName) {
                        $productName = $arImgSku[$arOffer['ID']]["~NAME"];
                    }
                    $active = $arImgSku[$arOffer['ID']]["ACTIVE"];
                    if ($arImgSku[$arOffer['ID']]["PREVIEW_PICTURE"] != "") {
                        $arSkuTmp["PREVIEW_PICTURE"] = $arImgSku[$arOffer['ID']]["PREVIEW_PICTURE"];
                    }
                    if ($arImgSku[$arOffer['ID']]["DETAIL_PICTURE"] != "") {
                        $arSkuTmp["DETAIL_PICTURE"] = $arImgSku[$arOffer['ID']]["DETAIL_PICTURE"];
                    }
                }
            }
            foreach ($arIblockOfferProps as $arCode) {
                if (is_array($arCode) && isset($arOffer["PROPERTIES"][$arCode["CODE"]])) {
                    if (isset($arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]])) {
                        $mxValues = '';
                        if ('E' == $arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]]['PROPERTY_TYPE']) {
                            if (!empty($arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]]['LINK_ELEMENT_VALUE'])) {
                                $mxValues = array();
                                foreach ($arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]]['LINK_ELEMENT_VALUE'] as $arTempo) {
                                    $mxValues[] = $arTempo['NAME'] . ' [' . $arTempo['ID'] . ']';
                                }
                            }
                        } elseif ('G' == $arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]]['PROPERTY_TYPE']) {
                            if (!empty($arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]]['LINK_SECTION_VALUE'])) {
                                $mxValues = array();
                                foreach ($arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]]['LINK_SECTION_VALUE'] as $arTempo) {
                                    $mxValues[] = $arTempo['NAME'] . ' [' . $arTempo['ID'] . ']';
                                }
                            }
                        }
                        if (empty($mxValues)) {
                            $mxValues = $arOffer["DISPLAY_PROPERTIES"][$arCode["CODE"]]["DISPLAY_VALUE"];
                        }
                        $arSkuTmp[] = strip_tags(is_array($mxValues) ? implode("/ ", $mxValues) : $mxValues);
                    } else {
                        $arSkuTmp[] = '';
                    }
                }
            }
            if (!empty($arCatalogProduct)) {
                $arSkuTmp["BALANCE"] = $arCatalogProduct["QUANTITY"];
                $arSkuTmp["WEIGHT"] = $arCatalogProduct["WEIGHT"];
                $arSkuTmp["BARCODE_MULTI"] = $arCatalogProduct["BARCODE_MULTI"];
            } else {
                $arSkuTmp["BALANCE"] = 0;
                $arSkuTmp["WEIGHT"] = 0;
                $arSkuTmp["BARCODE_MULTI"] = 'N';
            }
            $arSkuTmp["USER_ID"] = $userId;
            $arSkuTmp["ID"] = $arOffer["ID"];
            $arSkuTmp["TYPE"] = $arOffer["CATALOG_TYPE"];
            $arSkuTmp["NAME"] = CUtil::JSEscape($arOffer["NAME"]);
            $arSkuTmp["PRODUCT_NAME"] = CUtil::JSEscape(htmlspecialcharsbx($productName));
            $arSkuTmp["PRODUCT_ID"] = $productId;
            $arSkuTmp["LID"] = CUtil::JSEscape($lid);
            $arSkuTmp["CAN_BUY"] = $arOffer["CAN_BUY"];
            $arSkuTmp["ACTIVE"] = $active;
            $arSkuTmp["EXTERNAL_ID"] = $arOffer['EXTERNAL_ID'];
            $arSku[] = $arSkuTmp;
        }
        if ((!is_array($arIblockOfferProps) || empty($arIblockOfferProps)) && is_array($arSku) && !empty($arSku)) {
            $arIblockOfferProps[0] = array("CODE" => "TITLE", "NAME" => GetMessage("SKU_TITLE"));
            foreach ($arSku as $key => $val) {
                $arSku[$key][0] = $val["NAME"];
            }
        }
        $arResult["SKU_ELEMENTS"] = $arSku;
        $arResult["SKU_PROPERTIES"] = $arIblockOfferProps;
        $arResult["OFFERS_IBLOCK_ID"] = $arOffersIblock[$arProduct["IBLOCK_ID"]];
    }
    return $arResult;
}
Ejemplo n.º 5
0
	if(
		!empty($arResult["ELEMENTS"])
		&& (
			!empty($arParams["OFFERS_FIELD_CODE"])
			|| !empty($arParams["OFFERS_PROPERTY_CODE"])
		)
	)
	{
		$arOffers = CIBlockPriceTools::GetOffersArray(
			$arParams["IBLOCK_ID"]
			,$arResult["ELEMENTS"]
			,array(
				$arParams["OFFERS_SORT_FIELD"] => $arParams["OFFERS_SORT_ORDER"],
				"ID" => "DESC",
			)
			,$arParams["OFFERS_FIELD_CODE"]
			,$arParams["OFFERS_PROPERTY_CODE"]
			,$arParams["OFFERS_LIMIT"]
			,$arResult["PRICES"]
			,$arParams['PRICE_VAT_INCLUDE']
			,$arConvertParams
		);
		if(!empty($arOffers))
		{
			$arElementOffer = array();
			foreach($arResult["ELEMENTS"] as $i => $id)
			{
				$arResult["ITEMS"][$i]["OFFERS"] = array();
				$arElementOffer[$id] = &$arResult["ITEMS"][$i]["OFFERS"];
			}
Ejemplo n.º 6
0
 /**
  * get sku for product.
  *
  * @param integer $USER_ID				User.
  * @param string  $LID					Site.
  * @param integer $PRODUCT_ID			Product id.
  * @param string  $PRODUCT_NAME			Product name.
  * @param string CURRENCY				Currency.
  * @param array $arProduct				Iblock list.
  * @return array|false
  */
 function GetProductSku($USER_ID, $LID, $PRODUCT_ID, $PRODUCT_NAME = '', $CURRENCY = '', $arProduct = array())
 {
     $USER_ID = (int) $USER_ID;
     $PRODUCT_ID = (int) $PRODUCT_ID;
     if ($PRODUCT_ID <= 0) {
         return false;
     }
     $LID = trim($LID);
     if ($LID == '') {
         return false;
     }
     $PRODUCT_NAME = trim($PRODUCT_NAME);
     $arResult = array();
     $arOffers = array();
     static $arCacheGroups = array();
     if (!is_set($arCacheGroups[$USER_ID])) {
         $arCacheGroups[$USER_ID] = CUser::GetUserGroup($USER_ID);
     }
     $arGroups = $arCacheGroups[$USER_ID];
     if (empty($arProduct)) {
         $arProduct = CSaleProduct::GetProductListIblockInfo(array($PRODUCT_ID));
     }
     static $arOffersIblock = array();
     if (!is_set($arOffersIblock[$arProduct["IBLOCK_ID"]])) {
         $mxResult = CCatalogSKU::GetInfoByProductIBlock($arProduct["IBLOCK_ID"]);
         if (is_array($mxResult)) {
             $arOffersIblock[$arProduct["IBLOCK_ID"]] = $mxResult["IBLOCK_ID"];
         }
     }
     if ($arOffersIblock[$arProduct["IBLOCK_ID"]] > 0) {
         static $arCacheOfferProperties = array();
         if (!is_set($arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]])) {
             $dbOfferProperties = CIBlock::GetProperties($arOffersIblock[$arProduct["IBLOCK_ID"]], array(), array("!XML_ID" => "CML2_LINK"));
             while ($arOfferProperties = $dbOfferProperties->Fetch()) {
                 $arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]][] = $arOfferProperties;
             }
         }
         $arOfferProperties = $arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]];
         $arIblockOfferProps = array();
         $arIblockOfferPropsFilter = array();
         if (is_array($arOfferProperties)) {
             foreach ($arOfferProperties as $val) {
                 $arIblockOfferProps[] = array("CODE" => $val["CODE"], "NAME" => $val["NAME"]);
                 $arIblockOfferPropsFilter[] = $val["CODE"];
             }
         }
         $arOffers = CIBlockPriceTools::GetOffersArray($arProduct["IBLOCK_ID"], $PRODUCT_ID, array("ID" => "DESC"), array("NAME"), $arIblockOfferPropsFilter, 0, array(), 1, array(), $USER_ID, $LID);
         $arSku = array();
         $minItemPrice = 0;
         $minItemPriceFormat = "";
         $arSkuId = array();
         $arImgSku = array();
         foreach ($arOffers as $arOffer) {
             $arSkuId[] = $arOffer['ID'];
         }
         if (!empty($arSkuId)) {
             $res = CIBlockElement::GetList(array(), array("ID" => $arSkuId), false, false, array("ID", "IBLOCK_ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE", "DETAIL_PAGE_URL"));
             while ($arOfferImg = $res->GetNext()) {
                 $arImgSku[$arOfferImg["ID"]] = $arOfferImg;
             }
         }
         foreach ($arOffers as $arOffer) {
             $arPrice = CCatalogProduct::GetOptimalPrice($arOffer['ID'], 1, $arGroups, "N", array(), $LID);
             if (empty($arPrice)) {
                 break;
             } elseif (strlen($CURRENCY) > 0) {
                 $arPrice["PRICE"]["PRICE"] = CCurrencyRates::ConvertCurrency($arPrice["PRICE"]["PRICE"], $arPrice["PRICE"]["CURRENCY"], $CURRENCY);
                 if ($arPrice["DISCOUNT_PRICE"] > 0) {
                     $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice["DISCOUNT_PRICE"], $arPrice["PRICE"]["CURRENCY"], $CURRENCY);
                 }
                 $arPrice["PRICE"]["CURRENCY"] = $CURRENCY;
             }
             $arSkuTmp = array();
             $arOffer["CAN_BUY"] = "N";
             $arCatalogProduct = CCatalogProduct::GetByID($arOffer['ID']);
             if (!empty($arCatalogProduct)) {
                 if ($arCatalogProduct["CAN_BUY_ZERO"] != "Y" && ($arCatalogProduct["QUANTITY_TRACE"] == "Y" && doubleval($arCatalogProduct["QUANTITY"]) <= 0)) {
                     $arOffer["CAN_BUY"] = "N";
                 } else {
                     $arOffer["CAN_BUY"] = "Y";
                 }
             }
             $arSkuTmp["ImageUrl"] = '';
             if ($arOffer["CAN_BUY"] == "Y") {
                 $productImg = "";
                 if (isset($arImgSku[$arOffer['ID']]) && !empty($arImgSku[$arOffer['ID']])) {
                     if ('' == $PRODUCT_NAME) {
                         $PRODUCT_NAME = $arImgSku[$arOffer['ID']]["~NAME"];
                     }
                     if ($arImgSku[$arOffer['ID']]["PREVIEW_PICTURE"] != "") {
                         $productImg = $arImgSku[$arOffer['ID']]["PREVIEW_PICTURE"];
                     } elseif ($arImgSku[$arOffer['ID']]["DETAIL_PICTURE"] != "") {
                         $productImg = $arImgSku[$arOffer['ID']]["DETAIL_PICTURE"];
                     }
                     if ($productImg == "") {
                         if ($arProduct["PREVIEW_PICTURE"] != "") {
                             $productImg = $arProduct["PREVIEW_PICTURE"];
                         } elseif ($arProduct["DETAIL_PICTURE"] != "") {
                             $productImg = $arProduct["DETAIL_PICTURE"];
                         }
                     }
                     if ($productImg != "") {
                         $arFile = CFile::GetFileArray($productImg);
                         $productImg = CFile::ResizeImageGet($arFile, array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false);
                         $arSkuTmp["ImageUrl"] = $productImg["src"];
                     }
                 }
             }
             if ($minItemPrice === 0 || $arPrice["DISCOUNT_PRICE"] < $minItemPrice) {
                 $minItemPrice = $arPrice["DISCOUNT_PRICE"];
                 $minItemPriceFormat = SaleFormatCurrency($arPrice["DISCOUNT_PRICE"], $arPrice["PRICE"]["CURRENCY"]);
             }
             foreach ($arIblockOfferProps as $arCode) {
                 if (array_key_exists($arCode["CODE"], $arOffer["PROPERTIES"])) {
                     if (is_array($arOffer["PROPERTIES"][$arCode["CODE"]]["VALUE"])) {
                         $arSkuTmp[] = implode("/", $arOffer["PROPERTIES"][$arCode["CODE"]]["VALUE"]);
                     } else {
                         $arSkuTmp[] = $arOffer["PROPERTIES"][$arCode["CODE"]]["VALUE"];
                     }
                 }
             }
             if (!empty($arCatalogProduct)) {
                 $arSkuTmp["BALANCE"] = $arCatalogProduct["QUANTITY"];
                 $arSkuTmp["WEIGHT"] = $arCatalogProduct["WEIGHT"];
                 $arSkuTmp["BARCODE_MULTI"] = $arCatalogProduct["BARCODE_MULTI"];
             } else {
                 $arSkuTmp["BALANCE"] = 0;
                 $arSkuTmp["WEIGHT"] = 0;
                 $arSkuTmp["BARCODE_MULTI"] = 'N';
             }
             $urlEdit = CIBlock::GetAdminElementEditLink($arOffer["IBLOCK_ID"], $arOffer['ID'], array('find_section_section' => 0, 'WF' => 'Y'));
             $discountPercent = 0;
             $arSkuTmp["USER_ID"] = $USER_ID;
             $arSkuTmp["ID"] = $arOffer["ID"];
             $arSkuTmp["NAME"] = CUtil::JSEscape($arOffer["NAME"]);
             $arSkuTmp["PRODUCT_NAME"] = CUtil::JSEscape($PRODUCT_NAME);
             $arSkuTmp["PRODUCT_ID"] = $PRODUCT_ID;
             $arSkuTmp["LID"] = CUtil::JSEscape($LID);
             $arSkuTmp["MIN_PRICE"] = $minItemPriceFormat;
             $arSkuTmp["URL_EDIT"] = $urlEdit;
             $arSkuTmp["DISCOUNT_PRICE"] = '';
             $arSkuTmp["DISCOUNT_PRICE_FORMATED"] = '';
             $arSkuTmp["PRICE"] = $arPrice["PRICE"]["PRICE"];
             $arSkuTmp["PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arPrice["PRICE"]["PRICE"], $arPrice["PRICE"]["CURRENCY"], false);
             $arPriceType = GetCatalogGroup($arPrice["PRICE"]["CATALOG_GROUP_ID"]);
             $arSkuTmp["PRICE_TYPE"] = $arPriceType["NAME_LANG"];
             $arSkuTmp["VAT_RATE"] = $arPrice["PRICE"]["VAT_RATE"];
             if (count($arPrice["DISCOUNT"]) > 0) {
                 $discountPercent = IntVal($arPrice["DISCOUNT"]["VALUE"]);
                 $arSkuTmp["DISCOUNT_PRICE"] = $arPrice["DISCOUNT_PRICE"];
                 $arSkuTmp["DISCOUNT_PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arPrice["DISCOUNT_PRICE"], $arPrice["PRICE"]["CURRENCY"], false);
             }
             $arCurFormat = CCurrencyLang::GetCurrencyFormat($arPrice["PRICE"]["CURRENCY"]);
             $arSkuTmp["VALUTA_FORMAT"] = str_replace("#", '', $arCurFormat["FORMAT_STRING"]);
             $arSkuTmp["DISCOUNT_PERCENT"] = $discountPercent;
             $arSkuTmp["CURRENCY"] = $arPrice["PRICE"]["CURRENCY"];
             $arSkuTmp["CAN_BUY"] = $arOffer["CAN_BUY"];
             $arSku[] = $arSkuTmp;
         }
         if ((!is_array($arIblockOfferProps) || empty($arIblockOfferProps)) && is_array($arSku) && !empty($arSku)) {
             $arIblockOfferProps[0] = array("CODE" => "TITLE", "NAME" => GetMessage("SKU_TITLE"));
             foreach ($arSku as $key => $val) {
                 $arSku[$key][0] = $val["NAME"];
             }
         }
         $arResult["SKU_ELEMENTS"] = $arSku;
         $arResult["SKU_PROPERTIES"] = $arIblockOfferProps;
         $arResult["OFFERS_IBLOCK_ID"] = $arOffersIblock[$arProduct["IBLOCK_ID"]];
     }
     //if OFFERS_IBLOCK_ID > 0
     return $arResult;
 }
Ejemplo n.º 7
0
 $arIblockOfferProps = array();
 $arIblockOfferPropsFilter = array();
 foreach ($arIblockOfferPropsFilter as $val) {
     $arIblockOfferProps[] = array("CODE" => $val["CODE"], "NAME" => $val["NAME"]);
     $arIblockOfferPropsFilter[] = $val["CODE"];
 }
 static $arCacheResultPrices = array();
 if (!is_set($arCacheResultPrices[$arElements["IBLOCK_ID"]])) {
     $dbPriceType = CCatalogGroup::GetList(array(), array('NAME_LANG' => $arItems['NOTES'], 'CAN_BUY' => 'Y'), false, false, array('NAME', 'ID'));
     $arPriceType = $dbPriceType->Fetch();
     $arResultPrices = CIBlockPriceTools::GetCatalogPrices($arElements["IBLOCK_ID"], array($arPriceType["NAME"]));
     $arCacheResultPrices[$arElements["IBLOCK_ID"]] = $arResultPrices;
 } else {
     $arResultPrices = $arCacheResultPrices[$arElements["IBLOCK_ID"]];
 }
 $arOffers = CIBlockPriceTools::GetOffersArray($arElements["IBLOCK_ID"], $arItems["PRODUCT_ID"], array("ID" => "DESC"), array("NAME"), $arIblockOfferPropsFilter, 0, $arResultPrices, 1, array(), $USER->GetID(), $arItems['LID']);
 if (count($arOffers) > 0) {
     foreach ($arOffers as $arOffer) {
         /*$arPrice = CCatalogProduct::GetOptimalPrice($arOffer['ID'], 1, $arGroups, "N", array(), $arItems['LID']);
         					$arOffer["PRICES"] = $arPrice;
         
         					if ($arCatalogProduct = CCatalogProduct::GetByID($arOffer['ID']))
         					{
         						if ($arCatalogProduct["CAN_BUY_ZERO"]!="Y" && ($arCatalogProduct["QUANTITY_TRACE"]=="Y" && doubleval($arCatalogProduct["QUANTITY"])<=0))
         							$arItems["CAN_BUY"] = "N";
         						else
         							$arItems["CAN_BUY"] = "Y";
         					}
         
         					if (($priceMin === 0) || ($arPrice["DISCOUNT_PRICE"] < $priceMin))
         						$priceMin = $arPrice["DISCOUNT_PRICE"];*/
Ejemplo n.º 8
0
 /**
  * Add offers for each catalog product.
  * @return void
  */
 protected function setItemsOffers()
 {
     global $APPLICATION;
     // filter items to get only product type (not offers)
     $fullProductIds = array();
     //
     $productIblocks = array();
     foreach ($this->data['CATALOG'] as $catalog) {
         if ($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_FULL) {
             $productIblocks[] = $catalog;
             foreach ($this->items as $item) {
                 if ($item['IBLOCK_ID'] == $catalog['IBLOCK_ID']) {
                     $fullProductIds[] = $item['ID'];
                 }
             }
         }
     }
     if (empty($fullProductIds)) {
         return;
     }
     $fullProductIds = array_unique($fullProductIds);
     // Get total offers for all catalog products
     $totalOffers = array();
     foreach ($productIblocks as $iblock) {
         //if(empty($this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']]) || empty($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']]))
         //	continue;
         if (!isset($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']]) && !is_array($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']])) {
             $this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']] = array();
         }
         if (!isset($this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']]) && !is_array($this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']])) {
             $this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']] = array();
         }
         $selectProperties = array_merge($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']], $this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']]);
         $offers = CIBlockPriceTools::GetOffersArray(array('IBLOCK_ID' => $iblock['IBLOCK_ID'], 'HIDE_NOT_AVAILABLE' => $this->arParams['HIDE_NOT_AVAILABLE']), $fullProductIds, array(), array("ID", "CODE", "NAME", "SORT", "PREVIEW_PICTURE", "DETAIL_PICTURE"), $selectProperties, $this->arParams["OFFERS_LIMIT"], $this->data['CATALOG_PRICES'], $this->arParams['PRICE_VAT_INCLUDE'], $this->data['CONVERT_CURRENCY']);
         $totalOffers = array_merge($totalOffers, $offers);
     }
     if (empty($totalOffers)) {
         return;
     }
     foreach ($totalOffers as $offer) {
         $offer["~BUY_URL"] = $APPLICATION->GetCurPageParam($this->arParams["ACTION_VARIABLE"] . "=BUY&" . $this->arParams["PRODUCT_ID_VARIABLE"] . "=" . $offer["ID"], array($this->arParams["PRODUCT_ID_VARIABLE"], $this->arParams["ACTION_VARIABLE"]));
         $offer["BUY_URL"] = htmlspecialcharsbx($offer["~BUY_URL"]);
         $offer["~ADD_URL"] = $APPLICATION->GetCurPageParam($this->arParams["ACTION_VARIABLE"] . "=ADD2BASKET&" . $this->arParams["PRODUCT_ID_VARIABLE"] . "=" . $offer["ID"], array($this->arParams["PRODUCT_ID_VARIABLE"], $this->arParams["ACTION_VARIABLE"]));
         $offer["ADD_URL"] = htmlspecialcharsbx($offer["~ADD_URL"]);
         $offer["~COMPARE_URL"] = $APPLICATION->GetCurPageParam("action=ADD_TO_COMPARE_LIST&id=" . $offer["ID"], array($this->arParams["PRODUCT_ID_VARIABLE"], $this->arParams["ACTION_VARIABLE"]));
         $offer["COMPARE_URL"] = htmlspecialcharsbx($offer["~COMPARE_URL"]);
         $offer["~SUBSCRIBE_URL"] = $APPLICATION->GetCurPageParam($this->arParams["ACTION_VARIABLE"] . "=SUBSCRIBE_PRODUCT&id=" . $offer["ID"], array($this->arParams["PRODUCT_ID_VARIABLE"], $this->arParams["ACTION_VARIABLE"]));
         $offer["SUBSCRIBE_URL"] = htmlspecialcharsbx($offer["~SUBSCRIBE_URL"]);
         $linkId = (int) $offer['LINK_ELEMENT_ID'];
         foreach ($this->items as &$item) {
             if (!isset($item['OFFERS'])) {
                 $item['OFFERS'] = array();
             }
             if ($linkId == $item['ID']) {
                 $item['OFFERS'][] = $offer;
             }
         }
         unset($item);
     }
     // set selected flag
     foreach ($this->items as $key => &$item) {
         $index = 0;
         foreach ($item['OFFERS'] as $offerKey => &$offer) {
             $offer['SELECTED'] = $offer['ID'] == $key;
             if ($offer['SELECTED']) {
                 $index = $offerKey;
             }
         }
         $item['OFFERS_SELECTED'] = $index;
     }
     unset($item);
     unset($offer);
 }
Ejemplo n.º 9
0
 /**
  * Add offers for each catalog product.
  * @return void
  */
 protected function setItemsOffers()
 {
     // filter items to get only product type (not offers)
     $productIblocks = array();
     foreach ($this->data['CATALOG'] as $catalog) {
         if ($catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_FULL || $catalog['CATALOG_TYPE'] == CCatalogSKU::TYPE_PRODUCT) {
             $productIblocks[] = $catalog;
         }
     }
     // Get total offers for all catalog products
     foreach ($productIblocks as &$iblock) {
         if (empty($this->iblockItems[$iblock['IBLOCK_ID']])) {
             continue;
         }
         //if(empty($this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']]) || empty($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']]))
         //	continue;
         if (!isset($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']]) && !is_array($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']])) {
             $this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']] = array();
         }
         if (!isset($this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']]) && !is_array($this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']])) {
             $this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']] = array();
         }
         $selectProperties = array_merge($this->arParams['PROPERTY_CODE'][$iblock['OFFERS_IBLOCK_ID']], $this->arParams['OFFER_TREE_PROPS'][$iblock['OFFERS_IBLOCK_ID']]);
         $offers = CIBlockPriceTools::GetOffersArray(array('IBLOCK_ID' => $iblock['IBLOCK_ID'], 'HIDE_NOT_AVAILABLE' => $this->arParams['HIDE_NOT_AVAILABLE']), $this->iblockItems[$iblock['IBLOCK_ID']], array(), array("ID", "CODE", "NAME", "SORT", "PREVIEW_PICTURE", "DETAIL_PICTURE"), $selectProperties, $this->arParams["OFFERS_LIMIT"], $this->data['CATALOG_PRICES'], $this->arParams['PRICE_VAT_INCLUDE'], $this->data['CONVERT_CURRENCY']);
         if (empty($offers)) {
             continue;
         }
         foreach ($offers as &$offer) {
             $linkId = (int) $offer['LINK_ELEMENT_ID'];
             if (!isset($this->linkItems[$linkId])) {
                 continue;
             }
             $offer['~BUY_URL'] = $this->urlTemplates['~BUY_URL_TEMPLATE'] . $offer['ID'];
             $offer['BUY_URL'] = $this->urlTemplates['BUY_URL_TEMPLATE'] . $offer['ID'];
             $offer['~ADD_URL'] = $this->urlTemplates['~ADD_URL_TEMPLATE'] . $offer['ID'];
             $offer['ADD_URL'] = $this->urlTemplates['ADD_URL_TEMPLATE'] . $offer['ID'];
             $offer['~COMPARE_URL'] = $this->urlTemplates['~COMPARE_URL_TEMPLATE'] . $offer['ID'];
             $offer['COMPARE_URL'] = $this->urlTemplates['COMPARE_URL_TEMPLATE'] . $offer['ID'];
             $offer['~SUBSCRIBE_URL'] = $this->urlTemplates['~SUBSCRIBE_URL_TEMPLATE'] . $offer['ID'];
             $offer['SUBSCRIBE_URL'] = $this->urlTemplates['SUBSCRIBE_URL_TEMPLATE'] . $offer['ID'];
             if (!isset($this->linkItems[$linkId]['OFFERS'])) {
                 $this->linkItems[$linkId]['OFFERS'] = array();
             }
             $this->linkItems[$linkId]['OFFERS'][] = $offer;
         }
         unset($offer);
     }
     unset($iblock);
     // set selected flag
     foreach ($this->items as $key => &$item) {
         $index = 0;
         if (empty($item['OFFERS'])) {
             continue;
         }
         foreach ($item['OFFERS'] as $offerKey => &$offer) {
             $offer['SELECTED'] = $offer['ID'] == $key;
             if ($offer['SELECTED']) {
                 $index = $offerKey;
             }
         }
         $item['OFFERS_SELECTED'] = $index;
     }
     unset($item, $offer);
 }
Ejemplo n.º 10
0
function getFinalPriceInCurrency($item_id, $sale_currency = 'UAH')
{
    global $USER;
    // Do item have offers?
    if (CCatalogSku::IsExistOffers($item_id)) {
        // Find price in offers
        $res = CIBlockElement::GetByID($item_id);
        if ($ar_res = $res->GetNext()) {
            if (isset($ar_res['IBLOCK_ID']) && $ar_res['IBLOCK_ID']) {
                // Find all offers
                $offers = CIBlockPriceTools::GetOffersArray(array('IBLOCK_ID' => $ar_res['IBLOCK_ID'], 'HIDE_NOT_AVAILABLE' => 'Y', 'CHECK_PERMISSIONS' => 'Y'), array($item_id), null, null, null, null, null, null, array('CURRENCY_ID' => $sale_currency), $USER->getId(), null);
                foreach ($offers as $offer) {
                    $price = CCatalogProduct::GetOptimalPrice($offer['ID'], 1, $USER->GetUserGroupArray(), 'N');
                    if (isset($price['PRICE'])) {
                        if ($price['PRICE']['CURRENCY'] != $sale_currency) {
                            $price['PRICE']['PRICE'] = CCurrencyRates::ConvertCurrency($price['PRICE']['PRICE'], $price['PRICE']['CURRENCY'], $sale_currency);
                            $price['PRICE']['CURRENCY'] = $sale_currency;
                        }
                        $price['PRICE']['PRICE_WITH_DISCOUNT'] = $price['PRICE']['PRICE'];
                        $currency_code = $price['PRICE']['CURRENCY'];
                        // Find discounts and calculate price with discounts
                        $arDiscounts = CCatalogDiscount::GetDiscountByProduct($item_id, $USER->GetUserGroupArray(), "N");
                        if (is_array($arDiscounts) && sizeof($arDiscounts) > 0) {
                            $price['PRICE']['PRICE_WITH_DISCOUNT'] = CCatalogProduct::CountPriceWithDiscount($price['PRICE']['PRICE_WITH_DISCOUNT'], $sale_currency, $arDiscounts);
                        }
                        // Stop cycle, use found value
                        break;
                    }
                }
            }
        }
    } else {
        // Simple product, not trade offers
        $price = CCatalogProduct::GetOptimalPrice($item_id, 1, $USER->GetUserGroupArray(), 'N');
        // Got price?
        if (!$price || !isset($price['PRICE'])) {
            return false;
        }
        if ($price['PRICE']['CURRENCY'] != $sale_currency) {
            $price['PRICE']['PRICE'] = CCurrencyRates::ConvertCurrency($price['PRICE']['PRICE'], $price['PRICE']['CURRENCY'], $sale_currency);
            $price['DISCOUNT_PRICE'] = CCurrencyRates::ConvertCurrency($price['DISCOUNT_PRICE'], $price['PRICE']['CURRENCY'], $sale_currency);
            $price['PRICE']['CURRENCY'] = $sale_currency;
        }
        // Change currency code if found
        if (isset($price['CURRENCY'])) {
            $currency_code = $price['CURRENCY'];
        }
        if (isset($price['PRICE']['CURRENCY'])) {
            $currency_code = $price['PRICE']['CURRENCY'];
        }
        // Get final price
        $price['PRICE']['PRICE_WITH_DISCOUNT'] = $price['DISCOUNT_PRICE'];
        // Find discounts and calculate price with discounts
        $arDiscounts = CCatalogDiscount::GetDiscountByProduct($item_id, $USER->GetUserGroupArray(), "N", 2);
        if (is_array($arDiscounts) && sizeof($arDiscounts) > 0) {
            $price['PRICE']['PRICE_WITH_DISCOUNT'] = CCatalogProduct::CountPriceWithDiscount($price['PRICE']['PRICE_WITH_DISCOUNT'], $sale_currency, $arDiscounts);
        }
    }
    // Convert to sale currency if needed
    if ($currency_code != $sale_currency) {
        $price['PRICE']['PRICE_WITH_DISCOUNT'] = CCurrencyRates::ConvertCurrency($price['PRICE']['PRICE_WITH_DISCOUNT'], $sale_currency, $sale_currency);
    }
    return $price;
}