public static function GetProductList($ID, $minCNT, $limit, $getParentOnly = false) { global $DB; $ID = (int) $ID; if ($ID <= 0) { return false; } $limit = (int) $limit; if ($limit < 0) { $limit = 0; } $minCNT = (int) $minCNT; if ($minCNT < 0) { $minCNT = 0; } $getParentOnly = $getParentOnly === true; $elementInclude = array($ID); $elementExclude = array(); if (Loader::includeModule('catalog')) { $intIBlockID = (int) CIBlockElement::GetIBlockByID($ID); if ($intIBlockID == 0) { return false; } $skuInfo = CCatalogSKU::GetInfoByProductIBlock($intIBlockID); if (!empty($skuInfo)) { $itemsIterator = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $skuInfo['IBLOCK_ID'], 'PROPERTY_' . $skuInfo['SKU_PROPERTY_ID'] => $ID), false, false, array('ID', 'IBLOCK_ID', 'PROPERTY_' . $skuInfo['SKU_PROPERTY_ID'])); while ($item = $itemsIterator->Fetch()) { $item['ID'] = (int) $item['ID']; $elementInclude[] = $item['ID']; $elementExclude[] = $item['ID']; } } } if ($getParentOnly) { $strSql = "select PARENT_PRODUCT_ID from b_sale_product2product where PRODUCT_ID IN (" . implode(',', $elementInclude) . ")"; if (!empty($elementExclude)) { $strSql .= " and PARENT_PRODUCT_ID not in (" . implode(',', $elementExclude) . ")"; } if ($minCNT > 0) { $strSql .= " and CNT >= " . $minCNT; } $strSql .= ' group by PARENT_PRODUCT_ID'; if ($limit > 0) { $strSql .= " limit " . $limit; } } else { $strSql = "select * from b_sale_product2product where PRODUCT_ID in (" . implode(',', $elementInclude) . ")"; if (!empty($elementExclude)) { $strSql .= " and PARENT_PRODUCT_ID not in (" . implode(',', $elementExclude) . ")"; } if ($minCNT > 0) { $strSql .= " and CNT >= " . $minCNT; } $strSql .= " order by CNT desc, PRODUCT_ID asc"; if ($limit > 0) { $strSql .= " limit " . $limit; } } return $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); }
public static function GetProductInfo($intOfferID, $intIBlockID = 0) { $intOfferID = (int) $intOfferID; if ($intOfferID <= 0) { return false; } $intIBlockID = (int) $intIBlockID; if ($intIBlockID <= 0) { $intIBlockID = (int) CIBlockElement::GetIBlockByID($intOfferID); } if ($intIBlockID <= 0) { return false; } if (!isset(self::$arOfferCache[$intIBlockID])) { $arSkuInfo = CCatalogSKU::GetInfoByOfferIBlock($intIBlockID); } else { $arSkuInfo = self::$arOfferCache[$intIBlockID]; } if (empty($arSkuInfo) || empty($arSkuInfo['SKU_PROPERTY_ID'])) { return false; } $rsItems = CIBlockElement::GetProperty($intIBlockID, $intOfferID, array(), array('ID' => $arSkuInfo['SKU_PROPERTY_ID'])); if ($arItem = $rsItems->Fetch()) { $arItem['VALUE'] = (int) $arItem['VALUE']; if ($arItem['VALUE'] > 0) { return array('ID' => $arItem['VALUE'], 'IBLOCK_ID' => $arSkuInfo['PRODUCT_IBLOCK_ID'], 'OFFER_IBLOCK_ID' => $intIBlockID, 'SKU_PROPERTY_ID' => $arSkuInfo['SKU_PROPERTY_ID']); } } return false; }
public static function GetProductInfo($intOfferID, $intIBlockID = 0) { $intOfferID = (int) $intOfferID; if ($intOfferID <= 0) { return false; } if (!isset(self::$parentCache[$intOfferID])) { self::$parentCache[$intOfferID] = false; $intIBlockID = (int) $intIBlockID; if ($intIBlockID <= 0) { $intIBlockID = (int) CIBlockElement::GetIBlockByID($intOfferID); } if ($intIBlockID <= 0) { return self::$parentCache[$intOfferID]; } if (!isset(self::$arOfferCache[$intIBlockID])) { $skuInfo = CCatalogSKU::GetInfoByOfferIBlock($intIBlockID); } else { $skuInfo = self::$arOfferCache[$intIBlockID]; } if (empty($skuInfo) || empty($skuInfo['SKU_PROPERTY_ID'])) { return self::$parentCache[$intOfferID]; } $conn = Application::getConnection(); $helper = $conn->getSqlHelper(); if ($skuInfo['VERSION'] == 2) { $productField = $helper->quote('PROPERTY_' . $skuInfo['SKU_PROPERTY_ID']); $sqlQuery = 'select ' . $productField . ' as ID from ' . $helper->quote('b_iblock_element_prop_s' . $skuInfo['IBLOCK_ID']) . ' where ' . $helper->quote('IBLOCK_ELEMENT_ID') . ' = ' . $intOfferID; } else { $productField = $helper->quote('VALUE_NUM'); $sqlQuery = 'select ' . $productField . ' as ID from ' . $helper->quote('b_iblock_element_property') . ' where ' . $helper->quote('IBLOCK_PROPERTY_ID') . ' = ' . $skuInfo['SKU_PROPERTY_ID'] . ' and ' . $helper->quote('IBLOCK_ELEMENT_ID') . ' = ' . $intOfferID; } unset($productField); $parentIterator = $conn->query($sqlQuery); if ($parent = $parentIterator->fetch()) { $parent['ID'] = (int) $parent['ID']; if ($parent['ID'] > 0) { self::$parentCache[$intOfferID] = array('ID' => $parent['ID'], 'IBLOCK_ID' => $skuInfo['PRODUCT_IBLOCK_ID'], 'OFFER_IBLOCK_ID' => $intIBlockID, 'SKU_PROPERTY_ID' => $skuInfo['SKU_PROPERTY_ID']); } } unset($parent, $parentIterator, $sqlQuery, $helper, $conn, $skuInfo); } return self::$parentCache[$intOfferID]; }
/** * <p>Метод вычисляет скидку на товар с кодом productID для пользователя, принадлежащего группам пользователей arUserGroups.</p> * * * * * @param int $productID = 0[ Код товара * * * * @param array $arUserGroups = array()[ * * * * @param string $renewal = "N"[ Массив групп, которым принадлежит пользователь. Для текущего * пользователя он возвращается методом $USER->GetUserGroupArray() * * * * @param array $arCatalogGroups = array()[ Флаг "Продление подписки" * * * * @param string $siteID = false]]] Массив типов цен, для которых искать скидку. * * * * @return bool <p>Метод возвращает массив ассоциативных массивов скидок или * <i>false</i> в случае ошибки. В массиве содержится ассоциативный * массив параметров максимальной процентной скидки (если есть) и * ассоциативный массив параметров максимальной фиксированной * скидки (если есть).</p><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arDiscounts = CCatalogDiscount::GetDiscountByProduct( * 150, * $USER->GetUserGroupArray(), * "N", * 2, * SITE_ID * ); * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogdiscount/ccatalogdiscount.getdiscountbyproduct.php * @author Bitrix */ static public function GetDiscountByProduct($productID = 0, $arUserGroups = array(), $renewal = "N", $arCatalogGroups = array(), $siteID = false, $arDiscountCoupons = false) { global $DB; global $APPLICATION; foreach (GetModuleEvents("catalog", "OnGetDiscountByProduct", true) as $arEvent) { $mxResult = ExecuteModuleEventEx($arEvent, array($productID, $arUserGroups, $renewal, $arCatalogGroups, $siteID, $arDiscountCoupons)); if (true !== $mxResult) return $mxResult; } $productID = intval($productID); if (0 >= $productID) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("BT_MOD_CATALOG_DISC_ERR_ELEMENT_ID_NOT_FOUND")), "NO_ELEMENT"); return false; } $intIBlockID = intval(CIBlockElement::GetIBlockByID($productID)); if (0 >= $intIBlockID) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("BT_MOD_CATALOG_DISC_ERR_ELEMENT_ID_NOT_FOUND")), "NO_ELEMENT"); return false; } return CCatalogDiscount::GetDiscount($productID, $intIBlockID, $arCatalogGroups, $arUserGroups, $renewal, $siteID, $arDiscountCoupons); }
/** * <p>Метод возвращает параметры наименьшей цены товара productID в количестве quantity для посетителя, входящего в группы пользователей arUserGroups.</p> * * * * * @param int $productID Код товара. * * * * @param $int Приобретаемое количество. * * * * @param quantit $y = 1[ массив групп, которым принадлежит пользователь. Для текущего * пользователя он возвращается методом $USER->GetUserGroupArray() * * * * @param array $arUserGroups = array()[ "Y", если вычисляется для продления товара (продажа контента), "N" в * остальных случаях. * * * * @param string $renewal = "N"[ Массив цен. Если он установлен, то пересчет идет не по ценам из * базы данных, а по ценам из этого массива. Представляет собой * массив ассоциативных массивов с ключами: <ul> <li> <b>ID</b> - код цены;</li> * <li> <b>PRICE</b> - цена;</li> <li> <b>CURRENCY</b> - валюта;</li> <li> <b>CATALOG_GROUP_ID</b> - код * типа цен.</li> </ul> * * * * @param array $arPrices = array()[ Сайт, для которого производится вычисление. Если парамерт равен * <i>false</i>, то берется текущий сайт. * * * * @param string $siteID = false]]]]] * * * * @return array <p>Массив вида:</p><pre class="syntax">array( "PRICE" => * массив_параметров_минимальной_цены, "DISCOUNT_PRICE" => * минимальная_цена_в_базовой_валюте, "DISCOUNT" => * массив_параметров_максимальной_доступной_скидки )</pre><p><b>Обратите * внимание, что</b> <i>DISCOUNT_PRICE</i> это минимальная цена в <b>базовой * валюте</b>. Чтобы перевести эту цену в валюту товара, * необходимо:</p><pre class="syntax">array( $baseCurrency = CCurrency::GetBaseCurrency(); * $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice['DISCOUNT_PRICE'], $baseCurrency, * $arPrice["PRICE"]["CURRENCY"]); )</pre><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * if (!$arPrice || count($arPrice) <= 0) * { * if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray())) * { * $quantity = $nearestQuantity; * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * } * } * echo "<pre>"; * print_r($arPrice); * echo "</pre>"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getoptimalprice.7c16046d.php * @author Bitrix */ public static function GetOptimalPrice($intProductID, $quantity = 1, $arUserGroups = array(), $renewal = "N", $arPrices = array(), $siteID = false, $arDiscountCoupons = false) { global $APPLICATION; $mxResult = true; foreach (GetModuleEvents("catalog", "OnGetOptimalPrice", true) as $arEvent) { $mxResult = ExecuteModuleEventEx($arEvent, array($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)); if (true !== $mxResult) return $mxResult; } $intProductID = intval($intProductID); if (0 >= $intProductID) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_PRODUCT_ID_ABSENT"), "NO_PRODUCT_ID"); return false; } $quantity = doubleval($quantity); if (0 >= $quantity) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_QUANTITY_ABSENT"), "NO_QUANTITY"); return false; } if (!is_array($arUserGroups) && intval($arUserGroups)."|" == $arUserGroups."|") $arUserGroups = array(intval($arUserGroups)); if (!is_array($arUserGroups)) $arUserGroups = array(); if (!in_array(2, $arUserGroups)) $arUserGroups[] = 2; $rsVAT = CCatalogProduct::GetVATInfo($intProductID); if ($arVAT = $rsVAT->Fetch()) { $arVAT['RATE'] = doubleval($arVAT['RATE'] * 0.01); } else { $arVAT = array('RATE' => 0.0, 'VAT_INCLUDED' => 'N'); } $renewal = (($renewal == "N") ? "N" : "Y"); if (false === $siteID) $siteID = SITE_ID; if (false === $arDiscountCoupons) $arDiscountCoupons = CCatalogDiscountCoupon::GetCoupons(); $strBaseCurrency = CCurrency::GetBaseCurrency(); if (empty($strBaseCurrency)) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_NO_BASE_CURRENCY"), "NO_BASE_CURRENCY"); return false; } $intIBlockID = intval(CIBlockElement::GetIBlockByID($intProductID)); if (0 >= $intIBlockID) { $APPLICATION->ThrowException(str_replace("#ID#", $intProductID, GetMessage('BT_MOD_CATALOG_PROD_ERR_ELEMENT_ID_NOT_FOUND')), "NO_ELEMENT"); return false; } if (!isset($arPrices) || !is_array($arPrices)) $arPrices = array(); if (empty($arPrices)) { $arPrices = array(); $dbPriceList = CPrice::GetListEx( array(), array( "PRODUCT_ID" => $intProductID, "GROUP_GROUP_ID" => $arUserGroups, "GROUP_BUY" => "Y", "+<=QUANTITY_FROM" => $quantity, "+>=QUANTITY_TO" => $quantity ), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY") ); while ($arPriceList = $dbPriceList->Fetch()) { $arPriceList['ELEMENT_IBLOCK_ID'] = $intIBlockID; $arPrices[] = $arPriceList; } } else { foreach ($arPrices as &$arOnePrice) { $arOnePrice['ELEMENT_IBLOCK_ID'] = $intIBlockID; } if (isset($arOnePrice)) unset($arOnePrice); } if (empty($arPrices)) return false; // $boolDiscountVat = ('N' != COption::GetOptionString('catalog', 'discount_vat', 'Y')); $boolDiscountVat = true; $strDiscSaveApply = COption::GetOptionString('catalog', 'discsave_apply', 'R'); $dblMinPrice = -1; $arMinPrice = array(); $arMinDiscounts = array(); foreach ($arPrices as &$arPriceList) { $arPriceList['VAT_RATE'] = $arVAT['RATE']; $arPriceList['VAT_INCLUDED'] = $arVAT['VAT_INCLUDED']; $arPriceList['ORIG_VAT_INCLUDED'] = $arPriceList['VAT_INCLUDED']; if ($boolDiscountVat) { if ('N' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] *= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'Y'; } } else { if ('Y' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] /= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'N'; } } if ($arPriceList["CURRENCY"] == $strBaseCurrency) $dblCurrentPrice = $arPriceList["PRICE"]; else $dblCurrentPrice = CCurrencyRates::ConvertCurrency($arPriceList["PRICE"], $arPriceList["CURRENCY"], $strBaseCurrency); $arDiscounts = CCatalogDiscount::GetDiscount($intProductID, $intIBlockID, $arPriceList["CATALOG_GROUP_ID"], $arUserGroups, $renewal, $siteID, $arDiscountCoupons); $arDiscSave = array(); $arPriceDiscount = array(); $arResultPrice = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscountApply = array(); if (!empty($arDiscounts)) { CCatalogProduct::__PrimaryDiscountFilter($arDiscounts, $arPriceDiscount, $arDiscSave, $arResultPrice); if (!empty($arPriceDiscount)) { foreach ($arPriceDiscount as &$arOnePriority) { $boolResultPriority = CCatalogProduct::__CalcOnePriority($arOnePriority, $arDiscountApply, $arResultPrice); if (!$boolResultPriority) { return false; } else { if (isset($arResultPrice['LAST_DISCOUNT']) && 'Y' == $arResultPrice['LAST_DISCOUNT']) break; } } if (isset($arOnePriority)) unset($arOnePriority); } if (!empty($arDiscSave)) { switch($strDiscSaveApply) { case 'R': $arDiscSaveResult = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscSaveApply = array(); $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscSaveApply, $arDiscSaveResult); if (!$boolResultDiscSave) { return false; } else { if ($arDiscSaveResult['PRICE'] < $arResultPrice['PRICE']) { $arResultPrice = $arDiscSaveResult; $arDiscountApply = $arDiscSaveApply; } } break; case 'A': $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } break; case 'D': if (empty($arDiscountApply)) { $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } } break; } } } if (-1 == $dblMinPrice || $dblMinPrice > $arResultPrice['PRICE']) { $dblMinPrice = $arResultPrice['PRICE']; $arMinPrice = $arPriceList; $arMinDiscounts = $arDiscountApply; } } if (isset($arPriceList)) unset($arPriceList); if ($boolDiscountVat) { if ('N' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] /= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } else { if ('Y' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] *= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } unset($arMinPrice['ORIG_VAT_INCLUDED']); $dblMinPrice = roundEx($dblMinPrice, CATALOG_VALUE_PRECISION); $arResult = array( 'PRICE' => $arMinPrice, 'DISCOUNT_PRICE' => $dblMinPrice, 'DISCOUNT' => array(), 'DISCOUNT_LIST' => array(), ); if (!empty($arMinDiscounts)) { reset($arMinDiscounts); $arResult['DISCOUNT'] = current($arMinDiscounts); $arResult['DISCOUNT_LIST'] = $arMinDiscounts; } foreach (GetModuleEvents("catalog", "OnGetOptimalPriceResult", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$arResult))===false) return false; } return $arResult; }
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; }
/** * @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; }
'ID' => $arProp["ID"], 'URL' => $storeURL, 'TITLE' => $storeName, 'PHONE' => $storePhone, 'SCHEDULE' => $storeSchedule, 'AMOUNT' => $amount, 'ELEMENT_ID' => $arProp["ELEMENT_ID"], ),$numAmount); } $isProductExistSKU = CCatalogSKU::IsExistOffers($arParams["ELEMENT_ID"]); $arResult["IS_SKU"] = false; if($isProductExistSKU) { $arSkuElements = $arSkuInfo = $arResultSkuId = array(); $intIBlockID = (int)CIBlockElement::GetIBlockByID($arParams["ELEMENT_ID"]); if($intIBlockID > 0) $arSkuInfo = CCatalogSKU::GetInfoByProductIBlock($intIBlockID); if(!empty($arSkuInfo) && is_array($arSkuInfo)) { $dbAllSkuElements = CIBlockElement::GetList( array(), array('IBLOCK_ID' => $arSkuInfo['IBLOCK_ID'], '=PROPERTY_'.$arSkuInfo['SKU_PROPERTY_ID'] => $arParams["ELEMENT_ID"]), false, false, array('ID') ); while($arAllSkuElements = $dbAllSkuElements->fetch()) { $arSkuElements[] = $arAllSkuElements; }
function CatalogGetPriceTableEx($ID, $filterQauntity = 0, $arFilterType = array(), $VAT_INCLUDE = 'Y', $arCurrencyParams = array()) { global $USER; static $arPriceTypes = array(); $ID = (int) $ID; if ($ID <= 0) { return false; } $filterQauntity = (int) $filterQauntity; if (!is_array($arFilterType)) { $arFilterType = array($arFilterType); } $boolConvert = false; $strCurrencyID = ''; $arCurrencyList = array(); if (!empty($arCurrencyParams) && is_array($arCurrencyParams) && !empty($arCurrencyParams['CURRENCY_ID'])) { $boolConvert = true; $strCurrencyID = $arCurrencyParams['CURRENCY_ID']; } $arResult = array(); $arResult["ROWS"] = array(); $arResult["COLS"] = array(); $arResult["MATRIX"] = array(); $arResult["CAN_BUY"] = array(); $arResult["AVAILABLE"] = "N"; $cacheTime = CATALOG_CACHE_DEFAULT_TIME; if (defined("CATALOG_CACHE_TIME")) { $cacheTime = intval(CATALOG_CACHE_TIME); } $arUserGroups = $USER->GetUserGroupArray(); CatalogClearArray($arUserGroups, true); $strCacheID = 'UG_' . implode('_', $arUserGroups); if (isset($arPriceTypes[$strCacheID])) { $arPriceGroups = $arPriceTypes[$strCacheID]; } else { $arPriceGroups = CCatalogGroup::GetGroupsPerms($arUserGroups, array()); $arPriceTypes[$strCacheID] = $arPriceGroups; } if (empty($arPriceGroups["view"])) { return $arResult; } $currentQuantity = -1; $rowsCnt = -1; $arFilter = array("PRODUCT_ID" => $ID); if ($filterQauntity > 0) { $arFilter["+<=QUANTITY_FROM"] = $filterQauntity; $arFilter["+>=QUANTITY_TO"] = $filterQauntity; } if (!empty($arFilterType)) { $arTmp = array(); foreach ($arPriceGroups["view"] as &$intOneGroup) { if (in_array($intOneGroup, $arFilterType)) { $arTmp[] = $intOneGroup; } } if (isset($intOneGroup)) { unset($intOneGroup); } if (empty($arTmp)) { return $arResult; } $arFilter["CATALOG_GROUP_ID"] = $arTmp; } else { $arFilter["CATALOG_GROUP_ID"] = $arPriceGroups["view"]; } $productQuantity = 0; $productQuantityTrace = "N"; $dbRes = CCatalogProduct::GetVATInfo($ID); if ($arVatInfo = $dbRes->Fetch()) { $fVatRate = floatval($arVatInfo['RATE'] * 0.01); $bVatIncluded = $arVatInfo['VAT_INCLUDED'] == 'Y'; } else { $fVatRate = 0.0; $bVatIncluded = false; } $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $ID), false, false, array('ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY')); if ($arProduct = $rsProducts->Fetch()) { $intIBlockID = CIBlockElement::GetIBlockByID($arProduct['ID']); if (!$intIBlockID) { return false; } $arProduct['IBLOCK_ID'] = $intIBlockID; } else { return false; } $dbPrice = CPrice::GetListEx(array("QUANTITY_FROM" => "ASC", "QUANTITY_TO" => "ASC"), $arFilter, false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "QUANTITY_FROM", "QUANTITY_TO")); while ($arPrice = $dbPrice->Fetch()) { if ($VAT_INCLUDE == 'N') { if ($bVatIncluded) { $arPrice['PRICE'] /= 1 + $fVatRate; } } else { if (!$bVatIncluded) { $arPrice['PRICE'] *= 1 + $fVatRate; } } $arPrice['VAT_RATE'] = $fVatRate; CCatalogDiscountSave::Disable(); $arDiscounts = CCatalogDiscount::GetDiscount($ID, $arProduct["IBLOCK_ID"], $arPrice["CATALOG_GROUP_ID"], $arUserGroups, "N", SITE_ID, array()); CCatalogDiscountSave::Enable(); $discountPrice = CCatalogProduct::CountPriceWithDiscount($arPrice["PRICE"], $arPrice["CURRENCY"], $arDiscounts); $arPrice["DISCOUNT_PRICE"] = $discountPrice; $arPrice["QUANTITY_FROM"] = doubleval($arPrice["QUANTITY_FROM"]); if ($currentQuantity != $arPrice["QUANTITY_FROM"]) { $rowsCnt++; $arResult["ROWS"][$rowsCnt]["QUANTITY_FROM"] = $arPrice["QUANTITY_FROM"]; $arResult["ROWS"][$rowsCnt]["QUANTITY_TO"] = doubleval($arPrice["QUANTITY_TO"]); $currentQuantity = $arPrice["QUANTITY_FROM"]; } if ($boolConvert && $strCurrencyID != $arPrice["CURRENCY"]) { $arResult["MATRIX"][intval($arPrice["CATALOG_GROUP_ID"])][$rowsCnt] = array("ID" => $arPrice["ID"], "ORIG_PRICE" => $arPrice["PRICE"], "ORIG_DISCOUNT_PRICE" => $arPrice["DISCOUNT_PRICE"], "ORIG_CURRENCY" => $arPrice["CURRENCY"], "ORIG_VAT_RATE" => $arPrice["VAT_RATE"], 'PRICE' => CCurrencyRates::ConvertCurrency($arPrice["PRICE"], $arPrice["CURRENCY"], $strCurrencyID), 'DISCOUNT_PRICE' => CCurrencyRates::ConvertCurrency($arPrice["DISCOUNT_PRICE"], $arPrice["CURRENCY"], $strCurrencyID), 'CURRENCY' => $strCurrencyID, 'VAT_RATE' => CCurrencyRates::ConvertCurrency($arPrice["VAT_RATE"], $arPrice["CURRENCY"], $strCurrencyID)); $arCurrencyList[] = $arPrice["CURRENCY"]; } else { $arResult["MATRIX"][intval($arPrice["CATALOG_GROUP_ID"])][$rowsCnt] = array("ID" => $arPrice["ID"], "PRICE" => $arPrice["PRICE"], "DISCOUNT_PRICE" => $arPrice["DISCOUNT_PRICE"], "CURRENCY" => $arPrice["CURRENCY"], "VAT_RATE" => $arPrice["VAT_RATE"]); } } $arCatalogGroups = CCatalogGroup::GetListArray(); foreach ($arCatalogGroups as $key => $value) { if (isset($arResult["MATRIX"][$key])) { $arResult["COLS"][$value["ID"]] = $value; } } $arResult["CAN_BUY"] = $arPriceGroups["buy"]; $arResult["AVAILABLE"] = 0 >= $arProduct['QUANTITY'] && 'Y' == $arProduct['QUANTITY_TRACE'] && 'N' == $arProduct['CAN_BUY_ZERO'] ? 'N' : 'Y'; if ($boolConvert) { if (!empty($arCurrencyList)) { $arCurrencyList[] = $strCurrencyID; } $arResult['CURRENCY_LIST'] = $arCurrencyList; } return $arResult; }
} else { $result["err_code"] = -3; //wID doesn't exists, can't delete 0; } break; case 'ADD': $param1 = $_REQUEST["PARAM1"]; $param2 = intval($_REQUEST["PARAM2"]) ?: false; $param3 = intval($_REQUEST["PARAM3"]); if ($param3 <= 0) { $result["err_code"] = -4; /*unknow element*/ break; } if (!$param2) { $param2 = CIBlockElement::GetIBlockByID($param3); if (!$param2) { $result["err_code"] = -5; /*unknown iblock_id*/ break; } } $dbWishlistElement = CBrWishlist::GetList(array(), array("WL_USER_ID" => $WL_USER_ID, "PARAM1" => $param1, "PARAM2" => $param2, "PARAM3" => $param3), array("ID")); if ($arWishlistElement = $dbWishlistElement->GetNext()) { //element already exists $result["WID"] = $arWishlistElement["ID"]; } else { //add element to wishlist $result["WID"] = CBrWishlist::Add(array("WL_USER_ID" => $WL_USER_ID, "PARAM1" => $param1, "PARAM2" => $param2, "PARAM3" => $param3)); } $result["result"] = true;
/** * <p>Метод возвращает параметры наименьшей цены товара productID в количестве quantity для посетителя, входящего в группы пользователей arUserGroups. Метод динамичный.</p> * * * @param int $intProductID Код товара.<br><br> До версии <b>12.0.0</b> параметр назывался <b>productID</b>. * * @param $int Приобретаемое количество. * * @param quantit $y = 1[ массив групп, которым принадлежит пользователь. Для текущего * пользователя он возвращается методом $USER->GetUserGroupArray() * * @param array $arUserGroups = array()[ "Y", если вычисляется для продления товара (продажа контента), "N" в * остальных случаях. * * @param string $renewal = "N"[ Массив цен. Если он установлен, то пересчет идет не по ценам из * базы данных, а по ценам из этого массива. Представляет собой * массив ассоциативных массивов с ключами: <ul> <li> <b>ID</b> - код цены;</li> * <li> <b>PRICE</b> - цена;</li> <li> <b>CURRENCY</b> - валюта;</li> <li> <b>CATALOG_GROUP_ID</b> - код * типа цен.</li> </ul> * * @param array $arPrices = array()[ Сайт, для которого производится вычисление. Если парамерт равен * <i>false</i>, то берется текущий сайт. * * @param string $siteID = false[ Массив купонов, которые влияют на выборку скидок. Если задано * значение <i>false</i>, то массив купонов будет взят из * <b>CCatalogDiscountCoupon::GetCoupons</b> * * @param array $arDiscountCoupons = false]]]]]] * * @return array <p>Массив вида:</p> <pre class="syntax">array( "PRICE" => * массив_параметров_минимальной_цены, "DISCOUNT_PRICE" => * минимальная_цена_в_базовой_валюте, "DISCOUNT" => * массив_параметров_первой_из_примененных_скидок_торгового_каталога, * "DISCOUNT_LIST" => * массив_скидок_действующих_на_товар_в_порядке_применения, "RESULT_PRICE" * => array( "BASE_PRICE" => полная (без скидок) цена товара, "DISCOUNT_PRICE" => * цена со скидками, "DISCOUNT" => итоговая скидка (разница между BASE_PRICE и * DISCOUNT_PRICE) "PERCENT" => итоговая скидка в процентах "CURRENCY" => валюта * результата ) )</pre> <p></p><div class="note"> <b>Примечание</b>. С версии 15.0.6 ключ * RESULT_PRICE заполняется данными и в том случае, когда использованы * обработчики события <a * href="http://dev.1c-bitrix.ru/api_help/catalog/events/ongetoptimalprice.php">OnGetOptimalPrice</a>. Параметры * заданные методами <a * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/setusedcurrency.php">CCatalogProduct::setUsedCurrency</a> * и <a * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/setpricevatincludemode.php">CCatalogProduct::setPriceVatIncludeMode</a> * при этом учитываются, параметры заданные методом <a * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/setusediscount.php">CCatalogProduct::setUseDiscount</a> * - нет. </div> <p></p><div class="note"> <b>Обратите внимание, что</b> <i>DISCOUNT_PRICE</i> это * минимальная цена в <b>базовой валюте</b>. Чтобы перевести эту цену в * валюту товара, необходимо: <pre class="syntax">array( $baseCurrency = * CCurrency::GetBaseCurrency(); $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice['DISCOUNT_PRICE'], * $baseCurrency, $arPrice["PRICE"]["CURRENCY"]); )</pre> </div> <a name="examples"></a> * * <h4>Example</h4> * <pre> * <? * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * if (!$arPrice || count($arPrice) <= 0) * { * if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray())) * { * $quantity = $nearestQuantity; * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * } * } * echo "<pre>"; * print_r($arPrice); * echo "</pre>"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getoptimalprice.7c16046d.php * @author Bitrix */ public static function GetOptimalPrice($intProductID, $quantity = 1, $arUserGroups = array(), $renewal = "N", $arPrices = array(), $siteID = false, $arDiscountCoupons = false) { static $eventOnGetExists = null; static $eventOnResultExists = null; global $APPLICATION; if ($eventOnGetExists === true || $eventOnGetExists === null) { foreach (GetModuleEvents('catalog', 'OnGetOptimalPrice', true) as $arEvent) { $eventOnGetExists = true; $mxResult = ExecuteModuleEventEx($arEvent, array($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)); if ($mxResult !== true) { self::updateUserHandlerOptimalPrice($mxResult); return $mxResult; } } if ($eventOnGetExists === null) { $eventOnGetExists = false; } } $intProductID = (int) $intProductID; if ($intProductID <= 0) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_CATALOG_PROD_ERR_PRODUCT_ID_ABSENT"), "NO_PRODUCT_ID"); return false; } $quantity = (double) $quantity; if ($quantity <= 0) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_CATALOG_PROD_ERR_QUANTITY_ABSENT"), "NO_QUANTITY"); return false; } if (!is_array($arUserGroups) && (int) $arUserGroups . '|' == (string) $arUserGroups . '|') { $arUserGroups = array((int) $arUserGroups); } if (!is_array($arUserGroups)) { $arUserGroups = array(); } if (!in_array(2, $arUserGroups)) { $arUserGroups[] = 2; } $renewal = $renewal == 'Y' ? 'Y' : 'N'; if ($siteID === false) { $siteID = SITE_ID; } $resultCurrency = CCurrency::GetBaseCurrency(); if (empty($resultCurrency)) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_CATALOG_PROD_ERR_NO_BASE_CURRENCY"), "NO_BASE_CURRENCY"); return false; } if (self::$usedCurrency !== null) { $resultCurrency = self::$usedCurrency; } $intIBlockID = (int) CIBlockElement::GetIBlockByID($intProductID); if ($intIBlockID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_PROD_ERR_ELEMENT_ID_NOT_FOUND', array('#ID#' => $intProductID)), 'NO_ELEMENT'); return false; } if (!isset($arPrices) || !is_array($arPrices)) { $arPrices = array(); } if (empty($arPrices)) { $arPrices = array(); $dbPriceList = CPrice::GetListEx(array(), array("PRODUCT_ID" => $intProductID, "GROUP_GROUP_ID" => $arUserGroups, "GROUP_BUY" => "Y", "+<=QUANTITY_FROM" => $quantity, "+>=QUANTITY_TO" => $quantity), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY")); while ($arPriceList = $dbPriceList->Fetch()) { $arPriceList['ELEMENT_IBLOCK_ID'] = $intIBlockID; $arPrices[] = $arPriceList; } unset($arPriceList, $dbPriceList); } else { foreach ($arPrices as &$arOnePrice) { $arOnePrice['ELEMENT_IBLOCK_ID'] = $intIBlockID; } unset($arOnePrice); } if (empty($arPrices)) { return false; } $rsVAT = CCatalogProduct::GetVATInfo($intProductID); if ($arVAT = $rsVAT->Fetch()) { $arVAT['RATE'] = (double) $arVAT['RATE'] * 0.01; } else { $arVAT = array('RATE' => 0.0, 'VAT_INCLUDED' => 'N'); } unset($rsVAT); if (self::getUseDiscount()) { if ($arDiscountCoupons === false) { $arDiscountCoupons = CCatalogDiscountCoupon::GetCoupons(); } } // $boolDiscountVat = ('N' != COption::GetOptionString('catalog', 'discount_vat', 'Y')); $boolDiscountVat = true; $minPrice = false; $basePrice = false; $arMinPrice = array(); $arMinDiscounts = array(); foreach ($arPrices as &$arPriceList) { $arPriceList['VAT_RATE'] = $arVAT['RATE']; $arPriceList['VAT_INCLUDED'] = $arVAT['VAT_INCLUDED']; $dblCurrentPrice = $arPriceList['PRICE']; if ($boolDiscountVat) { if ('N' == $arPriceList['VAT_INCLUDED']) { $dblCurrentPrice *= 1 + $arPriceList['VAT_RATE']; } } else { if ('Y' == $arPriceList['VAT_INCLUDED']) { $dblCurrentPrice /= 1 + $arPriceList['VAT_RATE']; } } if ($arPriceList['CURRENCY'] != $resultCurrency) { $dblCurrentPrice = CCurrencyRates::ConvertCurrency($arPriceList['PRICE'], $arPriceList['CURRENCY'], $resultCurrency); } $dblCurrentPrice = roundEx($dblCurrentPrice, CATALOG_VALUE_PRECISION); $arDiscounts = array(); if (self::getUseDiscount()) { $arDiscounts = CCatalogDiscount::GetDiscount($intProductID, $intIBlockID, $arPriceList["CATALOG_GROUP_ID"], $arUserGroups, $renewal, $siteID, $arDiscountCoupons); } $result = CCatalogDiscount::applyDiscountList($dblCurrentPrice, $resultCurrency, $arDiscounts); if ($result === false) { return false; } if ($minPrice === false || $minPrice > $result['PRICE']) { $basePrice = $dblCurrentPrice; $minPrice = $result['PRICE']; $arMinPrice = $arPriceList; $arMinDiscounts = $result['DISCOUNT_LIST']; } } unset($arPriceList); if ($boolDiscountVat) { if (!self::$optimalPriceWithVat) { $minPrice /= 1 + $arMinPrice['VAT_RATE']; $basePrice /= 1 + $arMinPrice['VAT_RATE']; $minPrice = roundEx($minPrice, CATALOG_VALUE_PRECISION); $basePrice = roundEx($basePrice, CATALOG_VALUE_PRECISION); } } else { if (self::$optimalPriceWithVat) { $minPrice *= 1 + $arMinPrice['VAT_RATE']; $basePrice *= 1 + $arMinPrice['VAT_RATE']; $minPrice = roundEx($minPrice, CATALOG_VALUE_PRECISION); $basePrice = roundEx($basePrice, CATALOG_VALUE_PRECISION); } } $arResult = array('PRICE' => $arMinPrice, 'RESULT_PRICE' => array('BASE_PRICE' => $basePrice, 'DISCOUNT_PRICE' => $minPrice, 'DISCOUNT' => $basePrice - $minPrice, 'PERCENT' => $basePrice > 0 ? 100 * ($basePrice - $minPrice) / $basePrice : 0, 'CURRENCY' => $resultCurrency, 'VAT_RATE' => $arMinPrice['VAT_RATE'], 'VAT_INCLUDED' => self::$optimalPriceWithVat ? 'Y' : 'N'), 'DISCOUNT_PRICE' => $minPrice, 'DISCOUNT' => array(), 'DISCOUNT_LIST' => array()); if (!empty($arMinDiscounts)) { reset($arMinDiscounts); $arResult['DISCOUNT'] = current($arMinDiscounts); $arResult['DISCOUNT_LIST'] = $arMinDiscounts; } if ($eventOnResultExists === true || $eventOnResultExists === null) { foreach (GetModuleEvents('catalog', 'OnGetOptimalPriceResult', true) as $arEvent) { $eventOnResultExists = true; if (ExecuteModuleEventEx($arEvent, array(&$arResult)) === false) { return false; } } if ($eventOnResultExists === null) { $eventOnResultExists = false; } } return $arResult; }
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (isset($arParams["COMPONENT_ENABLE"]) && $arParams["COMPONENT_ENABLE"] === false) { return; } if (!CModule::IncludeModule("brsoft.wishlist")) { return; } //Обработка $arParams $arParams["PARAM1"] = "iblock"; ///TODO: for all modules $arParams["PARAM2"] = intval($arParams["PARAM2"]) ?: false; $arParams["PARAM3"] = intval($arParams["PARAM3"]); if (!$arParams["PARAM2"]) { $arParams["PARAM2"] = CIBlockElement::GetIBlockByID($arParams["PARAM3"]); if (!$arParams["PARAM2"]) { return; } } if (empty($arParams["PARAM3"])) { return; } //не показывать компонент если не указаны к чему он подкреплен (ИД ИБ, ИД елемента ИБ) //Выбор данных для $arResult $arResult = array(); $arResult["WL_USER_ID"] = intval(CBrWishlist::GetWLUserID()); $arResult["USER_ID"] = CBrWishlistUser::GetBXUserID($arResult["WL_USER_ID"]); if ($arResult["WL_USER_ID"] <= 0) { return; }
protected static function clearPublicCache($productID, $productInfo = array()) { $productID = (int)$productID; if ($productID <= 0) return; $iblockID = (int)(isset($productInfo['IBLOCK_ID']) ? $productInfo['IBLOCK_ID'] : CIBlockElement::GetIBlockByID($productID)); if ($iblockID <= 0) return; if (defined('BX_COMP_MANAGED_CACHE') && !isset(self::$clearAutoCache[$iblockID])) { $taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache(); $taggedCache->clearByTag('iblock_id_'.$iblockID); self::$clearAutoCache[$iblockID] = true; } $productInfo['ID'] = $productID; $productInfo['ELEMENT_IBLOCK_ID'] = $iblockID; $productInfo['IBLOCK_ID'] = $iblockID; foreach (GetModuleEvents('catalog', 'OnProductQuantityTrace', true) as $arEvent) ExecuteModuleEventEx($arEvent, array($productID, $productInfo)); }
function getIBlockCodeByElement($elementId) { $arIblock = \CIBlock::GetArrayByID(\CIBlockElement::GetIBlockByID($elementId)); if (!empty($arIblock)) { return $arIblock['CODE']; } return false; }
public function GetDiscountByProduct($productID = 0, $arUserGroups = array(), $renewal = "N", $arCatalogGroups = array(), $siteID = false, $arDiscountCoupons = false) { global $APPLICATION; foreach (GetModuleEvents("catalog", "OnGetDiscountByProduct", true) as $arEvent) { $mxResult = ExecuteModuleEventEx($arEvent, array($productID, $arUserGroups, $renewal, $arCatalogGroups, $siteID, $arDiscountCoupons)); if (true !== $mxResult) { return $mxResult; } } $productID = (int) $productID; if ($productID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_ELEMENT_ID_NOT_FOUND', array('#ID' => $productID)), 'NO_ELEMENT'); return false; } $intIBlockID = CIBlockElement::GetIBlockByID($productID); if ($intIBlockID === false) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_ELEMENT_ID_NOT_FOUND', array('#ID#' => $productID)), 'NO_ELEMENT'); return false; } return CCatalogDiscount::GetDiscount($productID, $intIBlockID, $arCatalogGroups, $arUserGroups, $renewal, $siteID, $arDiscountCoupons); }
/** * <p>Метод определяет имеются ли у товара торговые предложения.</p> * * * * * @param int $intProductID ID товара. * * * * @param int $intIBlockID = 0 ID инфоблока товаров (может отсутствовать, в этом случае будет * лишний запрос к базе) . * * * * @return boolean <p>Метод возвращает <i>true</i> в случае наличия торговых предложений и * <i>false</i> в случае отсутствия или ошибки (некорректных * параметров).</p> <br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/catalogsku/isexistoffers.php * @author Bitrix */ public static function IsExistOffers($intProductID, $intIBlockID = 0) { $intProductID = (int) $intProductID; if ($intProductID == 0) { return false; } $intIBlockID = (int) $intIBlockID; if ($intIBlockID <= 0 && $intProductID > 0) { $intIBlockID = (int) CIBlockElement::GetIBlockByID($intProductID); } if ($intIBlockID <= 0) { return false; } if (!isset(self::$arProductCache[$intIBlockID])) { $arSkuInfo = CCatalogSKU::GetInfoByProductIBlock($intIBlockID); } else { $arSkuInfo = self::$arProductCache[$intIBlockID]; } if (empty($arSkuInfo)) { return false; } $intCount = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $arSkuInfo['IBLOCK_ID'], '=PROPERTY_' . $arSkuInfo['SKU_PROPERTY_ID'] => $intProductID), array()); return $intCount > 0; }
<?php require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; if (!CModule::IncludeModule("iblock") || !$USER->IsAuthorized()) { exit; } global $USER; $elId = intval($_REQUEST['id']); $userId = $USER->GetID(); $iblockId = CIBlockElement::GetIBlockByID($elId); if ($elId > 0) { $db_props = CIBlockElement::GetProperty($iblockId, $elId, array("id" => "asc"), array("CODE" => "LIKE")); $propLikeValue = array(); while ($prop = $db_props->GetNext()) { $propLikeValue[] = $prop['VALUE']; } $key = array_search($userId, $propLikeValue); if ($key !== false) { unset($propLikeValue[$key]); echo 0; } else { $propLikeValue[] = $userId; echo 1; } if (count($propLikeValue) <= 0) { $propLikeValue = ''; } CIBlockElement::SetPropertyValuesEx($elId, $iblockId, array('LIKE' => $propLikeValue)); }
public function OnBeforeIBlockElementDelete($ID) { global $APPLICATION; $ID = (int) $ID; if (0 < $ID) { $intIBlockID = (int) CIBlockElement::GetIBlockByID($ID); if (0 < $intIBlockID) { $arCatalog = CCatalogSKU::GetInfoByProductIBlock($intIBlockID); if (!empty($arCatalog) && is_array($arCatalog) && 0 < $arCatalog['IBLOCK_ID'] && 0 < $arCatalog['SKU_PROPERTY_ID']) { $arFilter = array('IBLOCK_ID' => $arCatalog['IBLOCK_ID'], '=PROPERTY_' . $arCatalog['SKU_PROPERTY_ID'] => $ID); $rsOffers = CIBlockElement::GetList(array(), $arFilter, false, false, array('ID', 'IBLOCK_ID')); while ($arOffer = $rsOffers->Fetch()) { foreach (GetModuleEvents("iblock", "OnBeforeIBlockElementDelete", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($arOffer['ID'])) === false) { $err = Loc::getMessage("BT_MOD_CATALOG_ERR_BEFORE_DEL_TITLE") . ' ' . $arEvent['TO_NAME']; $err_id = false; if ($ex = $APPLICATION->GetException()) { $err .= ': ' . $ex->GetString(); $err_id = $ex->GetID(); } $APPLICATION->ThrowException($err, $err_id); return false; } } if (!CIBlockElement::Delete($arOffer['ID'])) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_ERR_CANNOT_DELETE_OFFERS')); return false; } } } } } return true; }
protected static function clearPublicCache($productID, $productInfo = array()) { $productID = (int) $productID; if ($productID <= 0) { return; } $iblockID = (int) (isset($productInfo['IBLOCK_ID']) ? $productInfo['IBLOCK_ID'] : CIBlockElement::GetIBlockByID($productID)); if ($iblockID <= 0) { return; } if (!isset(self::$clearAutoCache[$iblockID])) { CIBlock::clearIblockTagCache($iblockID); self::$clearAutoCache[$iblockID] = true; } $productInfo['ID'] = $productID; $productInfo['ELEMENT_IBLOCK_ID'] = $iblockID; $productInfo['IBLOCK_ID'] = $iblockID; if (isset($productInfo['CAN_BUY_ZERO'])) { $productInfo['NEGATIVE_AMOUNT_TRACE'] = $productInfo['CAN_BUY_ZERO']; } foreach (GetModuleEvents('catalog', 'OnProductQuantityTrace', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($productID, $productInfo)); } }
<?php if ($arResult["ITEMS"]) { foreach ($arResult["ITEMS"] as &$arItem) { if ($arItem["DELAY"] == "N" && $arItem["CAN_BUY"] == "Y") { $id = $arItem['PRODUCT_ID']; $arSelect = array("ID", "CATALOG_GROUP_1", "PROPERTY_ARTNUMBER"); $arFilter = array("IBLOCK_ID" => CIBlockElement::GetIBlockByID($id), "ID" => $id, "ACTIVE" => "Y"); $res = CIBlockElement::GetList(array(), $arFilter, false, array("nPageSize" => 50), $arSelect); if ($arFields = $res->GetNext()) { $arItem['CATALOG'] = $arFields; $arItem['ARTNUMBER'] = $arFields['PROPERTY_ARTNUMBER_VALUE']; } } } }
/** * @param int $ELEMENT_ID * @param string|int $PROPERTY_CODE * @param mixed $PROPERTY_VALUE * @return bool */ function SetPropertyValueCode($ELEMENT_ID, $PROPERTY_CODE, $PROPERTY_VALUE) { $IBLOCK_ID = CIBlockElement::GetIBlockByID($ELEMENT_ID); if (!$IBLOCK_ID) { return false; } CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, $PROPERTY_CODE); return true; }
protected static function clearPublicCache($productID, $productInfo = array()) { global $CACHE_MANAGER; $productID = (int) $productID; if ($productID <= 0) { return; } $iblockID = (int) (isset($productInfo['IBLOCK_ID']) ? $productInfo['IBLOCK_ID'] : CIBlockElement::GetIBlockByID($productID)); if ($iblockID <= 0) { return; } if (defined('BX_COMP_MANAGED_CACHE') && !isset(self::$clearAutoCache[$iblockID])) { $CACHE_MANAGER->ClearByTag('iblock_id_' . $iblockID); self::$clearAutoCache[$iblockID] = true; } $productInfo['ID'] = $productID; $productInfo['ELEMENT_IBLOCK_ID'] = $iblockID; $productInfo['IBLOCK_ID'] = $iblockID; foreach (GetModuleEvents('catalog', 'OnProductQuantityTrace', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($productID, $productInfo)); } }
$result = array("result" => false, "ERROR_CODE" => 0); $element_id = intval($_REQUEST["element_id"]); $vote_value = intval($_REQUEST["value"]); if ($element_id > 0) { //unset($_SESSION["iblock.comments"][$element_id]); if (!isset($_SESSION["iblock.comments"][$element_id])) { $_SESSION["iblock.comments"][$element_id] = true; if (abs($vote_value) > 1) { if ($vote_value > 0) { $vote_value = 1; } else { $vote_value = -1; } } if (CModule::IncludeModule("iblock")) { $iblock_id = CIBlockElement::GetIBlockByID($element_id); if ($iblock_id !== FALSE) { $arOrder = array("ID" => "ASC"); $arFilter = array("ID" => $element_id); $arSelect = array("ID", "PROPERTY_VOTE_PLUS", "PROPERTY_VOTE_MINUS"); $dbElement = CIBlockElement::GetList($arOrder, $arFilter, $arSelect); if ($arElement = $dbElement->GetNext()) { $property_code = $vote_value > 0 ? "VOTE_PLUS" : "VOTE_MINUS"; $arElement["PROPERTY_" . $property_code . "_VALUE"] += $vote_value; $property_value = $arElement["PROPERTY_" . $property_code . "_VALUE"]; CIBlockElement::SetPropertyValues($element_id, $iblock_id, $property_value, $property_code); $result["result"] = true; $result["VOTE_PLUS"] = $arElement["PROPERTY_VOTE_PLUS_VALUE"]; $result["VOTE_MINUS"] = $arElement["PROPERTY_VOTE_MINUS_VALUE"]; } else { $result["ERROR_CODE"] = -4;
/** * Process Puy Product. * * @param int $productID * @param float $quantity * @param array $values * @param array $arRewriteFields * @throws void|Bitrix\Main\SystemException */ protected function addProductToBasket($productID, $quantity, $values = array(), $arRewriteFields = array()) { $productProperties = array(); $productID = (int) $productID; $intProductIBlockID = (int) CIBlockElement::GetIBlockByID($productID); if ($intProductIBlockID > 0) { $productCatalogInfo = CCatalogSKU::getInfoByIblock($intProductIBlockID); $isOffer = CCatalogSKU::TYPE_OFFERS == $productCatalogInfo['CATALOG_TYPE']; if ($this->arParams['ADD_PROPERTIES_TO_BASKET'] == 'Y') { // Is not offer if (!$isOffer) { // Props not empty if (!empty($this->arParams['CART_PROPERTIES'][$intProductIBlockID])) { $productProperties = CIBlockPriceTools::CheckProductProperties($intProductIBlockID, $productID, $this->arParams['CART_PROPERTIES'][$intProductIBlockID], $values, $this->arParams['PARTIAL_PRODUCT_PROPERTIES'] == 'Y'); if (!is_array($productProperties)) { throw new SystemException(Loc::getMessage("CVP_PARTIAL_BASKET_PROPERTIES_ERROR")); } } } else { if (!empty($this->arParams['CART_PROPERTIES'][$intProductIBlockID])) { $productProperties = CIBlockPriceTools::GetOfferProperties($productID, $productCatalogInfo['PRODUCT_IBLOCK_ID'], $this->arParams['CART_PROPERTIES'][$intProductIBlockID]); } } } if (0 >= $quantity) { $rsRatios = CCatalogMeasureRatio::getList(array(), array('PRODUCT_ID' => $productID), false, false, array('PRODUCT_ID', 'RATIO')); if ($arRatio = $rsRatios->Fetch()) { $intRatio = (int) $arRatio['RATIO']; $dblRatio = (double) $arRatio['RATIO']; $quantity = $dblRatio > $intRatio ? $dblRatio : $intRatio; } } if (0 >= $quantity) { $quantity = 1; } } else { throw new SystemException(Loc::getMessage('CVP_CATALOG_PRODUCT_NOT_FOUND') . "."); } if (!Add2BasketByProductID($productID, $quantity, $arRewriteFields, $productProperties)) { throw new SystemException(Loc::getMessage("CVP_CATALOG_ERROR2BASKET") . "."); } }
if(isset($_REQUEST[$arParams["ACTION_VARIABLE"]."BUY"])) $action = "BUY"; elseif(isset($_REQUEST[$arParams["ACTION_VARIABLE"]."ADD2BASKET"])) $action = "ADD2BASKET"; else $action = strtoupper($_REQUEST[$arParams["ACTION_VARIABLE"]]); $productID = intval($_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]]); if (($action == "ADD2BASKET" || $action == "BUY") && $productID > 0) { if (Loader::includeModule("sale") && Loader::includeModule("catalog")) { $addByAjax = isset($_REQUEST['ajax_basket']) && 'Y' == $_REQUEST['ajax_basket']; $QUANTITY = 0; $product_properties = array(); $intProductIBlockID = intval(CIBlockElement::GetIBlockByID($productID)); if (0 < $intProductIBlockID) { if ($arParams['ADD_PROPERTIES_TO_BASKET'] == 'Y') { if ($intProductIBlockID == $arParams["IBLOCK_ID"]) { if (!empty($arParams["PRODUCT_PROPERTIES"])) { if ( isset($_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]]) && is_array($_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]]) ) { $product_properties = CIBlockPriceTools::CheckProductProperties( $arParams["IBLOCK_ID"],
break; default: $arEventFields["PARAMS"] .= $f["NAME"] . ": " . $_REQUEST[$f['CODE']] . "\n"; $arIBlockFields["PROPERTY_VALUES"][$f['CODE']] = prepareIBlockPropertyValue($_REQUEST[$f["CODE"]], $f); break; } break; default: break; } } $el = new CIBlockElement(); if (!($result = $el->Add($arIBlockFields))) { $arResult["ERROR_MESSAGE"][] = $el->LAST_ERROR; } else { if (($rsIBlock = CIBlockElement::GetIBlockByID($result)) !== FALSE) { $dbIBlock = CIBlock::GetByID($rsIBlock); if ($arIBlock = $dbIBlock->GetNext()) { $rsIBlockType = $arIBlock["IBLOCK_TYPE_ID"]; $arEventFields["EDIT_LINK"] = "http://" . $_SERVER["HTTP_HOST"] . "/bitrix/admin/iblock_element_edit.php?IBLOCK_ID=" . $rsIBlock . "&type=" . $rsIBlockType . "&ID=" . $result . "&lang=ru&find_section_section=-1&WF=Y"; } } } if (empty($arResult["ERROR_MESSAGE"])) { if ($arParams["SEND_EMAIL"] == "Y") { if (!empty($arParams["EVENT_MESSAGE_ID"])) { foreach ($arParams["EVENT_MESSAGE_ID"] as $v) { if (IntVal($v) > 0) { CEvent::Send($arParams["EVENT_NAME"], SITE_ID, $arEventFields, "N", IntVal($v)); } }
$successfulAdd = true; if (isset($_REQUEST[$arParams["ACTION_VARIABLE"]]) && isset($_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]])) { if (isset($_REQUEST[$arParams["ACTION_VARIABLE"] . "BUY"])) { $action = "BUY"; } elseif (isset($_REQUEST[$arParams["ACTION_VARIABLE"] . "ADD2BASKET"])) { $action = "ADD2BASKET"; } else { $action = strtoupper($_REQUEST[$arParams["ACTION_VARIABLE"]]); } $productID = (int) $_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]]; if (($action == "ADD2BASKET" || $action == "BUY" || $action == "SUBSCRIBE_PRODUCT") && $productID > 0) { if (Loader::includeModule("sale") && Loader::includeModule("catalog")) { $addByAjax = isset($_REQUEST['ajax_basket']) && 'Y' == $_REQUEST['ajax_basket']; $QUANTITY = 0; $product_properties = array(); $intProductIBlockID = (int) CIBlockElement::GetIBlockByID($productID); if (0 < $intProductIBlockID) { if ($arParams['ADD_PROPERTIES_TO_BASKET'] == 'Y') { if ($intProductIBlockID == $arParams["IBLOCK_ID"]) { if (!empty($arParams["PRODUCT_PROPERTIES"])) { if (isset($_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]]) && is_array($_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]])) { $product_properties = CIBlockPriceTools::CheckProductProperties($arParams["IBLOCK_ID"], $productID, $arParams["PRODUCT_PROPERTIES"], $_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]], $arParams['PARTIAL_PRODUCT_PROPERTIES'] == 'Y'); if (!is_array($product_properties)) { $strError = GetMessage("CATALOG_PARTIAL_BASKET_PROPERTIES_ERROR"); $successfulAdd = false; } } else { $strError = GetMessage("CATALOG_EMPTY_BASKET_PROPERTIES_ERROR"); $successfulAdd = false; } }
} if ($_REQUEST['action'] && in_array($_REQUEST['action'], $arrayActions)) { if (intval($_REQUEST['id']) > 0) { $id = $_REQUEST['id']; } if (strlen($arParams["COMPARE_URL"]) <= 0) { $arParams["COMPARE_URL"] = "compare.php"; } if (!$arParams["IBLOCK_ID"]) { $mxResult = CCatalogSku::GetProductInfo($_REQUEST['id']); if (is_array($mxResult)) { $parentid = $mxResult['ID']; } else { $parentid = $_REQUEST['id']; } $arParams["IBLOCK_ID"] = CIBlockElement::GetIBlockByID($parentid); } if (!isset($_SESSION[$arParams["NAME"]]) || !is_array($_SESSION[$arParams["NAME"]])) { $_SESSION[$arParams["NAME"]] = array(); } if (!isset($_SESSION[$arParams["NAME"]][$arParams["IBLOCK_ID"]]) || !is_array($_SESSION[$arParams["NAME"]][$arParams["IBLOCK_ID"]])) { $_SESSION[$arParams["NAME"]][$arParams["IBLOCK_ID"]] = array(); } if (!isset($_SESSION[$arParams["NAME"]][$arParams["IBLOCK_ID"]]["ITEMS"]) || !is_array($_SESSION[$arParams["NAME"]][$arParams["IBLOCK_ID"]]["ITEMS"])) { $_SESSION[$arParams["NAME"]][$arParams["IBLOCK_ID"]]["ITEMS"] = array(); } $action = $_REQUEST['action']; if ($_REQUEST["action"] == "ADD_TO_COMPARE_LIST" && $id > 0) { if (!array_key_exists($id, $_SESSION[$arParams["NAME"]][$arParams["IBLOCK_ID"]]["ITEMS"])) { // die(); //SELECT