public function executeComponent() { $this->IBLOCK_ID = $this->arParams["IBLOCK_ID"]; $this->SECTION_ID = $this->arParams["SECTION_ID"]; $this->FILTER_NAME = $this->arParams["FILTER_NAME"]; $this->SAFE_FILTER_NAME = htmlspecialcharsbx($this->FILTER_NAME); if (self::$catalogIncluded === null) self::$catalogIncluded = Loader::includeModule('catalog'); if (self::$catalogIncluded) { $arCatalog = CCatalogSKU::GetInfoByProductIBlock($this->IBLOCK_ID); if (!empty($arCatalog)) { $this->SKU_IBLOCK_ID = $arCatalog["IBLOCK_ID"]; $this->SKU_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"]; } } /*DEMO CODE for "pure" class.php component $this->arResult["FFF"] = "ggg"; $this->includeComponentTemplate(); return $this->ELEMENT_ID; */ return parent::executeComponent(); }
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__); }
function getOffers() { if (!class_exists('\\CCatalogSKU')) { \CModule::IncludeModule('catalog'); } $retval = array(); $arInfo = \CCatalogSKU::GetInfoByProductIBlock($this->iblock_id); if (is_array($arInfo)) { $retval = \Cpeople\Classes\Block\Getter::instance()->setFilter(array('IBLOCK_ID' => $arInfo['IBLOCK_ID'], 'PROPERTY_' . $arInfo['SKU_PROPERTY_ID'] => $this->id))->setClassName('\\Cpeople\\Classes\\Catalog\\Offer')->get(); } return empty_array($retval) ? false : $retval; }
protected function getOffers() { $arPropertyMap = array(); $arSelectedPropTypes = array('S', 'N', 'L', 'E', 'G'); $this->arSelectOfferProps = array(); $arOffers = \CCatalogSKU::GetInfoByProductIBlock($this->iBlockId); if (empty($arOffers['IBLOCK_ID'])) { return array(); } $this->intOfferIBlockID = $arOffers['IBLOCK_ID']; $rsOfferIBlocks = \CIBlock::GetByID($this->intOfferIBlockID); if (!($this->arOfferIBlock = $rsOfferIBlocks->Fetch())) { throw new SystemException("Bad offers iBlock ID (" . __CLASS__ . "::" . __METHOD__ . ")"); } $rsProps = \CIBlockProperty::GetList(array('SORT' => 'ASC', 'NAME' => 'ASC'), array('IBLOCK_ID' => $this->intOfferIBlockID, 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N')); while ($arProp = $rsProps->Fetch()) { $arProp['ID'] = (int) $arProp['ID']; if ($arOffers['SKU_PROPERTY_ID'] != $arProp['ID']) { $arProp['USER_TYPE'] = (string) $arProp['USER_TYPE']; $arProp['CODE'] = (string) $arProp['CODE']; $this->arIblock['OFFERS_PROPERTY'][$arProp['ID']] = $arProp; $this->arProperties[$arProp['ID']] = $arProp; if (in_array($arProp['PROPERTY_TYPE'], $arSelectedPropTypes)) { $this->arSelectOfferProps[] = $arProp['ID']; } if ($arProp['CODE'] !== '') { foreach ($this->arIblock['PROPERTY'] as &$arMainProp) { if ($arMainProp['CODE'] == $arProp['CODE']) { $arPropertyMap[$arProp['ID']] = $arMainProp['CODE']; break; } } if (isset($arMainProp)) { unset($arMainProp); } } } } $this->arOfferIBlock['LID'] = $this->arIblock['LID']; $this->arOfferIBlock['PROPERTY'] = array(); $rsProps = \CIBlockProperty::GetList(array('SORT' => 'ASC', 'NAME' => 'ASC'), array('IBLOCK_ID' => $this->intOfferIBlockID, 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N')); while ($arProp = $rsProps->Fetch()) { $arProp['ID'] = (int) $arProp['ID']; $arProp['USER_TYPE'] = (string) $arProp['USER_TYPE']; $arProp['CODE'] = (string) $arProp['CODE']; $this->arOfferIBlock['PROPERTY'][$arProp['ID']] = $arProp; } return $arOffers; }
public function executeComponent() { $this->IBLOCK_ID = $this->arParams["IBLOCK_ID"]; $this->SECTION_ID = $this->arParams["SECTION_ID"]; $this->FILTER_NAME = $this->arParams["FILTER_NAME"]; if (CModule::IncludeModule("catalog")) { $arCatalog = CCatalogSKU::GetInfoByProductIBlock($this->IBLOCK_ID); if (!empty($arCatalog) && is_array($arCatalog)) { $this->SKU_IBLOCK_ID = $arCatalog["IBLOCK_ID"]; $this->SKU_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"]; } } /*DEMO CODE for "pure" class.php component $this->arResult["FFF"] = "ggg"; $this->includeComponentTemplate(); return $this->ELEMENT_ID; */ return parent::executeComponent(); }
public function executeComponent() { $this->IBLOCK_ID = $this->arParams["IBLOCK_ID"]; $this->SECTION_ID = $this->arParams["SECTION_ID"]; $this->FILTER_NAME = $this->arParams["FILTER_NAME"]; $this->SAFE_FILTER_NAME = htmlspecialcharsbx($this->FILTER_NAME); if (self::$catalogIncluded === null) self::$catalogIncluded = Loader::includeModule('catalog'); if (self::$catalogIncluded) { $arCatalog = CCatalogSKU::GetInfoByProductIBlock($this->IBLOCK_ID); if (!empty($arCatalog)) { $this->SKU_IBLOCK_ID = $arCatalog["IBLOCK_ID"]; $this->SKU_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"]; } } $this->facet = new \Bitrix\Iblock\PropertyIndex\Facet($this->IBLOCK_ID); return parent::executeComponent(); }
<?php $arInfo = CCatalogSKU::GetInfoByProductIBlock($arParams["IBLOCK_ID"]); if ($arInfo) { $arConvertParams = array(); if ('Y' == $arParams['CONVERT_CURRENCY']) { if (!CModule::IncludeModule('currency')) { $arParams['CONVERT_CURRENCY'] = 'N'; $arParams['CURRENCY_ID'] = ''; } else { $arCurrencyInfo = CCurrency::GetByID($arParams['CURRENCY_ID']); if (!(is_array($arCurrencyInfo) && !empty($arCurrencyInfo))) { $arParams['CONVERT_CURRENCY'] = 'N'; $arParams['CURRENCY_ID'] = ''; } else { $arParams['CURRENCY_ID'] = $arCurrencyInfo['CURRENCY']; $arConvertParams['CURRENCY_ID'] = $arCurrencyInfo['CURRENCY']; } } } foreach ($arResult["ITEMS"] as $key => $arItem) { $rsOffers = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $arInfo["IBLOCK_ID"], "PROPERTY_" . $arInfo["SKU_PROPERTY_ID"] => $arItem["ID"]), false, false, array("ID", "CATALOG_QUANTITY")); $arOffers = CIBlockPriceTools::GetOffersArray($arParams["IBLOCK_ID"], $arItem["ID"], 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); foreach ($arOffers as $arOffer) { $arResult["ITEMS"][$key]["OFFERS"][] = $arOffer; $dbProductDiscounts = CCatalogDiscount::GetList(array(), array("PRODUCT_ID" => $arOffer["ID"])); if ($dbProductDiscounts && $dbProductDiscounts->SelectedRowsCount() > 0) { while ($arProductDiscounts = $dbProductDiscounts->GetNext()) { if ($arProductDiscounts["VALUE_TYPE"] == "F") { echo "f"; $i = 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; }
$arThemesList = array('blue' => GetMessage('CP_BCT_TPL_THEME_BLUE'), 'green' => GetMessage('CP_BCT_TPL_THEME_GREEN'), 'red' => GetMessage('CP_BCT_TPL_THEME_RED'), 'wood' => GetMessage('CP_BCT_TPL_THEME_WOOD'), 'yellow' => GetMessage('CP_BCT_TPL_THEME_YELLOW'), 'black' => GetMessage('CP_BCT_TPL_THEME_BLACK')); $dir = trim(preg_replace("'[\\\\/]+'", "/", dirname(__FILE__) . '/' . $arCurrentValues['VIEW_MODE'] . '/themes/')); if (is_dir($dir)) { foreach ($arThemesList as $themeID => $themeName) { if (!is_file($dir . $themeID . '/style.css')) { continue; } $arThemes[$themeID] = $themeName; } } $arTemplateParameters['TEMPLATE_THEME'] = array('PARENT' => 'VISUAL', 'NAME' => GetMessage("CP_BCT_TPL_TEMPLATE_THEME"), 'TYPE' => 'LIST', 'VALUES' => $arThemes, 'DEFAULT' => 'blue', 'ADDITIONAL_VALUES' => 'Y'); } $arSKU = false; $boolSKU = false; if ($boolCatalog && (isset($arCurrentValues['IBLOCK_ID']) && 0 < intval($arCurrentValues['IBLOCK_ID']))) { $arSKU = CCatalogSKU::GetInfoByProductIBlock($arCurrentValues['IBLOCK_ID']); $boolSKU = !empty($arSKU) && is_array($arSKU); } if ($boolSKU) { $arDisplayModeList = array('N' => GetMessage('CP_BCT_TPL_DML_SIMPLE'), 'Y' => GetMessage('CP_BCT_TPL_DML_EXT')); $arTemplateParameters['PRODUCT_DISPLAY_MODE'] = array('PARENT' => 'VISUAL', 'NAME' => GetMessage('CP_BCT_TPL_PRODUCT_DISPLAY_MODE'), 'TYPE' => 'LIST', 'MULTIPLE' => 'N', 'ADDITIONAL_VALUES' => 'N', 'REFRESH' => 'Y', 'DEFAULT' => 'N', 'VALUES' => $arDisplayModeList); } if (isset($arCurrentValues['IBLOCK_ID']) && 0 < intval($arCurrentValues['IBLOCK_ID'])) { $arAllPropList = array(); $arFilePropList = array('-' => GetMessage('CP_BCT_TPL_PROP_EMPTY')); $arListPropList = array('-' => GetMessage('CP_BCT_TPL_PROP_EMPTY')); $rsProps = CIBlockProperty::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('IBLOCK_ID' => $arCurrentValues['IBLOCK_ID'], 'ACTIVE' => 'Y')); while ($arProp = $rsProps->Fetch()) { $strPropName = '[' . $arProp['ID'] . ']' . ('' != $arProp['CODE'] ? '[' . $arProp['CODE'] . ']' : '') . ' ' . $arProp['NAME']; if ('' == $arProp['CODE']) { $arProp['CODE'] = $arProp['ID'];
public function obtainBasketPropsSKU(&$arBasketItems, $arSkuProps, $arParents) { $arRes = array(); $arSkuIblockID = array(); if (self::isNonemptyArray($arBasketItems) && self::isNonemptyArray($arParents)) { foreach ($arBasketItems as &$arItem) { // catalog-specific logic farther if (!$this->cameFromCatalog($arItem)) { continue; } if (array_key_exists($arItem["PRODUCT_ID"], $arParents)) { $arSKU = CCatalogSKU::GetInfoByProductIBlock($arParents[$arItem["PRODUCT_ID"]]["IBLOCK_ID"]); if (!array_key_exists($arSKU["IBLOCK_ID"], $arSkuIblockID)) { $arSkuIblockID[$arSKU["IBLOCK_ID"]] = $arSKU; } $arItem["IBLOCK_ID"] = $arSKU["IBLOCK_ID"]; $arItem["SKU_PROPERTY_ID"] = $arSKU["SKU_PROPERTY_ID"]; } } unset($arItem); if ($this->useIBlock) { if (!self::isNonemptyArray($arSkuProps)) { $arSkuProps = array(); } foreach ($arSkuIblockID as $skuIblockID => $arSKU) { // possible props values $rsProps = CIBlockProperty::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('IBLOCK_ID' => $skuIblockID, 'ACTIVE' => 'Y')); while ($arProp = $rsProps->Fetch()) { if ($arProp['PROPERTY_TYPE'] == 'L' || $arProp['PROPERTY_TYPE'] == 'E' || $arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { if ($arProp['XML_ID'] == 'CML2_LINK') { continue; } if (!in_array($arProp['CODE'], $arSkuProps)) { continue; } $arRes[$skuIblockID][$arProp['ID']] = array('ID' => $arProp['ID'], 'CODE' => $arProp['CODE'], 'NAME' => $arProp['NAME'], 'TYPE' => $arProp['PROPERTY_TYPE'], 'VALUES' => array()); if ($arProp['PROPERTY_TYPE'] == 'L') { $arValues = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arEnum = $rsPropEnums->Fetch()) { $arValues[$arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['VALUE'], 'PICT' => false); } $arRes[$skuIblockID][$arProp['ID']]['VALUES'] = $arValues; } elseif ($arProp['PROPERTY_TYPE'] == 'E') { $arValues = array(); $rsPropEnums = CIBlockElement::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arProp['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y'), false, false, array('ID', 'NAME', 'PREVIEW_PICTURE')); while ($arEnum = $rsPropEnums->Fetch()) { $arEnum['PREVIEW_PICTURE'] = CFile::GetFileArray($arEnum['PREVIEW_PICTURE']); if (!is_array($arEnum['PREVIEW_PICTURE'])) { continue; } $productImg = CFile::ResizeImageGet($arEnum['PREVIEW_PICTURE'], array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); $arEnum['PREVIEW_PICTURE']['SRC'] = $productImg['src']; $arValues[$arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['NAME'], 'SORT' => $arEnum['SORT'], 'PICT' => $arEnum['PREVIEW_PICTURE']); } $arRes[$skuIblockID][$arProp['ID']]['VALUES'] = $arValues; } elseif ($arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { $arValues = array(); if ($this->useHL) { $hlblock = HL\HighloadBlockTable::getList(array("filter" => array("TABLE_NAME" => $arProp["USER_TYPE_SETTINGS"]["TABLE_NAME"])))->fetch(); if ($hlblock) { $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $rsData = $entity_data_class::getList(); while ($arData = $rsData->fetch()) { $arValues[$arData['ID']] = array('ID' => $arData['ID'], 'NAME' => $arData['UF_NAME'], 'SORT' => $arData['UF_SORT'], 'FILE' => $arData['UF_FILE'], 'PICT' => '', 'XML_ID' => $arData['UF_XML_ID']); } $arRes[$skuIblockID][$arProp['ID']]['VALUES'] = $arValues; } } } } } } foreach ($arBasketItems as &$arItem) { // catalog-specific logic farther: iblocks, catalogs and other friends if (!$this->cameFromCatalog($arItem)) { continue; } $arSelectSkuProps = array(); foreach ($arSkuProps as $prop) { $arSelectSkuProps[] = "PROPERTY_" . $prop; } if (isset($arItem["IBLOCK_ID"]) && intval($arItem["IBLOCK_ID"]) > 0 && array_key_exists($arItem["IBLOCK_ID"], $arRes)) { $arItem["SKU_DATA"] = $arRes[$arItem["IBLOCK_ID"]]; $arUsedValues = array(); $arTmpRes = array(); $arOfFilter = array("IBLOCK_ID" => $arItem["IBLOCK_ID"], "PROPERTY_" . $arSkuIblockID[$arItem["IBLOCK_ID"]]["SKU_PROPERTY_ID"] => $arParents[$arItem["PRODUCT_ID"]]["PRODUCT_ID"]); $rsOffers = CIBlockElement::GetList(array(), $arOfFilter, false, false, array_merge(array("ID"), $arSelectSkuProps)); while ($arOffer = $rsOffers->GetNext()) { foreach ($arSkuProps as $prop) { if (!empty($arOffer["PROPERTY_" . $prop . "_VALUE"]) && (!is_array($arUsedValues[$arItem["PRODUCT_ID"]][$prop]) || !in_array($arOffer["PROPERTY_" . $prop . "_VALUE"], $arUsedValues[$arItem["PRODUCT_ID"]][$prop]))) { $arUsedValues[$arItem["PRODUCT_ID"]][$prop][] = $arOffer["PROPERTY_" . $prop . "_VALUE"]; } } } if (!empty($arUsedValues)) { // add only used values to the item SKU_DATA foreach ($arRes[$arItem["IBLOCK_ID"]] as $propId => $arProp) { if (!array_key_exists($arProp["CODE"], $arUsedValues[$arItem["PRODUCT_ID"]])) { continue; } $propValues = array(); $skuType = ''; foreach ($arProp["VALUES"] as $valId => $arValue) { // properties of various type have different values in the used values data if ($arProp["TYPE"] == "L" && in_array($arValue["NAME"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "E" && in_array($arValue["ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "S" && in_array($arValue["XML_ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]])) { if ($arProp["TYPE"] == "S") { $arTmpFile = CFile::GetFileArray($arValue["FILE"]); $tmpImg = CFile::ResizeImageGet($arTmpFile, array('width' => 30, 'height' => 30), BX_RESIZE_IMAGE_PROPORTIONAL, true); $arValue['PICT'] = array_change_key_case($tmpImg, CASE_UPPER); $skuType = 'image'; } else { $skuType = 'link'; } $propValues[$valId] = $arValue; } } $arTmpRes['n' . $propId] = array('CODE' => $arProp["CODE"], 'NAME' => $arProp["NAME"], 'SKU_TYPE' => $skuType, 'VALUES' => $propValues); } } $arItem["SKU_DATA"] = $arTmpRes; } if (self::isNonemptyArray($arItem['PROPS'])) { foreach ($arItem['PROPS'] as $v => $prop) { // search for sku property that matches current one // establishing match based on codes even if the code may not set $code = $prop['CODE']; if (self::isNonemptyArray($arItem['SKU_DATA'])) { foreach ($arItem['SKU_DATA'] as $spIndex => $skuProp) { if ($skuProp['CODE'] == $code) { $arItem['PROPS'][$v]['SKU_PROP'] = $spIndex; $arItem['PROPS'][$v]['SKU_TYPE'] = $skuProp['SKU_TYPE']; if (self::isNonemptyArray($skuProp['VALUES'])) { foreach ($skuProp['VALUES'] as $spValue) { if ($skuProp['SKU_TYPE'] == 'image') { $match = $prop["VALUE"] == $spValue["NAME"] || $prop["VALUE"] == $spValue["XML_ID"]; } else { $match = $prop["VALUE"] == $spValue["NAME"]; } // otherwise - the other if ($match) { $arItem['PROPS'][$v]['SKU_VALUE'] = $spValue; break; } } } } } } } } } } } }
<?php define("NO_KEEP_STATISTIC", true); // Не собираем стату по действиям AJAX require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (CModule::IncludeModule("iblock") && CModule::IncludeModule("catalog")) { if (isset($_POST['id']) && isset($_POST['ib']) && isset($_POST['fl'])) { $ids = $_POST['id']; $IBLOCK_ID = $_POST['ib']; $f = fopen($_POST['fl'], "a"); $arInfo = CCatalogSKU::GetInfoByProductIBlock($IBLOCK_ID); foreach ($ids as $id) { $rsOffers = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $arInfo['IBLOCK_ID'], 'PROPERTY_' . $arInfo['SKU_PROPERTY_ID'] => $id)); while ($arOffer = $rsOffers->GetNextElement()) { $el = $arOffer->GetFields(); $el["PROPERTIES"] = $arOffer->GetProperties(); $NewCnt = $id . '|' . $el['ID'] . '|' . $el['ACTIVE'] . '|' . $el['NAME'] . '|' . $el['XML_ID'] . '|' . $el['DETAIL_PAGE_URL'] . '|'; //$NewCnt.=$el['PROPERTIES']['CML2_2']['VALUE'].'|'.$el['PROPERTIES']['COLOR']['VALUE'].'|'.$el['PROPERTIES']['CML2_1']['VALUE'].'|'; $NewCnt .= chr(13); $NewCnt = iconv('UTF-8', "windows-1251", $NewCnt); fwrite($f, $NewCnt); } } fclose($f); //print_r($ids); echo true; } else { echo md5('GET OUT!!!');
public static function GetInheritedPropertyTemplateElementMenuItems($iblock_id, $action_function, $menuID, $inputID = "") { $result = array(); $result["this"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_NAME"), "ONCLICK" => "$action_function('{=this.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_LOWER_NAME"), "ONCLICK" => "$action_function('{=lower this.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_CODE"), "ONCLICK" => "$action_function('{=this.Code}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_PREVIEW_TEXT"), "ONCLICK" => "$action_function('{=this.PreviewText}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_DETAIL_TEXT"), "ONCLICK" => "$action_function('{=this.DetailText}', '$menuID', '$inputID')", ), ), ); if ($iblock_id > 0) { $result["properties"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PROPERTIES"), "MENU" => array( ), ); $rsProperty = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $iblock_id)); while($property = $rsProperty->fetch()) { if ($property["PROPERTY_TYPE"] != "F") { $result["properties"]["MENU"][] = array( "TEXT" => $property["NAME"], "ONCLICK" => "$action_function('{=this.property.".($property["CODE"]!=""? $property["CODE"]: $property["ID"])."}', '$menuID', '$inputID')", ); } } } $result["parent"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT_NAME"), "ONCLICK" => "$action_function('{=parent.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT_CODE"), "ONCLICK" => "$action_function('{=parent.Code}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT_TEXT"), "ONCLICK" => "$action_function('{=parent.PreviewText}', '$menuID', '$inputID')", ), ), ); $result["iblock"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK_NAME"), "ONCLICK" => "$action_function('{=iblock.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK_CODE"), "ONCLICK" => "$action_function('{=iblock.Code}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK_TEXT"), "ONCLICK" => "$action_function('{=iblock.PreviewText}', '$menuID', '$inputID')", ), ), ); if (\Freetrix\Main\Loader::includeModule('catalog')) { $arCatalog = \CCatalogSKU::GetInfoByProductIBlock($iblock_id); if (is_array($arCatalog)) { $result["sku_properties"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_SKU_PROPERTIES"), "MENU" => array( ), ); $rsProperty = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $arCatalog["IBLOCK_ID"])); while($property = $rsProperty->fetch()) { if ($property["PROPERTY_TYPE"] != "F") { $result["sku_properties"]["MENU"][] = array( "TEXT" => $property["NAME"], "ONCLICK" => "$action_function('{=concat {=distinct this.catalog.sku.property.".($property["CODE"]!=""? $property["CODE"]: $property["ID"])." \", \"}}', '$menuID', '$inputID')", ); } } $result["sku_price"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_SKU_PRICE"), "MENU" => array(), ); $rsPrice = CCatalogGroup::GetListEx(array("SORT"=>"ASC"), array(), false, false, array("ID", "NAME")); while ($price = $rsPrice->Fetch()) { if (preg_match("/^[a-zA-Z0-9]+\$/", $price["NAME"])) { $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MIN_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=min this.catalog.sku.price.".$price["NAME"]."}', '$menuID', '$inputID')", ); $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MAX_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=max this.catalog.sku.price.".$price["NAME"]."}', '$menuID', '$inputID')", ); } else { $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MIN_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=min this.catalog.sku.price.".$price["ID"]."}', '$menuID', '$inputID')", ); $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MAX_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=max this.catalog.sku.price.".$price["ID"]."}', '$menuID', '$inputID')", ); } } } $result["catalog"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_CATALOG"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_CATALOG_WEIGHT"), "ONCLICK" => "$action_function('{=this.catalog.weight}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_CATALOG_MEASURE"), "ONCLICK" => "$action_function('{=this.catalog.measure}', '$menuID', '$inputID')", ), ), ); $result["price"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PRICE"), "MENU" => array(), ); $rsPrice = CCatalogGroup::GetListEx(array("SORT"=>"ASC"), array(), false, false, array("ID", "NAME")); while ($price = $rsPrice->Fetch()) { if (preg_match("/^[a-zA-Z0-9]+\$/", $price["NAME"])) $result["price"]["MENU"][] = array( "TEXT" => $price["NAME"], "ONCLICK" => "$action_function('{=this.catalog.price.".$price["NAME"]."}', '$menuID', '$inputID')", ); else $result["price"]["MENU"][] = array( "TEXT" => $price["NAME"], "ONCLICK" => "$action_function('{=this.catalog.price.".$price["ID"]."}', '$menuID', '$inputID')", ); } $result["store"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_STORE"), "MENU" => array(), ); $rsStore = CCatalogStore::GetList(); while ($store = $rsStore->Fetch()) { $result["store"]["MENU"][] = array( "TEXT" => $store["TITLE"], "ONCLICK" => "$action_function('{=catalog.store.".$store["ID"].".name}', '$menuID', '$inputID')", ); } } $result["misc"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MISC"), "MENU" => array(), ); $result["misc"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_SECTIONS_PATH"), "ONCLICK" => "$action_function('{=concat this.sections.name \" / \"}', '$menuID', '$inputID')", ); if (\Freetrix\Main\Loader::includeModule('catalog')) { $result["misc"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_STORE_LIST"), "ONCLICK" => "$action_function('{=concat catalog.store \", \"}', '$menuID', '$inputID')", ); } $r = array(); foreach($result as $category) { if (!empty($category) && !empty($category["MENU"])) { $r[] = $category; } } return $r; }
protected function getOffersCatalog() { if ($this->offersCatalog === null) { $this->offersCatalog = \CCatalogSKU::GetInfoByProductIBlock($this->getIblockId()); } return $this->offersCatalog; }
'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; } } foreach($arSkuElements as $skuId)
public static function getTreeProperties($skuInfo, $propertiesCodes, $defaultFields = array()) { $requireFields = array( 'ID', 'UF_XML_ID', 'UF_NAME', ); $result = array(); if (empty($skuInfo)) return $result; if (!is_array($skuInfo)) { $skuInfo = (int)$skuInfo; if ($skuInfo <= 0) return $result; if (self::$catalogIncluded === null) self::$catalogIncluded = Loader::includeModule('catalog'); if (!self::$catalogIncluded) return $result; $skuInfo = CCatalogSKU::GetInfoByProductIBlock($skuInfo); if (empty($skuInfo)) return $result; } if (empty($propertiesCodes) || !is_array($propertiesCodes)) return $result; $showMode = ''; $propertyIterator = PropertyTable::getList(array( 'select' => array( 'ID', 'IBLOCK_ID', 'CODE', 'NAME', 'SORT', 'LINK_IBLOCK_ID', 'PROPERTY_TYPE', 'USER_TYPE', 'USER_TYPE_SETTINGS' ), 'filter' => array( 'IBLOCK_ID' => $skuInfo['IBLOCK_ID'], 'PROPERTY_TYPE' => array( PropertyTable::TYPE_LIST, PropertyTable::TYPE_ELEMENT, PropertyTable::TYPE_STRING ), 'ACTIVE' => 'Y', 'MULTIPLE' => 'N' ), 'order' => array( 'SORT' => 'ASC', 'ID' => 'ASC' ) )); while ($propInfo = $propertyIterator->fetch()) { $propInfo['ID'] = (int)$propInfo['ID']; if ($propInfo['ID'] == $skuInfo['SKU_PROPERTY_ID']) continue; $propInfo['CODE'] = (string)$propInfo['CODE']; if ($propInfo['CODE'] === '') $propInfo['CODE'] = $propInfo['ID']; if (!in_array($propInfo['CODE'], $propertiesCodes)) continue; $propInfo['SORT'] = (int)$propInfo['SORT']; $propInfo['USER_TYPE'] = (string)$propInfo['USER_TYPE']; if ($propInfo['PROPERTY_TYPE'] == PropertyTable::TYPE_STRING) { if ('directory' != $propInfo['USER_TYPE']) continue; $propInfo['USER_TYPE_SETTINGS'] = (string)$propInfo['USER_TYPE_SETTINGS']; if ($propInfo['USER_TYPE_SETTINGS'] == '') continue; $propInfo['USER_TYPE_SETTINGS'] = unserialize($propInfo['USER_TYPE_SETTINGS']); if (!isset($propInfo['USER_TYPE_SETTINGS']['TABLE_NAME']) || empty($propInfo['USER_TYPE_SETTINGS']['TABLE_NAME'])) continue; if (self::$highLoadInclude === null) self::$highLoadInclude = Loader::includeModule('highloadblock'); if (!self::$highLoadInclude) continue; $highBlock = HighloadBlockTable::getList(array( 'filter' => array('TABLE_NAME' => $propInfo['USER_TYPE_SETTINGS']['TABLE_NAME']) ))->fetch(); if (!isset($highBlock['ID'])) continue; $entity = HighloadBlockTable::compileEntity($highBlock); $entityDataClass = $entity->getDataClass(); $fieldsList = $entityDataClass::getEntity()->getFields(); if (empty($fieldsList)) continue; $flag = true; foreach ($requireFields as &$fieldCode) { if (!isset($fieldsList[$fieldCode]) || empty($fieldsList[$fieldCode])) { $flag = false; break; } } unset($fieldCode); if (!$flag) continue; $propInfo['USER_TYPE_SETTINGS']['FIELDS_MAP'] = $fieldsList; $propInfo['USER_TYPE_SETTINGS']['ENTITY'] = $entity; } switch ($propInfo['PROPERTY_TYPE']) { case PropertyTable::TYPE_ELEMENT: $showMode = 'PICT'; break; case PropertyTable::TYPE_LIST: $showMode = 'TEXT'; break; case PropertyTable::TYPE_STRING: $showMode = (isset($fieldsList['UF_FILE']) ? 'PICT' : 'TEXT'); break; } $treeProp = array( 'ID' => $propInfo['ID'], 'CODE' => $propInfo['CODE'], 'NAME' => $propInfo['NAME'], 'SORT' => $propInfo['SORT'], 'PROPERTY_TYPE' => $propInfo['PROPERTY_TYPE'], 'USER_TYPE' => $propInfo['USER_TYPE'], 'LINK_IBLOCK_ID' => $propInfo['LINK_IBLOCK_ID'], 'USER_TYPE_SETTINGS' => $propInfo['USER_TYPE_SETTINGS'], 'VALUES' => array(), 'SHOW_MODE' => $showMode, 'DEFAULT_VALUES' => array( 'PICT' => false, 'NAME' => '-' ) ); if ($showMode == 'PICT') { if (isset($defaultFields['PICT'])) { $treeProp['DEFAULT_VALUES']['PICT'] = $defaultFields['PICT']; } } if (isset($defaultFields['NAME'])) { $treeProp['DEFAULT_VALUES']['NAME'] = $defaultFields['NAME']; } $result[$treeProp['CODE']] = $treeProp; } return $result; }
if($arr["MULTIPLE"] == "Y") $arProperty_X[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; elseif($arr["PROPERTY_TYPE"] == "L") $arProperty_X[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; elseif($arr["PROPERTY_TYPE"] == "E" && $arr["LINK_IBLOCK_ID"] > 0) $arProperty_X[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"]; } } } $offers = false; $OFFERS_IBLOCK_ID = 0; $arProperty_Offers = array(); $arProperty_OffersWithoutFile = array(); if ($boolCatalog && isset($arCurrentValues["IBLOCK_ID"])) { $offers = CCatalogSKU::GetInfoByProductIBlock($arCurrentValues["IBLOCK_ID"]); if (!empty($offers)) { $OFFERS_IBLOCK_ID = $offers['IBLOCK_ID']; $rsProp = CIBlockProperty::GetList(array("sort"=>"asc", "name"=>"asc"), array("IBLOCK_ID"=>$OFFERS_IBLOCK_ID, "ACTIVE"=>"Y")); while($arr=$rsProp->Fetch()) { $arr['ID'] = intval($arr['ID']); if ($offers['SKU_PROPERTY_ID'] == $arr['ID']) continue; $strPropName = '['.$arr['ID'].']'.('' != $arr['CODE'] ? '['.$arr['CODE'].']' : '').' '.$arr['NAME']; if ('' == $arr['CODE']) $arr['CODE'] = $arr['ID']; $arProperty_Offers[$arr["CODE"]] = $strPropName; if ('F' != $arr['PROPERTY_TYPE']) $arProperty_OffersWithoutFile[$arr["CODE"]] = $strPropName;
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 function getProductOffers($product_id) { CModule::IncludeModule('iblock'); CModule::IncludeModule('catalog'); $result = array($product_id); $rsEl = CIBlockElement::GetByID($product_id); if ($obEl = $rsEl->GetNext()) { $products_iblock_id = $obEl['IBLOCK_ID']; } $iblock_info = CCatalogSKU::GetInfoByProductIBlock($products_iblock_id); $dbOffers = CIBlockElement::GetList(array('ID' => 'DESC'), array('PROPERTY_' . $iblock_info['SKU_PROPERTY_ID'] => $product_id), false, false, array('ID')); while ($dbOffer = $dbOffers->Fetch()) { $result[] = $dbOffer['ID']; } return $result; }
public function executeComponent() { if (!CModule::IncludeModule('sale')) { ShowError("Module sale not installed!"); return; } if (!CModule::IncludeModule('catalog')) { ShowError("Module catalog not installed!"); return; } $this->arResult["BITRIX_CATEGORY_ID"] = isset($this->arParams["BITRIX_CATEGORY_ID"]) ? $this->arParams["BITRIX_CATEGORY_ID"] : 0; $this->arResult["IBLOCK_ID"] = isset($this->arParams["IBLOCK_ID"]) ? $this->arParams["IBLOCK_ID"] : 0; if (isset($this->arParams["EBAY_CATEGORY_ID"])) { $this->arResult["EBAY_CATEGORY_ID"] = $this->arParams["EBAY_CATEGORY_ID"]; } else { $this->arResult["EBAY_CATEGORY_ID"] = $this->getMappedEbayCategoryId($this->arResult["BITRIX_CATEGORY_ID"]); } $this->arResult["TOP_CATEGORIES_LIST"] = $this->getTopCategories(); $this->arResult["VARIATIONS_BLOCK_ID"] = 'SALE_EBAY_CAT_' . $this->arResult["EBAY_CATEGORY_ID"] . '_VARIATIONS'; $siteRes = CIBlock::GetSite($this->arResult["IBLOCK_ID"]); //todo: It can be many sites for one iblock. if ($site = $siteRes->Fetch()) { $this->arResult["SITE_ID"] = $site["LID"]; } else { $this->arResult["SITE_ID"] = ""; } if (strlen($this->arResult["EBAY_CATEGORY_ID"]) > 0) { $this->arResult["CATEGORY_AND_PARENTS_INFO"] = $this->getCategoryAndParentsInfo($this->arResult["EBAY_CATEGORY_ID"]); if (isset($this->arResult["CATEGORY_AND_PARENTS_INFO"][1]["CATEGORY_ID"])) { $this->arResult["TOP_CATEGORY_ID"] = $this->arResult["CATEGORY_AND_PARENTS_INFO"][1]["CATEGORY_ID"]; } $this->arResult["EBAY_CATEGORY_VARIATIONS"] = \Bitrix\Sale\TradingPlatform\Ebay\Helper::getEbayCategoryVariations($this->arResult["EBAY_CATEGORY_ID"], $this->arResult["SITE_ID"]); if (isset($this->arParams["VARIATIONS_VALUES"])) { $this->arResult["VARIATIONS_VALUES"] = $this->arParams["VARIATIONS_VALUES"]; } else { $this->arResult["VARIATIONS_VALUES"] = $this->getVariationsValues($this->arResult["IBLOCK_ID"], $this->arResult["EBAY_CATEGORY_ID"], $this->arResult["EBAY_CATEGORY_VARIATIONS"]); } } else { $this->arResult["VARIATIONS_VALUES"] = array('' => ''); $this->arResult["EBAY_CATEGORY_VARIATIONS"] = array(); } $this->arResult["CATEGORY_PROPS"] = \CIBlockSectionPropertyLink::GetArray($this->arParams["IBLOCK_ID"], $this->arParams["BITRIX_CATEGORY_ID"]); $rsProps = \CIBlockProperty::GetList(array("SORT" => "ASC", 'ID' => 'ASC'), array("IBLOCK_ID" => $this->arParams["IBLOCK_ID"], "CHECK_PERMISSIONS" => "N", "ACTIVE" => "Y")); while ($arProp = $rsProps->Fetch()) { if (isset($this->arResult["CATEGORY_PROPS"][$arProp["ID"]])) { $this->arResult["CATEGORY_PROPS"][$arProp["ID"]]["NAME"] = $arProp["NAME"]; } } $this->arResult["IBLOCK_IDS"] = array($this->arParams["IBLOCK_ID"] => Loc::getMessage("SALE_EBAY_SEC_CATEGORY_PROP")); $arOffers = \CCatalogSKU::GetInfoByProductIBlock($this->arParams["IBLOCK_ID"]); if (is_array($arOffers) && !empty($arOffers)) { $this->arResult["OFFERS_IBLOCK_ID"] = $arOffers["IBLOCK_ID"]; $this->arResult["CATEGORY_OFFERS_PROPS"] = \CIBlockSectionPropertyLink::GetArray($arOffers["IBLOCK_ID"], $this->arParams["BITRIX_CATEGORY_ID"]); $rsProps = \CIBlockProperty::GetList(array("SORT" => "ASC", 'ID' => 'ASC'), array("IBLOCK_ID" => $arOffers["IBLOCK_ID"], "CHECK_PERMISSIONS" => "N", "ACTIVE" => "Y")); while ($arProp = $rsProps->Fetch()) { if (isset($this->arResult["CATEGORY_OFFERS_PROPS"][$arProp["ID"]])) { $this->arResult["CATEGORY_OFFERS_PROPS"][$arProp["ID"]]["NAME"] = $arProp["NAME"]; } } $this->arResult["IBLOCK_IDS"][$arOffers["IBLOCK_ID"]] = Loc::getMessage("SALE_EBAY_SEC_OFFERS_PROP"); } $this->IncludeComponentTemplate(); }
public static function GetOffersIBlock($IBLOCK_ID) { $arResult = false; $IBLOCK_ID = intval($IBLOCK_ID); if (0 < $IBLOCK_ID) { if (CModule::IncludeModule("catalog")) { $arCatalog = CCatalogSKU::GetInfoByProductIBlock($IBLOCK_ID); if (is_array($arCatalog)) { $arResult = array( 'OFFERS_IBLOCK_ID' => $arCatalog['IBLOCK_ID'], 'OFFERS_PROPERTY_ID' => $arCatalog['SKU_PROPERTY_ID'], ); } } } return $arResult; }
/** * @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; }
/** * @param string $selectName Name of select. * @param int $iblockId Iblock Id. * @param int $bitrixCategoryId Iblock section Id. * @param string $value Selected value. * @return string Html element <select>.... */ public static function getBitrixCategoryPropsHtml($selectName, $iblockId, $bitrixCategoryId = 0, $value = '') { $catProps = self::getPropertiesList($iblockId, $bitrixCategoryId); $resultHtml = ' <select name="' . $selectName . '"> <option value=""></option> <option value="">------------------</option> <option value="">' . Loc::getMessage("SALE_EBAY_HLP_CATEGORY_PROPS") . '</option> <option value="">------------------</option>'; foreach ($catProps as $propId => $prop) { $resultHtml .= '<option value="' . $propId . '"' . ($value == $propId ? ' selected' : '') . '>' . $prop["NAME"] . '</option>'; } $arOffers = \CCatalogSKU::GetInfoByProductIBlock($iblockId); if ($arOffers) { $catProps2 = self::getPropertiesList($arOffers["IBLOCK_ID"], $bitrixCategoryId); $resultHtml .= ' <option value="">------------------</option> <option value="">' . Loc::getMessage("SALE_EBAY_HLP_OFFERS_PROPS") . '</option> <option value="">------------------</option> '; foreach ($catProps2 as $propId => $prop) { $resultHtml .= '<option value="' . $propId . '"' . ($value == $propId ? ' selected' : '') . '>' . $prop["NAME"] . '</option>'; } } $resultHtml .= ' </select>'; return $resultHtml; }
die; } } else { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; echo ShowError(str_replace('#ID#', $intIBlockID, GetMessage("YANDEX_ERR_NO_IBLOCK_FOUND_EXT"))); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } $boolOffers = false; $arOffers = false; $arOfferIBlock = false; $intOfferIBlockID = 0; $arSelectOfferProps = array(); $arSelectedPropTypes = array('S', 'N', 'L', 'E', 'G'); $arOffersSelectKeys = array(YANDEX_SKU_EXPORT_ALL, YANDEX_SKU_EXPORT_MIN_PRICE, YANDEX_SKU_EXPORT_PROP); $arOffers = CCatalogSKU::GetInfoByProductIBlock($intIBlockID); if (!empty($arOffers['IBLOCK_ID'])) { $intOfferIBlockID = $arOffers['IBLOCK_ID']; $strPerm = 'D'; $rsOfferIBlocks = CIBlock::GetByID($intOfferIBlockID); if ($arOfferIBlock = $rsOfferIBlocks->Fetch()) { $bBadBlock = !CIBlockRights::UserHasRightTo($intOfferIBlockID, $intOfferIBlockID, "iblock_admin_display"); if ($bBadBlock) { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; echo ShowError(GetMessage('YANDEX_ERR_NO_ACCESS_IBLOCK_SKU')); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } } else { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; echo ShowError(str_replace('#ID#', $intIBlockID, GetMessage("YANDEX_ERR_NO_IBLOCK_SKU_FOUND")));
} $iblockCode = "clothes_" . WIZARD_SITE_ID; $iblockType = "catalog"; $rsIBlock = CIBlock::GetList(array(), array("XML_ID" => $iblockCode, "TYPE" => $iblockType)); $IBLOCK_CATALOG_ID = false; if ($arIBlock = $rsIBlock->Fetch()) { $IBLOCK_CATALOG_ID = $arIBlock["ID"]; } else { $rsIBlock = CIBlock::GetList(array(), array("XML_ID" => "furniture_" . WIZARD_SITE_ID, "TYPE" => $iblockType)); if ($arIBlock = $rsIBlock->Fetch()) { $IBLOCK_CATALOG_ID = $arIBlock["ID"]; } } if (WIZARD_INSTALL_DEMO_DATA && $IBLOCK_CATALOG_ID) { $boolFlag = true; $arSKU = CCatalogSKU::GetInfoByProductIBlock($IBLOCK_CATALOG_ID); if (!empty($arSKU)) { $boolFlag = CCatalog::UnLinkSKUIBlock($IBLOCK_CATALOG_ID); if (!$boolFlag) { $strError = ""; if ($ex = $APPLICATION->GetException()) { $strError = $ex->GetString(); } else { $strError = "Couldn't unlink iblocks"; } //die($strError); } $boolFlag = CIBlock::Delete($arSKU['IBLOCK_ID']); if (!$boolFlag) { $strError = ""; if ($ex = $APPLICATION->GetException()) {
$intSectionID = $APPLICATION->IncludeComponent("bitrix:catalog.section", "", array("IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"], "IBLOCK_ID" => $arParams["IBLOCK_ID"], "ELEMENT_SORT_FIELD" => $arParams["ELEMENT_SORT_FIELD"], "ELEMENT_SORT_ORDER" => $arParams["ELEMENT_SORT_ORDER"], "ELEMENT_SORT_FIELD2" => $arParams["ELEMENT_SORT_FIELD2"], "ELEMENT_SORT_ORDER2" => $arParams["ELEMENT_SORT_ORDER2"], "PROPERTY_CODE" => $arParams["LIST_PROPERTY_CODE"], "META_KEYWORDS" => $arParams["LIST_META_KEYWORDS"], "META_DESCRIPTION" => $arParams["LIST_META_DESCRIPTION"], "BROWSER_TITLE" => $arParams["LIST_BROWSER_TITLE"], "SET_LAST_MODIFIED" => $arParams["SET_LAST_MODIFIED"], "INCLUDE_SUBSECTIONS" => $arParams["INCLUDE_SUBSECTIONS"], "BASKET_URL" => $arParams["BASKET_URL"], "ACTION_VARIABLE" => $arParams["ACTION_VARIABLE"], "PRODUCT_ID_VARIABLE" => $arParams["PRODUCT_ID_VARIABLE"], "SECTION_ID_VARIABLE" => $arParams["SECTION_ID_VARIABLE"], "PRODUCT_QUANTITY_VARIABLE" => $arParams["PRODUCT_QUANTITY_VARIABLE"], "PRODUCT_PROPS_VARIABLE" => $arParams["PRODUCT_PROPS_VARIABLE"], "FILTER_NAME" => $arParams["FILTER_NAME"], "CACHE_TYPE" => $arParams["CACHE_TYPE"], "CACHE_TIME" => $arParams["CACHE_TIME"], "CACHE_FILTER" => $arParams["CACHE_FILTER"], "CACHE_GROUPS" => $arParams["CACHE_GROUPS"], "SET_TITLE" => $arParams["SET_TITLE"], "MESSAGE_404" => $arParams["MESSAGE_404"], "SET_STATUS_404" => $arParams["SET_STATUS_404"], "SHOW_404" => $arParams["SHOW_404"], "FILE_404" => $arParams["FILE_404"], "DISPLAY_COMPARE" => $arParams["USE_COMPARE"], "PAGE_ELEMENT_COUNT" => $arParams["PAGE_ELEMENT_COUNT"], "LINE_ELEMENT_COUNT" => $arParams["LINE_ELEMENT_COUNT"], "PRICE_CODE" => $arParams["PRICE_CODE"], "USE_PRICE_COUNT" => $arParams["USE_PRICE_COUNT"], "SHOW_PRICE_COUNT" => $arParams["SHOW_PRICE_COUNT"], "PRICE_VAT_INCLUDE" => $arParams["PRICE_VAT_INCLUDE"], "USE_PRODUCT_QUANTITY" => $arParams['USE_PRODUCT_QUANTITY'], "ADD_PROPERTIES_TO_BASKET" => isset($arParams["ADD_PROPERTIES_TO_BASKET"]) ? $arParams["ADD_PROPERTIES_TO_BASKET"] : '', "PARTIAL_PRODUCT_PROPERTIES" => isset($arParams["PARTIAL_PRODUCT_PROPERTIES"]) ? $arParams["PARTIAL_PRODUCT_PROPERTIES"] : '', "PRODUCT_PROPERTIES" => $arParams["PRODUCT_PROPERTIES"], "DISPLAY_TOP_PAGER" => $arParams["DISPLAY_TOP_PAGER"], "DISPLAY_BOTTOM_PAGER" => $arParams["DISPLAY_BOTTOM_PAGER"], "PAGER_TITLE" => $arParams["PAGER_TITLE"], "PAGER_SHOW_ALWAYS" => $arParams["PAGER_SHOW_ALWAYS"], "PAGER_TEMPLATE" => $arParams["PAGER_TEMPLATE"], "PAGER_DESC_NUMBERING" => $arParams["PAGER_DESC_NUMBERING"], "PAGER_DESC_NUMBERING_CACHE_TIME" => $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"], "PAGER_SHOW_ALL" => $arParams["PAGER_SHOW_ALL"], "PAGER_BASE_LINK_ENABLE" => $arParams["PAGER_BASE_LINK_ENABLE"], "PAGER_BASE_LINK" => $arParams["PAGER_BASE_LINK"], "PAGER_PARAMS_NAME" => $arParams["PAGER_PARAMS_NAME"], "OFFERS_CART_PROPERTIES" => $arParams["OFFERS_CART_PROPERTIES"], "OFFERS_FIELD_CODE" => $arParams["LIST_OFFERS_FIELD_CODE"], "OFFERS_PROPERTY_CODE" => $arParams["LIST_OFFERS_PROPERTY_CODE"], "OFFERS_SORT_FIELD" => $arParams["OFFERS_SORT_FIELD"], "OFFERS_SORT_ORDER" => $arParams["OFFERS_SORT_ORDER"], "OFFERS_SORT_FIELD2" => $arParams["OFFERS_SORT_FIELD2"], "OFFERS_SORT_ORDER2" => $arParams["OFFERS_SORT_ORDER2"], "OFFERS_LIMIT" => $arParams["LIST_OFFERS_LIMIT"], "SECTION_ID" => $arResult["VARIABLES"]["SECTION_ID"], "SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"], "SECTION_URL" => $arResult["FOLDER"] . $arResult["URL_TEMPLATES"]["section"], "DETAIL_URL" => $arResult["FOLDER"] . $arResult["URL_TEMPLATES"]["element"], "USE_MAIN_ELEMENT_SECTION" => $arParams["USE_MAIN_ELEMENT_SECTION"], 'CONVERT_CURRENCY' => $arParams['CONVERT_CURRENCY'], 'CURRENCY_ID' => $arParams['CURRENCY_ID'], 'HIDE_NOT_AVAILABLE' => $arParams["HIDE_NOT_AVAILABLE"], 'LABEL_PROP' => $arParams['LABEL_PROP'], 'ADD_PICT_PROP' => $arParams['ADD_PICT_PROP'], 'PRODUCT_DISPLAY_MODE' => $arParams['PRODUCT_DISPLAY_MODE'], 'OFFER_ADD_PICT_PROP' => $arParams['OFFER_ADD_PICT_PROP'], 'OFFER_TREE_PROPS' => $arParams['OFFER_TREE_PROPS'], 'PRODUCT_SUBSCRIPTION' => $arParams['PRODUCT_SUBSCRIPTION'], 'SHOW_DISCOUNT_PERCENT' => $arParams['SHOW_DISCOUNT_PERCENT'], 'SHOW_OLD_PRICE' => $arParams['SHOW_OLD_PRICE'], 'MESS_BTN_BUY' => $arParams['MESS_BTN_BUY'], 'MESS_BTN_ADD_TO_BASKET' => $arParams['MESS_BTN_ADD_TO_BASKET'], 'MESS_BTN_SUBSCRIBE' => $arParams['MESS_BTN_SUBSCRIBE'], 'MESS_BTN_DETAIL' => $arParams['MESS_BTN_DETAIL'], 'MESS_NOT_AVAILABLE' => $arParams['MESS_NOT_AVAILABLE'], 'TEMPLATE_THEME' => isset($arParams['TEMPLATE_THEME']) ? $arParams['TEMPLATE_THEME'] : '', "ADD_SECTIONS_CHAIN" => "N", 'ADD_TO_BASKET_ACTION' => $basketAction, 'SHOW_CLOSE_POPUP' => isset($arParams['COMMON_SHOW_CLOSE_POPUP']) ? $arParams['COMMON_SHOW_CLOSE_POPUP'] : '', 'COMPARE_PATH' => $arResult['FOLDER'] . $arResult['URL_TEMPLATES']['compare']), $component); $GLOBALS['CATALOG_CURRENT_SECTION_ID'] = $intSectionID; unset($basketAction); if ($verticalGrid) { ?> </div> <div style="clear: both;"></div> </div><?php } if (ModuleManager::isModuleInstalled("sale")) { $arRecomData = array(); $recomCacheID = array('IBLOCK_ID' => $arParams['IBLOCK_ID']); $obCache = new CPHPCache(); if ($obCache->InitCache(36000, serialize($recomCacheID), "/sale/bestsellers")) { $arRecomData = $obCache->GetVars(); } elseif ($obCache->StartDataCache()) { if (Loader::includeModule("catalog")) { $arSKU = CCatalogSKU::GetInfoByProductIBlock($arParams['IBLOCK_ID']); $arRecomData['OFFER_IBLOCK_ID'] = !empty($arSKU) ? $arSKU['IBLOCK_ID'] : 0; } $obCache->EndDataCache($arRecomData); } if (!empty($arRecomData)) { if (!isset($arParams['USE_SALE_BESTSELLERS']) || $arParams['USE_SALE_BESTSELLERS'] != 'N') { $APPLICATION->IncludeComponent("bitrix:sale.bestsellers", "", array("HIDE_NOT_AVAILABLE" => $arParams["HIDE_NOT_AVAILABLE"], "PAGE_ELEMENT_COUNT" => "5", "SHOW_DISCOUNT_PERCENT" => $arParams['SHOW_DISCOUNT_PERCENT'], "PRODUCT_SUBSCRIPTION" => $arParams['PRODUCT_SUBSCRIPTION'], "SHOW_NAME" => "Y", "SHOW_IMAGE" => "Y", "MESS_BTN_BUY" => $arParams['MESS_BTN_BUY'], "MESS_BTN_DETAIL" => $arParams['MESS_BTN_DETAIL'], "MESS_NOT_AVAILABLE" => $arParams['MESS_NOT_AVAILABLE'], "MESS_BTN_SUBSCRIBE" => $arParams['MESS_BTN_SUBSCRIBE'], "LINE_ELEMENT_COUNT" => 5, "TEMPLATE_THEME" => isset($arParams['TEMPLATE_THEME']) ? $arParams['TEMPLATE_THEME'] : '', "DETAIL_URL" => $arResult["FOLDER"] . $arResult["URL_TEMPLATES"]["element"], "CACHE_TYPE" => $arParams["CACHE_TYPE"], "CACHE_TIME" => $arParams["CACHE_TIME"], "CACHE_GROUPS" => $arParams["CACHE_GROUPS"], "BY" => array(0 => "AMOUNT"), "PERIOD" => array(0 => "15"), "FILTER" => array(0 => "CANCELED", 1 => "ALLOW_DELIVERY", 2 => "PAYED", 3 => "DEDUCTED", 4 => "N", 5 => "P", 6 => "F"), "FILTER_NAME" => $arParams["FILTER_NAME"], "ORDER_FILTER_NAME" => "arOrderFilter", "DISPLAY_COMPARE" => $arParams["USE_COMPARE"], "SHOW_OLD_PRICE" => $arParams['SHOW_OLD_PRICE'], "PRICE_CODE" => $arParams["PRICE_CODE"], "SHOW_PRICE_COUNT" => $arParams["SHOW_PRICE_COUNT"], "PRICE_VAT_INCLUDE" => $arParams["PRICE_VAT_INCLUDE"], "CONVERT_CURRENCY" => $arParams["CONVERT_CURRENCY"], "CURRENCY_ID" => $arParams["CURRENCY_ID"], "BASKET_URL" => $arParams["BASKET_URL"], "ACTION_VARIABLE" => (!empty($arParams["ACTION_VARIABLE"]) ? $arParams["ACTION_VARIABLE"] : "action") . "_slb", "PRODUCT_ID_VARIABLE" => $arParams["PRODUCT_ID_VARIABLE"], "PRODUCT_QUANTITY_VARIABLE" => $arParams["PRODUCT_QUANTITY_VARIABLE"], "ADD_PROPERTIES_TO_BASKET" => isset($arParams["ADD_PROPERTIES_TO_BASKET"]) ? $arParams["ADD_PROPERTIES_TO_BASKET"] : '', "PRODUCT_PROPS_VARIABLE" => $arParams["PRODUCT_PROPS_VARIABLE"], "PARTIAL_PRODUCT_PROPERTIES" => isset($arParams["PARTIAL_PRODUCT_PROPERTIES"]) ? $arParams["PARTIAL_PRODUCT_PROPERTIES"] : '', "USE_PRODUCT_QUANTITY" => $arParams['USE_PRODUCT_QUANTITY'], "SHOW_PRODUCTS_" . $arParams["IBLOCK_ID"] => "Y", "OFFER_TREE_PROPS_" . $arRecomData['OFFER_IBLOCK_ID'] => $arParams["OFFER_TREE_PROPS"], "ADDITIONAL_PICT_PROP_" . $arParams['IBLOCK_ID'] => $arParams['ADD_PICT_PROP'], "ADDITIONAL_PICT_PROP_" . $arRecomData['OFFER_IBLOCK_ID'] => $arParams['OFFER_ADD_PICT_PROP']), $component, array("HIDE_ICONS" => "Y")); } if (!isset($arParams['USE_BIG_DATA']) || $arParams['USE_BIG_DATA'] != 'N') { $APPLICATION->IncludeComponent("bitrix:catalog.bigdata.products", "", array("LINE_ELEMENT_COUNT" => 5, "TEMPLATE_THEME" => isset($arParams['TEMPLATE_THEME']) ? $arParams['TEMPLATE_THEME'] : '', "DETAIL_URL" => $arResult["FOLDER"] . $arResult["URL_TEMPLATES"]["element"], "BASKET_URL" => $arParams["BASKET_URL"], "ACTION_VARIABLE" => (!empty($arParams["ACTION_VARIABLE"]) ? $arParams["ACTION_VARIABLE"] : "action") . "_cbdp", "PRODUCT_ID_VARIABLE" => $arParams["PRODUCT_ID_VARIABLE"], "PRODUCT_QUANTITY_VARIABLE" => $arParams["PRODUCT_QUANTITY_VARIABLE"], "ADD_PROPERTIES_TO_BASKET" => isset($arParams["ADD_PROPERTIES_TO_BASKET"]) ? $arParams["ADD_PROPERTIES_TO_BASKET"] : '', "PRODUCT_PROPS_VARIABLE" => $arParams["PRODUCT_PROPS_VARIABLE"], "PARTIAL_PRODUCT_PROPERTIES" => isset($arParams["PARTIAL_PRODUCT_PROPERTIES"]) ? $arParams["PARTIAL_PRODUCT_PROPERTIES"] : '', "SHOW_OLD_PRICE" => $arParams['SHOW_OLD_PRICE'], "SHOW_DISCOUNT_PERCENT" => $arParams['SHOW_DISCOUNT_PERCENT'], "PRICE_CODE" => $arParams["PRICE_CODE"], "SHOW_PRICE_COUNT" => $arParams["SHOW_PRICE_COUNT"], "PRODUCT_SUBSCRIPTION" => $arParams['PRODUCT_SUBSCRIPTION'], "PRICE_VAT_INCLUDE" => $arParams["PRICE_VAT_INCLUDE"], "USE_PRODUCT_QUANTITY" => $arParams['USE_PRODUCT_QUANTITY'], "SHOW_NAME" => "Y", "SHOW_IMAGE" => "Y", "MESS_BTN_BUY" => $arParams['MESS_BTN_BUY'], "MESS_BTN_DETAIL" => $arParams['MESS_BTN_DETAIL'], "MESS_BTN_SUBSCRIBE" => $arParams['MESS_BTN_SUBSCRIBE'], "MESS_NOT_AVAILABLE" => $arParams['MESS_NOT_AVAILABLE'], "PAGE_ELEMENT_COUNT" => 5, "SHOW_FROM_SECTION" => "Y", "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"], "IBLOCK_ID" => $arParams["IBLOCK_ID"], "DEPTH" => "2", "CACHE_TYPE" => $arParams["CACHE_TYPE"], "CACHE_TIME" => $arParams["CACHE_TIME"], "CACHE_GROUPS" => $arParams["CACHE_GROUPS"], "SHOW_PRODUCTS_" . $arParams["IBLOCK_ID"] => "Y", "HIDE_NOT_AVAILABLE" => $arParams["HIDE_NOT_AVAILABLE"], "CONVERT_CURRENCY" => $arParams["CONVERT_CURRENCY"], "CURRENCY_ID" => $arParams["CURRENCY_ID"], "SECTION_ID" => $intSectionID, "SECTION_CODE" => "", "SECTION_ELEMENT_ID" => "", "SECTION_ELEMENT_CODE" => "", "LABEL_PROP_" . $arParams["IBLOCK_ID"] => $arParams['LABEL_PROP'], "PROPERTY_CODE_" . $arParams["IBLOCK_ID"] => $arParams["LIST_PROPERTY_CODE"], "PROPERTY_CODE_" . $arRecomData['OFFER_IBLOCK_ID'] => $arParams["LIST_OFFERS_PROPERTY_CODE"], "CART_PROPERTIES_" . $arParams["IBLOCK_ID"] => $arParams["PRODUCT_PROPERTIES"], "CART_PROPERTIES_" . $arRecomData['OFFER_IBLOCK_ID'] => $arParams["OFFERS_CART_PROPERTIES"], "ADDITIONAL_PICT_PROP_" . $arParams["IBLOCK_ID"] => $arParams['ADD_PICT_PROP'], "ADDITIONAL_PICT_PROP_" . $arRecomData['OFFER_IBLOCK_ID'] => $arParams['OFFER_ADD_PICT_PROP'], "OFFER_TREE_PROPS_" . $arRecomData['OFFER_IBLOCK_ID'] => $arParams["OFFER_TREE_PROPS"], "RCM_TYPE" => isset($arParams['BIG_DATA_RCM_TYPE']) ? $arParams['BIG_DATA_RCM_TYPE'] : ''), $component, array("HIDE_ICONS" => "Y")); } } }
public static function getTreeProperties($skuInfo, $propertiesCodes, $defaultFields = array()) { $requireFields = array( 'ID', 'UF_XML_ID', 'UF_NAME', ); $result = array(); if (empty($skuInfo)) return $result; if (!is_array($skuInfo)) { $skuInfo = intval($skuInfo); if ($skuInfo <= 0) return $result; if (self::$catalogIncluded === null) self::$catalogIncluded = \Freetrix\Main\Loader::includeModule('catalog'); if (!self::$catalogIncluded) return $result; $skuInfo = CCatalogSKU::GetInfoByProductIBlock($skuInfo); if (empty($skuInfo) || !is_array($skuInfo)) return $result; } if (empty($propertiesCodes) || !is_array($propertiesCodes)) return $result; $showMode = ''; $props = CIBlockProperty::GetList( array('SORT' => 'ASC', 'ID' => 'ASC'), array('IBLOCK_ID' => $skuInfo['IBLOCK_ID'], 'ACTIVE' => 'Y', 'MULTIPLE' => 'N') ); while ($propInfo = $props->Fetch()) { $propInfo['ID'] = intval($propInfo['ID']); if ($propInfo['ID'] == $skuInfo['SKU_PROPERTY_ID']) continue; if ('' == $propInfo['CODE']) $propInfo['CODE'] = $propInfo['ID']; if (!in_array($propInfo['CODE'], $propertiesCodes)) continue; $propInfo['USER_TYPE'] = (string)$propInfo['USER_TYPE']; if ('L' != $propInfo['PROPERTY_TYPE'] && 'E' != $propInfo['PROPERTY_TYPE'] && !('S' == $propInfo['PROPERTY_TYPE'] && 'directory' == $propInfo['USER_TYPE'])) continue; if ('S' == $propInfo['PROPERTY_TYPE'] && 'directory' == $propInfo['USER_TYPE']) { if (!isset($propInfo['USER_TYPE_SETTINGS']['TABLE_NAME']) || empty($propInfo['USER_TYPE_SETTINGS']['TABLE_NAME'])) continue; if (null === self::$highLoadInclude) self::$highLoadInclude = \Freetrix\Main\Loader::includeModule('highloadblock'); if (!self::$highLoadInclude) continue; $highBlock = \Freetrix\Highloadblock\HighloadBlockTable::getList(array("filter" => array('TABLE_NAME' => $propInfo['USER_TYPE_SETTINGS']['TABLE_NAME'])))->fetch(); if (!isset($highBlock['ID'])) continue; $entity = \Freetrix\Highloadblock\HighloadBlockTable::compileEntity($highBlock); $entityDataClass = $entity->getDataClass(); $fieldsList = $entityDataClass::getMap(); if (empty($fieldsList)) continue; $flag = true; foreach ($requireFields as &$fieldCode) { if (!isset($fieldsList[$fieldCode]) || empty($fieldsList[$fieldCode])) { $flag = false; break; } } unset($fieldCode); if (!$flag) continue; $propInfo['USER_TYPE_SETTINGS']['FIELDS_MAP'] = $fieldsList; $propInfo['USER_TYPE_SETTINGS']['ENTITY'] = $entity; } switch ($propInfo['PROPERTY_TYPE']) { case 'E': $showMode = 'PICT'; break; case 'L': $showMode = 'TEXT'; break; case 'S': $showMode = (isset($fieldsList['UF_FILE']) ? 'PICT' : 'TEXT'); break; } $treeProp = array( 'ID' => intval($propInfo['ID']), 'CODE' => $propInfo['CODE'], 'NAME' => $propInfo['NAME'], 'SORT' => intval($propInfo['SORT']), 'PROPERTY_TYPE' => $propInfo['PROPERTY_TYPE'], 'USER_TYPE' => $propInfo['USER_TYPE'], 'LINK_IBLOCK_ID' => $propInfo['LINK_IBLOCK_ID'], 'USER_TYPE_SETTINGS' => $propInfo['USER_TYPE_SETTINGS'], 'VALUES' => array(), 'SHOW_MODE' => $showMode, 'DEFAULT_VALUES' => array( 'PICT' => false, 'NAME' => '-' ) ); if ('PICT' == $showMode) { if (isset($defaultFields['PICT'])) { $treeProp['DEFAULT_VALUES']['PICT'] = $defaultFields['PICT']; } } if (isset($defaultFields['NAME'])) { $treeProp['DEFAULT_VALUES']['NAME'] = $defaultFields['NAME']; } $result[$treeProp['CODE']] = $treeProp; } return $result; }
$arResult["IS_SKU"] = true; $lang = \Bitrix\Main\Application::getInstance()->getContext()->getLanguage(); if ($arParams["ELEMENT_ID"] <= 0) { ShowError(GetMessage("PRODUCT_NOT_EXIST")); return; } if ($this->StartResultCache()) { $arResult['STORES'] = array(); $isProductExistSKU = CCatalogSKU::IsExistOffers($arParams['ELEMENT_ID'], $iblockId); if ($isProductExistSKU) { $res = CIBlockElement::GetList(array(), array('ID' => $arParams['ELEMENT_ID']), false, false, array('ID', 'IBLOCK_ID')); if ($productInfo = $res->Fetch()) { $productId = $productInfo['ID']; $iblockId = $productInfo['IBLOCK_ID']; } $skuInfo = CCatalogSKU::GetInfoByProductIBlock($iblockId); $skuIterator = CIBlockElement::GetList(array('ID' => 'DESC'), array('IBLOCK_ID' => $skuInfo['IBLOCK_ID'], 'PROPERTY_' . $skuInfo['SKU_PROPERTY_ID'] => $productId), false, false, array('ID')); $productSku = array(); while ($sku = $skuIterator->Fetch()) { $amount = array(); $sum = 0; $filter = array('PRODUCT_ID' => $sku['ID']); if (!empty($arParams['STORES'])) { $filter['STORE_ID'] = $arParams['STORES']; } $storeIterator = CCatalogStoreProduct::GetList(array(), $filter, false, false, array('ID', 'STORE_ID', 'AMOUNT')); while ($store = $storeIterator->Fetch()) { if ($arParams["SHOW_GENERAL_STORE_INFORMATION"] == "Y") { $sum += $store['AMOUNT']; } else { $amount[$store['STORE_ID']] = 0;
$arElementSort = array(); //check catalog if (count($arViewedId) > 0 && CModule::IncludeModule("iblock") && CModule::IncludeModule("catalog")) { $res = CIBlockElement::GetList(array(), array("ID" => $arViewedId), false, false, array('ID', 'IBLOCK_ID', 'IBLOCK_SECTION_ID')); while ($arElements = $res->Fetch()) { $arElements["DATE_VISIT"] = $arViewed[$arElements["ID"]]["DATE_VISIT"]; $arElementSort[] = $arElements; } usort($arElementSort, "arraySort"); foreach ($arElementSort as $arElements) { static $arCacheOffersIblock = array(); $priceMin = 0; $arItems = $arViewed[$arElements["ID"]]; $arItems["IBLOCK_ID"] = $arElements["IBLOCK_ID"]; if (!is_set($arCacheOffersIblock[$arElements["IBLOCK_ID"]])) { $mxResult = CCatalogSKU::GetInfoByProductIBlock($arElements["IBLOCK_ID"]); if (is_array($mxResult)) { $arOffersIblock["OFFERS_IBLOCK_ID"] = $mxResult["IBLOCK_ID"]; $arCacheOffersIblock[$arElements["IBLOCK_ID"]] = $arOffersIblock; } } else { $arOffersIblock = $arCacheOffersIblock[$arElements["IBLOCK_ID"]]; } if (IntVal($arOffersIblock["OFFERS_IBLOCK_ID"]) > 0) { static $arCacheOfferProperties = array(); if (!is_set($arCacheOfferProperties[$arOffersIblock["OFFERS_IBLOCK_ID"]])) { $dbOfferProperties = CIBlock::GetProperties($arOffersIblock["OFFERS_IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK")); while ($arOfferProperties = $dbOfferProperties->Fetch()) { $arCacheOfferProperties[$arOffersIblock["OFFERS_IBLOCK_ID"]][] = $arOfferProperties["CODE"]; } }
public function getSkuPropsData($arBasketItems, $arParents, $arSkuProps = array()) { $arRes = array(); $arSkuIblockID = array(); if (is_array($arParents)) { foreach ($arBasketItems as &$arItem) { if (array_key_exists($arItem["PRODUCT_ID"], $arParents)) { $arSKU = CCatalogSKU::GetInfoByProductIBlock($arParents[$arItem["PRODUCT_ID"]]["IBLOCK_ID"]); if (!array_key_exists($arSKU["IBLOCK_ID"], $arSkuIblockID)) { $arSkuIblockID[$arSKU["IBLOCK_ID"]] = $arSKU; } $arItem["IBLOCK_ID"] = $arSKU["IBLOCK_ID"]; $arItem["SKU_PROPERTY_ID"] = $arSKU["SKU_PROPERTY_ID"]; } } unset($arItem); foreach ($arSkuIblockID as $skuIblockID => $arSKU) { // possible props values $rsProps = CIBlockProperty::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('IBLOCK_ID' => $skuIblockID, 'ACTIVE' => 'Y')); while ($arProp = $rsProps->Fetch()) { if ($arProp['PROPERTY_TYPE'] == 'L' || $arProp['PROPERTY_TYPE'] == 'E' || $arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { if ($arProp['XML_ID'] == 'CML2_LINK') { continue; } if (!in_array($arProp['CODE'], $arSkuProps)) { continue; } $arValues = array(); if ($arProp['PROPERTY_TYPE'] == 'L') { $arValues = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arEnum = $rsPropEnums->Fetch()) { $arValues['n' . $arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['VALUE'], 'PICT' => false); } } elseif ($arProp['PROPERTY_TYPE'] == 'E') { $rsPropEnums = CIBlockElement::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arProp['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y'), false, false, array('ID', 'NAME', 'PREVIEW_PICTURE')); while ($arEnum = $rsPropEnums->Fetch()) { $arEnum['PREVIEW_PICTURE'] = CFile::GetFileArray($arEnum['PREVIEW_PICTURE']); if (!is_array($arEnum['PREVIEW_PICTURE'])) { $arEnum['PREVIEW_PICTURE'] = false; } if ($arEnum['PREVIEW_PICTURE'] !== false) { $productImg = CFile::ResizeImageGet($arEnum['PREVIEW_PICTURE'], array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); $arEnum['PREVIEW_PICTURE']['SRC'] = $productImg['src']; } $arValues['n' . $arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['NAME'], 'SORT' => $arEnum['SORT'], 'PICT' => $arEnum['PREVIEW_PICTURE']); } } elseif ($arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { if (self::$highLoadInclude === null) { self::$highLoadInclude = Loader::includeModule('highloadblock'); } if (self::$highLoadInclude) { $hlblock = HL\HighloadBlockTable::getList(array("filter" => array("=TABLE_NAME" => $arProp["USER_TYPE_SETTINGS"]["TABLE_NAME"])))->fetch(); if ($hlblock) { $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $rsData = $entity_data_class::getList(); while ($arData = $rsData->fetch()) { $arValues['n' . $arData['ID']] = array('ID' => $arData['ID'], 'NAME' => $arData['UF_NAME'], 'SORT' => $arData['UF_SORT'], 'FILE' => $arData['UF_FILE'], 'PICT' => false, 'XML_ID' => $arData['UF_XML_ID']); } } } } if (!empty($arValues) && is_array($arValues)) { $arRes[$skuIblockID][$arProp['ID']] = array('ID' => $arProp['ID'], 'CODE' => $arProp['CODE'], 'NAME' => $arProp['NAME'], 'TYPE' => $arProp['PROPERTY_TYPE'], 'USER_TYPE' => $arProp['USER_TYPE'], 'VALUES' => $arValues); } } } } foreach ($arBasketItems as &$arItem) { if (isset($arItem["IBLOCK_ID"]) && (int) $arItem["IBLOCK_ID"] > 0 && isset($arRes[$arItem["IBLOCK_ID"]])) { $arItem["SKU_DATA"] = $arRes[$arItem["IBLOCK_ID"]]; $arUsedValues = array(); $arTmpRes = array(); $arOfFilter = array("IBLOCK_ID" => $arItem["IBLOCK_ID"], "PROPERTY_" . $arSkuIblockID[$arItem["IBLOCK_ID"]]["SKU_PROPERTY_ID"] => $arParents[$arItem["PRODUCT_ID"]]["PRODUCT_ID"]); $rsOffers = CIBlockElement::GetList(array(), $arOfFilter, false, false, array("ID", "IBLOCK_ID")); while ($obOffer = $rsOffers->GetNextElement()) { $arProps = $obOffer->GetProperties(); foreach ($arProps as $propName => $propValue) { if (in_array($propName, $arSkuProps)) { if (array_key_exists('VALUE', $propValue)) { if (strlen($propValue['VALUE']) > 0 && (!is_array($arUsedValues[$arItem["PRODUCT_ID"]][$propName]) || !in_array($propValue['VALUE'], $arUsedValues[$arItem["PRODUCT_ID"]][$propName]))) { $arUsedValues[$arItem["PRODUCT_ID"]][$propName][] = $propValue['VALUE']; } } } } } if (!empty($arUsedValues)) { // add only used values to the item SKU_DATA foreach ($arRes[$arItem["IBLOCK_ID"]] as $propId => $arProp) { if (!array_key_exists($arProp["CODE"], $arUsedValues[$arItem["PRODUCT_ID"]])) { continue; } $arTmpRes['n' . $propId] = array(); foreach ($arProp["VALUES"] as $valId => $arValue) { // properties of various type have different values in the used values data if ($arProp["TYPE"] == "L" && in_array($arValue["NAME"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "E" && in_array($arValue["ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "S" && in_array($arValue["XML_ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]])) { if ($arProp["TYPE"] == "S") { if (!empty($arValue["FILE"])) { $arTmpFile = CFile::GetFileArray($arValue["FILE"]); if (!empty($arTmpFile)) { $tmpImg = CFile::ResizeImageGet($arTmpFile, array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); $arValue['PICT']['SRC'] = $tmpImg['src']; } } } $arTmpRes['n' . $propId]["CODE"] = $arProp["CODE"]; $arTmpRes['n' . $propId]["NAME"] = $arProp["NAME"]; $arTmpRes['n' . $propId]["VALUES"][$valId] = $arValue; } } } } $arItem["SKU_DATA"] = $arTmpRes; } } unset($arItem); } return $arBasketItems; }
function makeFilter($FILTER_NAME) { $bOffersIBlockExist = false; if (self::$catalogIncluded === null) { self::$catalogIncluded = Loader::includeModule('catalog'); } if (self::$catalogIncluded) { $arCatalog = CCatalogSKU::GetInfoByProductIBlock($this->IBLOCK_ID); if (!empty($arCatalog)) { $bOffersIBlockExist = true; } } $gFilter = $GLOBALS[$FILTER_NAME]; $arFilter = array("IBLOCK_ID" => $this->IBLOCK_ID, "IBLOCK_LID" => SITE_ID, "IBLOCK_ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R", "INCLUDE_SUBSECTIONS" => $this->arParams["INCLUDE_SUBSECTIONS"] != 'N' ? 'Y' : 'N'); if ($this->SECTION_ID > 0 || $this->arParams["SHOW_ALL_WO_SECTION"] !== "Y") { $arFilter["SECTION_ID"] = $this->SECTION_ID; } if ($this->arParams['HIDE_NOT_AVAILABLE'] == 'Y') { $arFilter['CATALOG_AVAILABLE'] = 'Y'; } if (self::$catalogIncluded && $bOffersIBlockExist) { $arPriceFilter = array(); foreach ($gFilter as $key => $value) { if (preg_match('/^(>=|<=|><)CATALOG_PRICE_/', $key)) { $arPriceFilter[$key] = $value; unset($gFilter[$key]); } } if (!empty($gFilter["OFFERS"])) { if (empty($arPriceFilter)) { $arSubFilter = $gFilter["OFFERS"]; } else { $arSubFilter = array_merge($gFilter["OFFERS"], $arPriceFilter); } $arSubFilter["IBLOCK_ID"] = $this->SKU_IBLOCK_ID; $arSubFilter["ACTIVE_DATE"] = "Y"; $arSubFilter["ACTIVE"] = "Y"; if ('Y' == $this->arParams['HIDE_NOT_AVAILABLE']) { $arSubFilter['CATALOG_AVAILABLE'] = 'Y'; } $arFilter["=ID"] = CIBlockElement::SubQuery("PROPERTY_" . $this->SKU_PROPERTY_ID, $arSubFilter); } elseif (!empty($arPriceFilter)) { $arSubFilter = $arPriceFilter; $arSubFilter["IBLOCK_ID"] = $this->SKU_IBLOCK_ID; $arSubFilter["ACTIVE_DATE"] = "Y"; $arSubFilter["ACTIVE"] = "Y"; $arFilter[] = array("LOGIC" => "OR", array($arPriceFilter), "=ID" => CIBlockElement::SubQuery("PROPERTY_" . $this->SKU_PROPERTY_ID, $arSubFilter)); } unset($gFilter["OFFERS"]); } return array_merge($gFilter, $arFilter); }