function Init(&$next_step, $files_dir = false, $use_crc = true, $preview = false, $detail = false, $use_offers = false, $use_iblock_type_id = false, $table_name = "b_xml_tree") { $this->next_step =& $next_step; $this->files_dir = $files_dir; $this->use_offers = $use_offers; $this->use_iblock_type_id = $use_iblock_type_id; $this->use_crc = $use_crc; $this->_xml_file = new CIBlockXMLFile($table_name); if (!is_array($preview) && $preview) { $this->iblock_resize = true; } if (is_array($preview) && count($preview) == 2) { $this->preview = $preview; } else { $this->preview = false; } if (is_array($detail) && count($detail) == 2) { $this->detail = $detail; } else { $this->detail = false; } $this->bCatalog = CModule::IncludeModule('catalog'); if ($this->bCatalog) { $catalogsIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('=IBLOCK_ID' => $this->next_step["IBLOCK_ID"]))); if ($catalogData = $catalogsIterator->fetch()) { $this->isCatalogIblock = true; } unset($catalogData, $catalogsIterator); } $this->arProperties = array(); $this->PROPERTY_MAP = array(); if ($this->next_step["IBLOCK_ID"] > 0) { $obProperty = new CIBlockProperty(); $rsProperties = $obProperty->GetList(array(), array("IBLOCK_ID" => $this->next_step["IBLOCK_ID"], "ACTIVE" => "Y")); while ($arProperty = $rsProperties->Fetch()) { $this->PROPERTY_MAP[$arProperty["XML_ID"]] = $arProperty["ID"]; $this->arProperties[$arProperty["ID"]] = $arProperty; } } if ($this->next_step["lang"]) { $this->mess = IncludeModuleLangFile(__FILE__, $this->next_step["lang"], true); } $this->arTempFiles = array(); $this->arLinkedProps = false; }
/** * Returns product separate by iblocks. * * @param array $productList Product id list. * @return array */ protected static function getProductIblocks($productList) { $result = array('iblockElement' => array(), 'iblockList' => array(), 'skuIblockList' => array()); if (empty($productList)) { return $result; } $elementIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('@ID' => $productList))); while ($element = $elementIterator->fetch()) { $element['ID'] = (int) $element['ID']; $element['IBLOCK_ID'] = (int) $element['IBLOCK_ID']; if (!isset($result['iblockElement'][$element['IBLOCK_ID']])) { $result['iblockElement'][$element['IBLOCK_ID']] = array(); } $result['iblockElement'][$element['IBLOCK_ID']][] = $element['ID']; } unset($element, $elementIterator); if (!empty($result['iblockElement'])) { $result['iblockList'] = array_keys($result['iblockElement']); $skuIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID'), 'filter' => array('@IBLOCK_ID' => $result['iblockList'], '!=PRODUCT_IBLOCK_ID' => 0))); while ($sku = $skuIterator->fetch()) { $sku['IBLOCK_ID'] = (int) $sku['IBLOCK_ID']; $sku['PRODUCT_IBLOCK_ID'] = (int) $sku['PRODUCT_IBLOCK_ID']; $sku['SKU_PROPERTY_ID'] = (int) $sku['SKU_PROPERTY_ID']; $result['skuIblockList'][$sku['IBLOCK_ID']] = $sku; } unset($sku, $skuIterator); } return $result; }
protected function getServiceRequestParamsByType($type) { $a = array('uid' => $_COOKIE['BX_USER_ID'], 'aid' => \Bitrix\Main\Analytics\Counter::getAccountId(), 'count' => $this->arParams['PAGE_ELEMENT_COUNT'] + 10); // random choices if ($type == 'any_similar') { $possible = array('similar_sell', 'similar_view', 'similar'); $type = $possible[array_rand($possible)]; } elseif ($type == 'any_personal') { $possible = array('bestsell', 'personal'); $type = $possible[array_rand($possible)]; } elseif ($type == 'any') { $possible = array('similar_sell', 'similar_view', 'similar', 'bestsell', 'personal'); $type = $possible[array_rand($possible)]; } // configure if ($type == 'bestsell') { $a['op'] = 'sim_domain_items'; $a['type'] = 'order'; $a['domain'] = Bitrix\Main\Context::getCurrent()->getServer()->getHttpHost(); } elseif ($type == 'personal') { $a['op'] = 'recommend'; } elseif ($type == 'similar_sell') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; $a['type'] = 'order'; } elseif ($type == 'similar_view') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; $a['type'] = 'view'; } elseif ($type == 'similar') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; } else { // unkonwn type } // get iblocks $iblocks = array(); if (!empty($this->arParams['IBLOCK_ID'])) { $iblocks = array($this->arParams['IBLOCK_ID']); } else { $iblockList = array(); /* catalog */ $iblockIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID'))); while ($iblock = $iblockIterator->fetch()) { $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID']; $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID']; $iblockList[$iblock['IBLOCK_ID']] = $iblock['IBLOCK_ID']; if ($iblock['PRODUCT_IBLOCK_ID'] > 0) { $iblockList[$iblock['PRODUCT_IBLOCK_ID']] = $iblock['PRODUCT_IBLOCK_ID']; } } /* iblock */ $iblockIterator = \Bitrix\Iblock\IblockSiteTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $iblockList, '=SITE_ID' => $this->getSiteId()))); while ($iblock = $iblockIterator->fetch()) { $iblocks[] = $iblock['IBLOCK_ID']; } } $a['ib'] = join('.', $iblocks); return $a; }
function getAdditionalColumns() { static $propList = null; if ($propList === null && Loader::includeModule('catalog')) { $arIblockIDs = array(); $arIblockNames = array(); $catalogIterator = Catalog\CatalogIblockTable::getList(array( 'select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME'), 'order' => array('IBLOCK_ID' => 'ASC') )); while ($catalog = $catalogIterator->fetch()) { $catalog['IBLOCK_ID'] = (int)$catalog['IBLOCK_ID']; $arIblockIDs[] = $catalog['IBLOCK_ID']; $arIblockNames[$catalog['IBLOCK_ID']] = $catalog['NAME']; } unset($catalog, $catalogIterator); if (!empty($arIblockIDs)) { $arProps = array(); $propertyIterator = Iblock\PropertyTable::getList(array( 'select' => array('ID', 'CODE', 'NAME', 'IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $arIblockIDs, '=ACTIVE' => 'Y'), 'order' => array('IBLOCK_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC') )); while ($property = $propertyIterator->fetch()) { $property['ID'] = (int)$property['ID']; $property['IBLOCK_ID'] = (int)$property['IBLOCK_ID']; $property['CODE'] = (string)$property['CODE']; if ($property['CODE'] == '') $property['CODE'] = $property['ID']; if (!isset($arProps[$property['CODE']])) { $arProps[$property['CODE']] = array( 'CODE' => $property['CODE'], 'TITLE' => $property['NAME'].' ['.$property['CODE'].']', 'ID' => array($property['ID']), 'IBLOCK_ID' => array($property['IBLOCK_ID'] => $property['IBLOCK_ID']), 'IBLOCK_TITLE' => array($property['IBLOCK_ID'] => $arIblockNames[$property['IBLOCK_ID']]), 'COUNT' => 1 ); } else { $arProps[$property['CODE']]['ID'][] = $property['ID']; $arProps[$property['CODE']]['IBLOCK_ID'][$property['IBLOCK_ID']] = $property['IBLOCK_ID']; if ($arProps[$property['CODE']]['COUNT'] < 5) $arProps[$property['CODE']]['IBLOCK_TITLE'][$property['IBLOCK_ID']] = $arIblockNames[$property['IBLOCK_ID']]; $arProps[$property['CODE']]['COUNT']++; } } unset($property, $propertyIterator, $arIblockNames, $arIblockIDs); $propList = array(); foreach ($arProps as &$property) { $iblockList = ''; if ($property['COUNT'] > 1) { $iblockList = ($property['COUNT'] > 5 ? ' ( ... )' : ' ('.implode(', ', $property['IBLOCK_TITLE']).')'); } $propList['PROPERTY_'.$property['CODE']] = $property['TITLE'].$iblockList; } unset($property, $arProps); } } return (empty($propList) ? array() : $propList); }
/** * @param array $arParams * @return array|false */ public static function GetProductData($arParams) { $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true; if (!isset($arParams['QUANTITY']) || (double) $arParams['QUANTITY'] <= 0) { $arParams['QUANTITY'] = 0; } $arParams['RENEWAL'] = isset($arParams['RENEWAL']) && $arParams['RENEWAL'] == 'Y' ? 'Y' : 'N'; $arParams['CHECK_QUANTITY'] = isset($arParams['CHECK_QUANTITY']) && $arParams["CHECK_QUANTITY"] == 'N' ? 'N' : 'Y'; $arParams['CHECK_PRICE'] = isset($arParams['CHECK_PRICE']) && $arParams['CHECK_PRICE'] == 'N' ? 'N' : 'Y'; $arParams['CHECK_COUPONS'] = isset($arParams['CHECK_COUPONS']) && $arParams['CHECK_COUPONS'] == 'N' ? 'N' : 'Y'; $arParams['CHECK_DISCOUNT'] = isset($arParams['CHECK_DISCOUNT']) && $arParams['CHECK_DISCOUNT'] == 'N' ? 'N' : 'Y'; $arParams['SELECT_QUANTITY_TRACE'] = isset($arParams['SELECT_QUANTITY_TRACE']) && $arParams['SELECT_QUANTITY_TRACE'] == 'Y' ? 'Y' : 'N'; $arParams['BASKET_ID'] = (string) (isset($arParams['BASKET_ID']) ? $arParams['BASKET_ID'] : '0'); $arParams['USER_ID'] = isset($arParams['USER_ID']) ? (int) $arParams['USER_ID'] : 0; if ($arParams['USER_ID'] < 0) { $arParams['USER_ID'] = 0; } $arParams['SITE_ID'] = isset($arParams['SITE_ID']) ? $arParams['SITE_ID'] : false; $strSiteID = $arParams['SITE_ID']; $arParams['CURRENCY'] = isset($arParams['CURRENCY']) ? Currency\CurrencyManager::checkCurrencyID($arParams['CURRENCY']) : false; if ($arParams['CURRENCY'] === false) { $arParams['CURRENCY'] = CSaleLang::GetLangCurrency($strSiteID ? $strSiteID : SITE_ID); } $productID = (int) $arParams['PRODUCT_ID']; $quantity = (double) $arParams['QUANTITY']; $intUserID = (int) $arParams['USER_ID']; global $USER, $APPLICATION; $arResult = array(); if ($adminSection) { if (!($userGroups = static::getHitCache('USER_GROUPS', $intUserID))) { $userGroups = self::getUserGroups($intUserID); static::setHitCache('USER_GROUPS', $intUserID, $userGroups); } if (empty($userGroups)) { return $arResult; } if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT_PERM_N', $productID))) { $dbIBlockElement = CIBlockElement::GetList(array(), array('ID' => $productID, 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')); if ($arProduct = $dbIBlockElement->GetNext()) { static::setHitCache('IBLOCK_ELEMENT_PERM_N', $productID, $arProduct); } unset($dbIBlockElement); } if (empty($arProduct) || !is_array($arProduct)) { return $arResult; } if (!($iblockRights = static::getHitCache('IBLOCK_RIGHT', $arProduct['IBLOCK_ID']))) { if ($iblockRights = CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'RIGHTS_MODE')) { static::setHitCache('IBLOCK_RIGHT', $arProduct['IBLOCK_ID'], $iblockRights); } } $extRights = $iblockRights == 'E'; if ($intUserID == 0) { if ($extRights) { $elementRights = new CIBlockElementRights($arProduct['IBLOCK_ID'], $arProduct['ID']); $readList = $elementRights->GetRights(array('operations' => array('element_read'))); $disable = true; if (!empty($readList) && is_array($readList)) { foreach ($readList as &$row) { if ($row['GROUP_CODE'] == 'G2') { $disable = false; break; } } unset($row); } unset($readList, $elementRights); if ($disable) { return $arResult; } unset($disable); } else { $groupRights = CIBlock::GetGroupPermissions($arProduct['IBLOCK_ID']); if (empty($groupRights) || !isset($groupRights[2]) || $groupRights[2] < 'R') { return $arResult; } unset($groupRights); } } else { if ($extRights) { $proxyUserPermissionKey = $productID . "|" . $intUserID; if (!($arUserRights = static::getHitCache('USER_RIGHT', $proxyUserPermissionKey))) { if ($arUserRights = CIBlockElementRights::GetUserOperations($productID, $intUserID)) { static::setHitCache('USER_RIGHT', $proxyUserPermissionKey, $arUserRights); } } if (empty($arUserRights) || !isset($arUserRights['element_read'])) { return $arResult; } unset($arUserRights); } else { static $permissions = array(); if (empty($permissions[$arProduct['IBLOCK_ID'] . "_" . $intUserID])) { $permissions[$arProduct['IBLOCK_ID'] . "_" . $intUserID] = CIBlock::GetPermission($arProduct['IBLOCK_ID'], $intUserID); } if ($permissions < 'R') { return $arResult; } } } unset($extRights); } else { $userGroups = $USER->GetUserGroupArray(); if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT_PERM_Y', $productID))) { $dbIBlockElement = CIBlockElement::GetList(array(), array('ID' => $productID, 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'R'), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')); if ($arProduct = $dbIBlockElement->GetNext()) { static::setHitCache('IBLOCK_ELEMENT_PERM_Y', $productID, $arProduct); } unset($dbIBlockElement); } if (empty($arProduct) || !is_array($arProduct)) { return $arResult; } } if (!isset(self::$catalogList[$arProduct['IBLOCK_ID']])) { self::$catalogList[$arProduct['IBLOCK_ID']] = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'SUBSCRIPTION'), 'filter' => array('=IBLOCK_ID' => $arProduct['IBLOCK_ID'])))->fetch(); } if (empty(self::$catalogList[$arProduct['IBLOCK_ID']]) || !is_array(self::$catalogList[$arProduct['IBLOCK_ID']])) { return $arResult; } if (self::$catalogList[$arProduct['IBLOCK_ID']]['SUBSCRIPTION'] == 'Y') { $quantity = 1; } if (!($arCatalogProduct = static::getHitCache('CATALOG_PRODUCT', $productID))) { $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $productID), false, false, array('ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'BARCODE_MULTI', 'TYPE')); if ($arCatalogProduct = $rsProducts->Fetch()) { static::setHitCache('CATALOG_PRODUCT', $productID, $arCatalogProduct); } unset($rsProducts); } if (!empty($arCatalogProduct) && is_array($arCatalogProduct)) { $dblQuantity = doubleval($arCatalogProduct["QUANTITY"]); $boolQuantity = 'Y' != $arCatalogProduct["CAN_BUY_ZERO"] && 'Y' == $arCatalogProduct["QUANTITY_TRACE"]; if ($arParams["CHECK_QUANTITY"] == "Y" && $boolQuantity && 0 >= $dblQuantity) { $APPLICATION->ThrowException(Loc::getMessage("CATALOG_NO_QUANTITY_PRODUCT", array("#NAME#" => htmlspecialcharsbx($arProduct["~NAME"]))), "CATALOG_NO_QUANTITY_PRODUCT"); return $arResult; } } else { $APPLICATION->ThrowException(Loc::getMessage("CATALOG_ERR_NO_PRODUCT"), "CATALOG_NO_QUANTITY_PRODUCT"); return $arResult; } if ($arParams["CHECK_PRICE"] == "Y") { $productHash = array('MODULE' => 'catalog', 'PRODUCT_ID' => $productID, 'BASKET_ID' => $arParams['BASKET_ID']); $arCoupons = array(); if ($arParams['CHECK_COUPONS'] == 'Y') { $arCoupons = DiscountCouponsManager::getForApply(array(), $productHash, true); if (!empty($arCoupons)) { $arCoupons = array_keys($arCoupons); } } if ($adminSection) { if ($intUserID > 0) { CCatalogDiscountSave::SetDiscountUserID($intUserID); } else { CCatalogDiscountSave::Disable(); } } $currentVatMode = CCatalogProduct::getPriceVatIncludeMode(); $currentUseDiscount = CCatalogProduct::getUseDiscount(); CCatalogProduct::setUseDiscount($arParams['CHECK_DISCOUNT'] == 'Y'); CCatalogProduct::setPriceVatIncludeMode(true); CCatalogProduct::setUsedCurrency($arParams['CURRENCY']); $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $arParams['RENEWAL'], array(), $adminSection ? $strSiteID : false, $arCoupons); if (empty($arPrice)) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $userGroups)) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $arParams['RENEWAL'], array(), $adminSection ? $strSiteID : false, $arCoupons); } } CCatalogProduct::clearUsedCurrency(); CCatalogProduct::setPriceVatIncludeMode($currentVatMode); CCatalogProduct::setUseDiscount($currentUseDiscount); unset($userGroups, $currentUseDiscount, $currentVatMode); if ($adminSection) { if ($intUserID > 0) { CCatalogDiscountSave::ClearDiscountUserID(); } else { CCatalogDiscountSave::Enable(); } } if (empty($arPrice)) { return $arResult; } $arDiscountList = array(); if (empty($arPrice['DISCOUNT_LIST']) && !empty($arPrice['DISCOUNT']) && is_array($arPrice['DISCOUNT'])) { $arPrice['DISCOUNT_LIST'] = array($arPrice['DISCOUNT']); } if (!empty($arPrice['DISCOUNT_LIST'])) { $appliedCoupons = array(); foreach ($arPrice['DISCOUNT_LIST'] as &$arOneDiscount) { $arOneList = array('ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => '', 'COUPON_TYPE' => '', 'USE_COUPONS' => isset($arOneDiscount['USE_COUPONS']) ? $arOneDiscount['USE_COUPONS'] : 'N', 'MODULE_ID' => isset($oneDiscount['MODULE_ID']) ? $oneDiscount['MODULE_ID'] : 'catalog', 'TYPE' => $arOneDiscount['TYPE'], 'VALUE' => $arOneDiscount['VALUE'], 'VALUE_TYPE' => $arOneDiscount['VALUE_TYPE'], 'MAX_VALUE' => $arOneDiscount['VALUE_TYPE'] == Catalog\DiscountTable::VALUE_TYPE_PERCENT ? $arOneDiscount['MAX_DISCOUNT'] : 0, 'CURRENCY' => $arOneDiscount['CURRENCY'], 'HANDLERS' => isset($arOneDiscount['HANDLERS']) ? $arOneDiscount['HANDLERS'] : array()); if (!empty($arOneDiscount['COUPON'])) { $arOneList['USE_COUPONS'] = 'Y'; $arOneList['COUPON'] = $arOneDiscount['COUPON']; $arOneList['COUPON_TYPE'] = $arOneDiscount['COUPON_ONE_TIME']; $appliedCoupons[] = $arOneDiscount['COUPON']; } $arDiscountList[] = $arOneList; } unset($arOneList, $arOneDiscount); if (!empty($appliedCoupons)) { $resultApply = DiscountCouponsManager::setApplyByProduct($productHash, $appliedCoupons); } unset($resultApply, $appliedCoupons); } if (empty($arPrice['PRICE']['CATALOG_GROUP_NAME'])) { if (!empty($arPrice['PRICE']['CATALOG_GROUP_ID'])) { $priceName = self::getPriceTitle($arPrice['PRICE']['CATALOG_GROUP_ID']); if ($priceName != '') { $arPrice['PRICE']['CATALOG_GROUP_NAME'] = $priceName; } unset($priceName); } } } else { $vatRate = 0.0; if (!($arVAT = static::getHitCache('VAT_INFO', $productID))) { $rsVAT = CCatalogProduct::GetVATInfo($productID); if ($arVAT = $rsVAT->Fetch()) { static::setHitCache('VAT_INFO', $productID, $arVAT); } unset($rsVAT); } if (!empty($arVAT) && is_array($arVAT)) { $vatRate = (double) $arVAT['RATE'] * 0.01; } } $arResult = array("NAME" => $arProduct["~NAME"], "CAN_BUY" => "Y", "DETAIL_PAGE_URL" => $arProduct['~DETAIL_PAGE_URL'], "BARCODE_MULTI" => $arCatalogProduct["BARCODE_MULTI"], "WEIGHT" => (double) $arCatalogProduct['WEIGHT'], "DIMENSIONS" => serialize(array("WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"])), "TYPE" => $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : null); if ($arParams['SELECT_QUANTITY_TRACE'] == "Y") { $arResult["QUANTITY_TRACE"] = $arCatalogProduct["QUANTITY_TRACE"]; } if ($arParams["CHECK_QUANTITY"] == "Y") { $arResult["QUANTITY"] = $boolQuantity && $dblQuantity < $quantity ? $dblQuantity : $quantity; } else { $arResult["QUANTITY"] = $arParams["QUANTITY"]; } if ($arParams["CHECK_QUANTITY"] == "Y" && $boolQuantity && $dblQuantity < $quantity) { $APPLICATION->ThrowException(Loc::getMessage("CATALOG_QUANTITY_NOT_ENOGH", array("#NAME#" => htmlspecialcharsbx($arProduct["~NAME"]), "#CATALOG_QUANTITY#" => $arCatalogProduct["QUANTITY"], "#QUANTITY#" => $quantity)), "CATALOG_QUANTITY_NOT_ENOGH"); } if ($arParams['CHECK_PRICE'] == 'Y') { $arResult['PRODUCT_PRICE_ID'] = $arPrice['PRICE']['ID']; $arResult['NOTES'] = $arPrice['PRICE']['CATALOG_GROUP_NAME']; $arResult['VAT_RATE'] = $arPrice['PRICE']['VAT_RATE']; $arResult['DISCOUNT_NAME'] = ''; $arResult['DISCOUNT_COUPON'] = ''; $arResult['DISCOUNT_LIST'] = array(); if (empty($arPrice['RESULT_PRICE']) || !is_array($arPrice['RESULT_PRICE'])) { $arPrice['RESULT_PRICE'] = CCatalogDiscount::calculateDiscountList($arPrice['PRICE'], $arParams['CURRENCY'], $arDiscountList, true); } $arResult['BASE_PRICE'] = $arPrice['RESULT_PRICE']['BASE_PRICE']; $arResult['PRICE'] = $arPrice['RESULT_PRICE']['DISCOUNT_PRICE']; $arResult['CURRENCY'] = $arPrice['RESULT_PRICE']['CURRENCY']; $arResult['DISCOUNT_PRICE'] = $arPrice['RESULT_PRICE']['DISCOUNT']; if (isset($arPrice['RESULT_PRICE']['PERCENT'])) { $arResult['DISCOUNT_VALUE'] = $arPrice['RESULT_PRICE']['PERCENT'] > 0 ? $arPrice['RESULT_PRICE']['PERCENT'] . '%' : 0; } else { $arResult['DISCOUNT_VALUE'] = $arPrice['RESULT_PRICE']['DISCOUNT_VALUE']; } if (!empty($arDiscountList)) { $arResult['DISCOUNT_LIST'] = $arDiscountList; } if (!empty($arPrice['DISCOUNT'])) { $arResult['DISCOUNT_NAME'] = '[' . $arPrice['DISCOUNT']['ID'] . '] ' . $arPrice['DISCOUNT']['NAME']; if (!empty($arPrice['DISCOUNT']['COUPON'])) { $arResult['DISCOUNT_COUPON'] = $arPrice['DISCOUNT']['COUPON']; } if (empty($arResult['DISCOUNT_LIST'])) { $arResult['DISCOUNT_LIST'] = array($arPrice['DISCOUNT']); } } } else { $arResult['VAT_RATE'] = $vatRate; } $arResult["VAT_INCLUDED"] = "Y"; return $arResult; }
if (!isset($arIBlockSitesList[$arIBlock['ID']])) { $arLIDList = array(); $arWithLinks = array(); $arWithoutLinks = array(); $rsIBlockSites = CIBlock::GetSite($arIBlock['ID']); while ($arIBlockSite = $rsIBlockSites->Fetch()) { $arLIDList[] = $arIBlockSite['LID']; $arWithLinks[] = '<a href="/bitrix/admin/site_edit.php?LID=' . urlencode($arIBlockSite['LID']) . '&lang=' . LANGUAGE_ID . '" title="' . Loc::getMessage("CO_SITE_ALT") . '">' . htmlspecialcharsbx($arIBlockSite["LID"]) . '</a>'; $arWithoutLinks[] = htmlspecialcharsbx($arIBlockSite['LID']); } $arIBlockSitesList[$arIBlock['ID']] = array('SITE_ID' => $arLIDList, 'WITH_LINKS' => implode(' ', $arWithLinks), 'WITHOUT_LINKS' => implode(' ', $arWithoutLinks)); } $arIBlockItem = array('ID' => $arIBlock['ID'], 'IBLOCK_TYPE_ID' => $arIBlock['IBLOCK_TYPE_ID'], 'SITE_ID' => $arIBlockSitesList[$arIBlock['ID']]['SITE_ID'], 'NAME' => htmlspecialcharsbx($arIBlock['NAME']), 'ACTIVE' => $arIBlock['ACTIVE'], 'FULL_NAME' => '[' . $arIBlock['IBLOCK_TYPE_ID'] . '] ' . htmlspecialcharsbx($arIBlock['NAME']) . ' (' . $arIBlockSitesList[$arIBlock['ID']]['WITHOUT_LINKS'] . ')', 'IS_CATALOG' => 'N', 'IS_CONTENT' => 'N', 'YANDEX_EXPORT' => 'N', 'VAT_ID' => 0, 'PRODUCT_IBLOCK_ID' => 0, 'SKU_PROPERTY_ID' => 0, 'OFFERS_IBLOCK_ID' => 0, 'IS_OFFERS' => 'N', 'OFFERS_PROPERTY_ID' => 0); $arIBlockFullInfo[$arIBlock['ID']] = $arIBlockItem; } $catalogIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'SUBSCRIPTION', 'YANDEX_EXPORT', 'VAT_ID'))); while ($arOneCatalog = $catalogIterator->fetch()) { $arOneCatalog['IBLOCK_ID'] = (int) $arOneCatalog['IBLOCK_ID']; $arOneCatalog['VAT_ID'] = (int) $arOneCatalog['VAT_ID']; $arOneCatalog['PRODUCT_IBLOCK_ID'] = (int) $arOneCatalog['PRODUCT_IBLOCK_ID']; $arOneCatalog['SKU_PROPERTY_ID'] = (int) $arOneCatalog['SKU_PROPERTY_ID']; if (!CBXFeatures::IsFeatureEnabled('SaleRecurring') && 'Y' == $arOneCatalog['SUBSCRIPTION']) { $arRecurring[] = '[' . $arIBlockItem['ID'] . '] ' . $arIBlockItem['NAME']; $arRecurringKey[$arIBlockItem['ID']] = true; } $arIBlock = $arIBlockFullInfo[$arOneCatalog['IBLOCK_ID']]; $arIBlock['IS_CATALOG'] = 'Y'; $arIBlock['IS_CONTENT'] = CBXFeatures::IsFeatureEnabled('SaleRecurring') ? $arOneCatalog['SUBSCRIPTION'] : 'N'; $arIBlock['YANDEX_EXPORT'] = $arOneCatalog['YANDEX_EXPORT']; $arIBlock['VAT_ID'] = $arOneCatalog['VAT_ID']; $arIBlock['PRODUCT_IBLOCK_ID'] = $arOneCatalog['PRODUCT_IBLOCK_ID'];
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/prolog.php"; IncludeModuleLangFile(__FILE__); $IBLOCK_ID = isset($_GET['IBLOCK_ID']) ? (int) $_GET['IBLOCK_ID'] : 0; if (!CIBlockRights::UserHasRightTo($IBLOCK_ID, $IBLOCK_ID, "iblock_edit")) { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } $max_execution_time = isset($_REQUEST['max_execution_time']) ? (int) $_REQUEST['max_execution_time'] : 0; if ($max_execution_time <= 0) { $max_execution_time = 20; } $res = false; $iblockDropDown = array(); $iblockFilter = array('=PROPERTY_INDEX' => 'I'); if (Loader::includeModule('catalog')) { $OfferIblocks = array(); $offersIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('!PRODUCT_IBLOCK_ID' => 0))); while ($offer = $offersIterator->fetch()) { $OfferIblocks[] = (int) $offer['IBLOCK_ID']; } if (!empty($OfferIblocks)) { unset($offer); $iblockFilter['!ID'] = $OfferIblocks; } unset($offersIterator, $OfferIblocks); } $iblockList = \Bitrix\Iblock\IblockTable::getList(array('select' => array('ID', 'NAME', 'ACTIVE'), 'filter' => $iblockFilter, 'order' => array('ID' => 'asc', 'NAME' => 'asc'))); while ($iblockInfo = $iblockList->fetch()) { $iblockDropDown[$iblockInfo['ID']] = '[' . $iblockInfo['ID'] . '] ' . $iblockInfo['NAME'] . ($iblockInfo['ACTIVE'] == 'N' ? ' (' . GetMessage('IBLOCK_REINDEX_DEACTIVE') . ')' : ''); } unset($iblockInfo, $iblockList); if ($_SERVER["REQUEST_METHOD"] == "POST" && $_REQUEST["Reindex"] == "Y") {
protected function getIblockList() { if ($this->iblockList === null) { $this->iblockList = array(); $ids = array(); $filter = array(); if ($this->getSubscription()) { $filter['=SUBSCRIPTION'] = 'Y'; } $showOffersIBlock = \Bitrix\Main\Config\Option::get('catalog', 'product_form_show_offers_iblock'); $catalogIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'SUBSCRIPTION'), 'filter' => $filter)); while ($catalog = $catalogIterator->fetch()) { $catalog['IBLOCK_ID'] = (int) $catalog['IBLOCK_ID']; $catalog['PRODUCT_IBLOCK_ID'] = (int) $catalog['PRODUCT_IBLOCK_ID']; $catalog['SKU_PROPERTY_ID'] = (int) $catalog['SKU_PROPERTY_ID']; if ($catalog['SUBSCRIPTION'] == 'N' && $catalog['PRODUCT_IBLOCK_ID'] > 0) { $ids[$catalog['PRODUCT_IBLOCK_ID']] = $catalog['PRODUCT_IBLOCK_ID']; if ($showOffersIBlock == 'Y') { $ids[$catalog['IBLOCK_ID']] = $catalog['IBLOCK_ID']; } } else { $ids[$catalog['IBLOCK_ID']] = $catalog['IBLOCK_ID']; } } unset($catalog, $catalogIterator); if ($ids) { $filter = array("ID" => $ids, 'ACTIVE' => 'Y'); if ($this->checkPermissions) { $filter['MIN_PERMISSION'] = 'R'; } if ($this->getLid()) { $filter["LID"] = $this->getLid(); } $res = \CIBlock::GetList(array("ID" => "ASC"), $filter, false); while ($row = $res->Fetch()) { $this->iblockList[$row['ID']] = $row; } if (sizeof($ids) > 1) { $siteTable = new \Bitrix\Iblock\IblockSiteTable(); $siteResult = $siteTable->getList(array('select' => array('IBLOCK_ID', 'SITE.NAME'), 'filter' => array('IBLOCK_ID' => $ids))); while ($row = $siteResult->fetch()) { if (isset($this->iblockList[$row['IBLOCK_ID']])) { $this->iblockList[$row['IBLOCK_ID']]['SITE_NAME'] = $row['IBLOCK_IBLOCK_SITE_SITE_NAME']; } } } } } return $this->iblockList; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } use Bitrix\Main\Loader; use Bitrix\Catalog; use Bitrix\Iblock; if (!Loader::includeModule('sale')) { return; } $arColumns = array("NAME" => GetMessage("SBB_BNAME"), "DISCOUNT" => GetMessage("SBB_BDISCOUNT"), "WEIGHT" => GetMessage("SBB_BWEIGHT"), "PROPS" => GetMessage("SBB_BPROPS"), "DELETE" => GetMessage("SBB_BDELETE"), "DELAY" => GetMessage("SBB_BDELAY"), "TYPE" => GetMessage("SBB_BTYPE"), "PRICE" => GetMessage("SBB_BPRICE"), "QUANTITY" => GetMessage("SBB_BQUANTITY"), "SUM" => GetMessage("SBB_BSUM")); if (Loader::includeModule('catalog')) { $arIblockIDs = array(); $arIblockNames = array(); $catalogIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME'), 'order' => array('IBLOCK_ID' => 'ASC'))); while ($catalog = $catalogIterator->fetch()) { $catalog['IBLOCK_ID'] = (int) $catalog['IBLOCK_ID']; $arIblockIDs[] = $catalog['IBLOCK_ID']; $arIblockNames[$catalog['IBLOCK_ID']] = $catalog['NAME']; } unset($catalog, $catalogIterator); $arProps = array(); $propertyIterator = Iblock\PropertyTable::getList(array('select' => array('ID', 'CODE', 'NAME', 'IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $arIblockIDs, 'ACTIVE' => 'Y', '!XML_ID' => CIBlockPropertyTools::XML_SKU_LINK), 'order' => array('IBLOCK_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC'))); while ($property = $propertyIterator->fetch()) { $property['ID'] = (int) $property['ID']; $property['IBLOCK_ID'] = (int) $property['IBLOCK_ID']; $property['CODE'] = (string) $property['CODE']; if ($property['CODE'] == '') { $property['CODE'] = $property['ID']; }
public static function getProductIdsByOfferIds($offerIds) { if (empty($offerIds)) { return array(); } $bestList = array(); $iblockGroup = array(); $itemIterator = \Bitrix\Iblock\ElementTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('ID' => $offerIds, 'ACTIVE' => 'Y'))); while ($item = $itemIterator->fetch()) { if (!isset($iblockGroup[$item['IBLOCK_ID']])) { $iblockGroup[$item['IBLOCK_ID']] = array(); } $iblockGroup[$item['IBLOCK_ID']][] = $item['ID']; $bestList[$item['ID']] = array(); } if (empty($iblockGroup)) { return array(); } $iblockSku = array(); $iblockOffers = array(); if (!empty($iblockGroup)) { $iblockIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('=IBLOCK_ID' => array_keys($iblockGroup), '!PRODUCT_IBLOCK_ID' => 0))); while ($iblock = $iblockIterator->fetch()) { $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID']; $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID']; $iblock['SKU_PROPERTY_ID'] = (int) $iblock['SKU_PROPERTY_ID']; $iblock['VERSION'] = (int) $iblock['VERSION']; $iblockSku[$iblock['IBLOCK_ID']] = $iblock; $iblockOffers[$iblock['IBLOCK_ID']] = $iblockGroup[$iblock['IBLOCK_ID']]; } unset($iblock, $iblockIterator); } if (empty($iblockOffers)) { return array(); } $offerLink = array(); foreach ($iblockOffers as $iblockId => $items) { $skuProperty = 'PROPERTY_' . $iblockSku[$iblockId]['SKU_PROPERTY_ID']; $iblockFilter = array('IBLOCK_ID' => $iblockId, '=ID' => $items); $iblockFields = array('ID', 'IBLOCK_ID', $skuProperty); $skuProperty .= '_VALUE'; $offersIterator = \CIBlockElement::getList(array('ID' => 'ASC'), $iblockFilter, false, false, $iblockFields); while ($offer = $offersIterator->Fetch()) { $productId = (int) $offer[$skuProperty]; if ($productId <= 0) { unset($bestList[$offer['ID']]); } else { $bestList[$offer['ID']]['PARENT_ID'] = $productId; $bestList[$offer['ID']]['PARENT_IBLOCK'] = $iblockSku[$iblockId]['PRODUCT_IBLOCK_ID']; if (!isset($offerLink[$productId])) { $offerLink[$productId] = array(); } $offerLink[$productId][] = $offer['ID']; } } } if (!empty($offerLink)) { $productIterator = \Bitrix\Iblock\ElementTable::getList(array('select' => array('ID'), 'filter' => array('@ID' => array_keys($offerLink), 'ACTIVE' => 'N'))); while ($product = $productIterator->fetch()) { if (empty($offerLink[$product['ID']])) { continue; } foreach ($offerLink[$product['ID']] as $value) { unset($bestList[$value]); } } } if (empty($bestList)) { return array(); } $finalIds = array(); $dublicate = array(); foreach ($bestList as $id => $info) { if (empty($info)) { if (!isset($dublicate[$id])) { $finalIds[] = $id; } $dublicate[$id] = true; } else { if (!isset($dublicate[$id])) { $finalIds[] = $info['PARENT_ID']; } $dublicate[$info['PARENT_ID']] = true; } } unset($id, $info, $dublicate); return $finalIds; }
public static function getProductList($offerID, $iblockID = 0) { $iblockID = (int)$iblockID; if (!is_array($offerID)) $offerID = array($offerID); Collection::normalizeArrayValuesByInt($offerID); if (empty($offerID)) return false; $iblockSku = array(); $iblockOffers = array(); if ($iblockID == 0) { $iblockList = array(); $elementIterator = Iblock\ElementTable::getList(array( 'select' => array('ID', 'IBLOCK_ID'), 'filter' => array('=ID' => $offerID) )); while ($element = $elementIterator->fetch()) { $element['ID'] = (int)$element['ID']; $element['IBLOCK_ID'] = (int)$element['IBLOCK_ID']; if (!isset($iblockList[$element['IBLOCK_ID']])) $iblockList[$element['IBLOCK_ID']] = array(); $iblockList[$element['IBLOCK_ID']][] = $element['ID']; } unset($element, $elementIterator); if (!empty($iblockList)) { $iblockIterator = Catalog\CatalogIblockTable::getList(array( 'select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('=IBLOCK_ID' => array_keys($iblockList), '!PRODUCT_IBLOCK_ID' => 0) )); while ($iblock = $iblockIterator->fetch()) { $iblock['IBLOCK_ID'] = (int)$iblock['IBLOCK_ID']; $iblock['PRODUCT_IBLOCK_ID'] = (int)$iblock['PRODUCT_IBLOCK_ID']; $iblock['SKU_PROPERTY_ID'] = (int)$iblock['SKU_PROPERTY_ID']; $iblock['VERSION'] = (int)$iblock['VERSION']; $iblockSku[$iblock['IBLOCK_ID']] = $iblock; self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock; $iblockOffers[$iblock['IBLOCK_ID']] = $iblockList[$iblock['IBLOCK_ID']]; } unset($iblock, $iblockIterator); } unset($iblockList); } else { $iblockIterator = Catalog\CatalogIblockTable::getList(array( 'select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('=IBLOCK_ID' => $iblockID, '!PRODUCT_IBLOCK_ID' => 0) )); if ($iblock = $iblockIterator->fetch()) { $iblock['IBLOCK_ID'] = (int)$iblock['IBLOCK_ID']; $iblock['PRODUCT_IBLOCK_ID'] = (int)$iblock['PRODUCT_IBLOCK_ID']; $iblock['SKU_PROPERTY_ID'] = (int)$iblock['SKU_PROPERTY_ID']; $iblock['VERSION'] = (int)$iblock['VERSION']; $iblockSku[$iblock['IBLOCK_ID']] = $iblock; self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock; $iblockOffers[$iblockID] = $offerID; } unset($iblock, $iblockIterator); } if (empty($iblockOffers)) return array(); $result = array_fill_keys($offerID, array()); foreach ($iblockOffers as $iblockID => $offerList) { $skuProperty = 'PROPERTY_'.$iblockSku[$iblockID]['SKU_PROPERTY_ID']; $iblockFilter = array( 'IBLOCK_ID' => $iblockID, '=ID' => $offerList ); $iblockFields = array('ID', 'IBLOCK_ID', $skuProperty); $skuProperty .= '_VALUE'; $offersIterator = CIBlockElement::GetList( array('ID' => 'ASC'), $iblockFilter, false, false, $iblockFields ); while ($offer = $offersIterator->Fetch()) { $currentOffer = (int)$offer['ID']; $productID = (int)$offer[$skuProperty]; if (!isset($result[$currentOffer]) || $productID <= 0) continue; unset($offer[$skuProperty]); $result[$currentOffer] = array( 'ID' => $productID, 'IBLOCK_ID' => $iblockSku[$iblockID]['PRODUCT_IBLOCK_ID'], 'OFFER_IBLOCK_ID' => $iblockID, 'SKU_PROPERTY_ID' => $iblockSku[$iblockID]['SKU_PROPERTY_ID'] ); } unset($currentOffer, $offer, $offersIterator, $skuProperty); } unset($iblockID, $iblockOffers); return array_filter($result); }
public static function OnBeforeIBlockPropertyDelete($intPropertyID) { global $APPLICATION; $intPropertyID = (int) $intPropertyID; if ($intPropertyID <= 0) { return true; } $propertyIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID'), 'filter' => array('=SKU_PROPERTY_ID' => $intPropertyID))); if ($property = $propertyIterator->fetch()) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_ERR_CANNOT_DELETE_SKU_PROPERTY', array('#SKU_PROPERTY_ID#' => $property['SKU_PROPERTY_ID'], '#PRODUCT_IBLOCK_ID#' => $property['PRODUCT_IBLOCK_ID'], '#IBLOCK_ID#' => $property['IBLOCK_ID']))); unset($property, $propertyIterator); return false; } unset($property, $propertyIterator); return true; }
messageOk: "<?php echo Loc::getMessage('SALE_EBAY_GET_SFTP_OK'); ?> ", messageError: "<?php echo Loc::getMessage('SALE_EBAY_GET_SFTP_ERROR'); ?> ", submit: false }); </script> </td> </tr> <?php $tabControl->BeginNextTab(); $res = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'SITE_ID' => 'IBLOCK_SITE.SITE_ID'), 'filter' => array('SITE_ID' => $SITE_ID), 'runtime' => array('IBLOCK_SITE' => array('data_type' => 'Bitrix\\Iblock\\IblockSiteTable', 'reference' => array('ref.IBLOCK_ID' => 'this.IBLOCK_ID'), 'join_type' => 'inner')))); $maps = array(); while ($ib = $res->fetch()) { $entityId = \Bitrix\Sale\TradingPlatform\Ebay\MapHelper::getCategoryEntityId($ib["IBLOCK_ID"]); $mapRes = \Bitrix\Sale\TradingPlatform\MapTable::getList(array('select' => array('VALUE_EXTERNAL', 'VALUE_INTERNAL', 'CATEGORY_EBAY_NAME' => 'CATEGORY_EBAY.NAME', 'CATEGORY_BITRIX_NAME' => 'CATEGORY_BITRIX.NAME', 'IBLOCK_ID' => 'CATEGORY_BITRIX.IBLOCK_ID'), 'filter' => array('=ENTITY_ID' => $entityId), 'order' => array('CATEGORY_BITRIX_NAME' => 'ASC', 'CATEGORY_EBAY_NAME' => 'ASC'), 'runtime' => array(new \Bitrix\Main\Entity\ReferenceField('CATEGORY_EBAY', '\\Bitrix\\Sale\\TradingPlatform\\Ebay\\CategoryTable', array('=this.VALUE_EXTERNAL' => 'ref.CATEGORY_ID')), new \Bitrix\Main\Entity\ReferenceField('CATEGORY_BITRIX', '\\Bitrix\\Iblock\\SectionTable', array('=this.VALUE_INTERNAL' => 'ref.ID'))))); $maps = array_merge($maps, $mapRes->fetchAll()); } ?> <tr><td colspan="2" align="center"> <table class="adm-detail-content-table edit-table" style="opacity: 1;"> <tr><td colspan="2" align="center"> <table border="0" cellpadding="0" cellspacing="0" class="internal" style="width:80%;"> <tr class="heading"><td><?php echo Loc::getMessage("SALE_EBAY_CAT_BITRIX_NAME"); ?>
return; } $siteId = isset($_REQUEST['src_site']) && is_string($_REQUEST['src_site']) ? $_REQUEST['src_site'] : ''; $siteId = substr(preg_replace('/[^a-z0-9_]/i', '', $siteId), 0, 2); $arColumns = array("PREVIEW_PICTURE" => GetMessage("SOA_PREVIEW_PICTURE"), "DETAIL_PICTURE" => GetMessage("SOA_DETAIL_PICTURE"), "PREVIEW_TEXT" => GetMessage("SOA_PREVIEW_TEXT"), "PROPS" => GetMessage("SOA_PROPS"), "NOTES" => GetMessage("SOA_PRICE_TYPE"), "DISCOUNT_PRICE_PERCENT_FORMATED" => GetMessage("SOA_DISCOUNT"), "PRICE_FORMATED" => GetMessage("SOA_PRICE_FORMATED"), "WEIGHT_FORMATED" => GetMessage("SOA_WEIGHT")); if (Loader::includeModule('catalog')) { $arIblockIDs = array(); $arIblockNames = array(); $parameters = array('select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME', 'SITE_ID' => 'IBLOCK_SITE.SITE_ID'), 'order' => array('IBLOCK_ID' => 'ASC'), 'filter' => array('SITE_ID' => 's1'), 'runtime' => array('IBLOCK_SITE' => array('data_type' => 'Bitrix\\Iblock\\IblockSiteTable', 'reference' => array('ref.IBLOCK_ID' => 'this.IBLOCK_ID'), 'join_type' => 'inner'))); $parameters = array('select' => array('IBLOCK_ID', 'NAME' => 'IBLOCK.NAME'), 'order' => array('IBLOCK_ID' => 'ASC')); if (!empty($siteId) && is_string($siteId)) { $parameters['select']['SITE_ID'] = 'IBLOCK_SITE.SITE_ID'; $parameters['filter'] = array('SITE_ID' => $siteId); $parameters['runtime'] = array('IBLOCK_SITE' => array('data_type' => 'Bitrix\\Iblock\\IblockSiteTable', 'reference' => array('ref.IBLOCK_ID' => 'this.IBLOCK_ID'), 'join_type' => 'inner')); } $catalogIterator = Catalog\CatalogIblockTable::getList($parameters); while ($catalog = $catalogIterator->fetch()) { $catalog['IBLOCK_ID'] = (int) $catalog['IBLOCK_ID']; $arIblockIDs[] = $catalog['IBLOCK_ID']; $arIblockNames[$catalog['IBLOCK_ID']] = $catalog['NAME']; } unset($catalog, $catalogIterator); if (!empty($arIblockIDs)) { $arProps = array(); $propertyIterator = Iblock\PropertyTable::getList(array('select' => array('ID', 'CODE', 'NAME', 'IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $arIblockIDs, '=ACTIVE' => 'Y', '!=XML_ID' => CIBlockPropertyTools::XML_SKU_LINK), 'order' => array('IBLOCK_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC'))); while ($property = $propertyIterator->fetch()) { $property['ID'] = (int) $property['ID']; $property['IBLOCK_ID'] = (int) $property['IBLOCK_ID']; $property['CODE'] = (string) $property['CODE']; if ($property['CODE'] == '') { $property['CODE'] = $property['ID'];
public static function getProductList($offerID, $iblockID = 0) { $iblockID = (int) $iblockID; if (!is_array($offerID)) { $offerID = array($offerID); } Collection::normalizeArrayValuesByInt($offerID); if (empty($offerID)) { return false; } $iblockSku = array(); $iblockOffers = array(); if ($iblockID == 0) { $iblockList = array(); $elementIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('@ID' => $offerID))); while ($element = $elementIterator->fetch()) { $element['ID'] = (int) $element['ID']; $element['IBLOCK_ID'] = (int) $element['IBLOCK_ID']; if (!isset($iblockList[$element['IBLOCK_ID']])) { $iblockList[$element['IBLOCK_ID']] = array(); } $iblockList[$element['IBLOCK_ID']][] = $element['ID']; } unset($element, $elementIterator); if (!empty($iblockList)) { $iblockListIds = array_keys($iblockList); foreach ($iblockListIds as &$oneIblock) { if (!empty(self::$arProductCache[$oneIblock])) { unset($iblockList[$oneIblock]); continue; } if (isset(self::$arOfferCache[$oneIblock])) { if (!empty(self::$arOfferCache[$oneIblock])) { $iblockSku[$oneIblock] = self::$arOfferCache[$oneIblock]; $iblockOffers[$oneIblock] = $iblockList[$oneIblock]; } unset($iblockList[$oneIblock]); } } unset($oneIblock, $iblockListIds); if (!empty($iblockList)) { $iblockIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('@IBLOCK_ID' => array_keys($iblockList), '!=PRODUCT_IBLOCK_ID' => 0))); while ($iblock = $iblockIterator->fetch()) { $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID']; $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID']; $iblock['SKU_PROPERTY_ID'] = (int) $iblock['SKU_PROPERTY_ID']; $iblock['VERSION'] = (int) $iblock['VERSION']; $iblockSku[$iblock['IBLOCK_ID']] = $iblock; self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock; self::$arProductCache[$iblock['IBLOCK_ID']] = false; self::$arOfferCache[$iblock['IBLOCK_ID']] = $iblock; self::$arOfferCache[$iblock['PRODUCT_IBLOCK_ID']] = false; self::$arPropertyCache[$iblock['SKU_PROPERTY_ID']] = $iblock; $iblockOffers[$iblock['IBLOCK_ID']] = $iblockList[$iblock['IBLOCK_ID']]; } unset($iblock, $iblockIterator); } } unset($iblockList); } else { if (empty(self::$arProductCache[$iblockID])) { if (isset(self::$arOfferCache[$iblockID])) { if (!empty(self::$arOfferCache[$iblockID])) { $iblockSku[$iblockID] = self::$arOfferCache[$iblockID]; $iblockOffers[$iblockID] = $offerID; } } else { $iblockIterator = Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID', 'VERSION' => 'IBLOCK.VERSION'), 'filter' => array('=IBLOCK_ID' => $iblockID, '!=PRODUCT_IBLOCK_ID' => 0))); if ($iblock = $iblockIterator->fetch()) { $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID']; $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID']; $iblock['SKU_PROPERTY_ID'] = (int) $iblock['SKU_PROPERTY_ID']; $iblock['VERSION'] = (int) $iblock['VERSION']; $iblockSku[$iblock['IBLOCK_ID']] = $iblock; self::$arProductCache[$iblock['PRODUCT_IBLOCK_ID']] = $iblock; self::$arProductCache[$iblock['IBLOCK_ID']] = false; self::$arOfferCache[$iblock['IBLOCK_ID']] = $iblock; self::$arOfferCache[$iblock['PRODUCT_IBLOCK_ID']] = false; self::$arPropertyCache[$iblock['SKU_PROPERTY_ID']] = $iblock; $iblockOffers[$iblockID] = $offerID; } unset($iblock, $iblockIterator); } } } if (empty($iblockOffers)) { return array(); } $result = array_fill_keys($offerID, array()); $conn = Application::getConnection(); $helper = $conn->getSqlHelper(); $offerField = $helper->quote('IBLOCK_ELEMENT_ID'); $propertyIdField = $helper->quote('IBLOCK_PROPERTY_ID'); foreach ($iblockOffers as $iblockID => $offerList) { $sku = $iblockSku[$iblockID]; if ($sku['VERSION'] == 2) { $productField = $helper->quote('PROPERTY_' . $sku['SKU_PROPERTY_ID']); $sqlQuery = 'select ' . $productField . ' as PRODUCT_ID, ' . $offerField . ' as ID from ' . $helper->quote('b_iblock_element_prop_s' . $sku['IBLOCK_ID']) . ' where ' . $offerField . ' IN (' . implode(',', $offerList) . ')'; } else { $productField = $helper->quote('VALUE_NUM'); $sqlQuery = 'select ' . $productField . ' as PRODUCT_ID, ' . $offerField . ' as ID from ' . $helper->quote('b_iblock_element_property') . ' where ' . $propertyIdField . ' = ' . $sku['SKU_PROPERTY_ID'] . ' and ' . $offerField . ' IN (' . implode(',', $offerList) . ')'; } unset($productField); $offersIterator = $conn->query($sqlQuery); while ($offer = $offersIterator->fetch()) { $currentOffer = (int) $offer['ID']; $productID = (int) $offer['PRODUCT_ID']; if (!isset($result[$currentOffer]) || $productID <= 0) { continue; } $result[$currentOffer] = array('ID' => $productID, 'IBLOCK_ID' => $sku['PRODUCT_IBLOCK_ID'], 'OFFER_IBLOCK_ID' => $iblockID, 'SKU_PROPERTY_ID' => $sku['SKU_PROPERTY_ID']); } unset($sku); } unset($iblockID, $iblockOffers); unset($helper, $conn); return array_filter($result); }