Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/catalog/lib/component/ |
Upload File : |
<?php namespace Bitrix\Catalog\Component; use Bitrix\Iblock\Url\AdminPage\BuilderManager; use Bitrix\Main; use Bitrix\Catalog\v2\IoC\ServiceContainer; abstract class ProductList extends \CBitrixComponent { protected $measures = []; protected function loadCatalog(array $skuIds): array { Main\Type\Collection::normalizeArrayValuesByInt($skuIds, true); $repositoryFacade = ServiceContainer::getRepositoryFacade(); if (!$repositoryFacade) { return []; } $productInfo = []; $productSkuIblockMap = []; foreach ($skuIds as $skuId) { $sku = $repositoryFacade->loadVariation($skuId); if (!$sku) { continue; } /** @var \Bitrix\Catalog\v2\Product\BaseProduct $product */ $product = $sku->getParent(); if (!$product) { continue; } $fields = $sku->getFields(); $fields['PRODUCT_ID'] = $product->getId(); $fields['SKU_ID'] = $skuId; $fields['OFFERS_IBLOCK_ID'] = 0; $fields['SKU_TREE'] = []; $fields['DETAIL_URL'] = $this->getElementDetailUrl($product->getIblockId(), $product->getId()); $fields['TYPE'] = (int)$fields['TYPE']; $measure = $this->measures[$sku->getField('MEASURE')] ?? null; if (!$measure) { $measure = $this->getDefaultMeasure(); } $fields['MEASURE_CODE'] = $measure['CODE']; $fields['MEASURE_NAME'] = $measure['SYMBOL']; if (!$product->isSimple()) { $fields['OFFERS_IBLOCK_ID'] = $fields['IBLOCK_ID']; $fields['IBLOCK_ID'] = $product->getIblockId(); $productSkuIblockMap[$product->getIblockId()] = $productSkuIblockMap[$product->getIblockId()] ?? []; $productSkuIblockMap[$product->getIblockId()][$product->getId()][] = $sku->getId(); } $productInfo[$skuId] = [ 'SKU' => $sku, 'FIELDS' => $fields, ]; } if ($productSkuIblockMap) { foreach ($productSkuIblockMap as $iblockId => $productMap) { $skuTree = ServiceContainer::make('sku.tree', ['iblockId' => $iblockId]); if ($skuTree) { $skuTreeItems = $skuTree->loadJsonOffers($productMap); foreach ($skuTreeItems as $offers) { foreach ($offers as $skuId => $skuTreeItem) { if (isset($productInfo[$skuId]['FIELDS'])) { $productInfo[$skuId]['FIELDS']['SKU_TREE'] = $skuTreeItem; } } } } } } return $productInfo; } protected function getElementDetailUrl(int $iblockId, int $skuId = 0): string { $urlBuilder = BuilderManager::getInstance()->getBuilder($this->arParams['BUILDER_CONTEXT']); if (!$urlBuilder) { return ''; } $urlBuilder->setIblockId($iblockId); return $urlBuilder->getElementDetailUrl($skuId); } protected function loadMeasures(): void { $measureResult = \CCatalogMeasure::getList( ['CODE' => 'ASC'], [], false, [], ['CODE', 'SYMBOL_RUS', 'SYMBOL_INTL', 'IS_DEFAULT', 'ID'] ); $this->measures = []; while ($measureFields = $measureResult->Fetch()) { $measureItem = [ 'ID' => $measureFields['ID'], 'CODE' => $measureFields['CODE'], 'IS_DEFAULT' => $measureFields['IS_DEFAULT'], 'SYMBOL' => $measureFields['SYMBOL_RUS'] ?? $measureFields['SYMBOL_INTL'], ]; $this->measures[$measureFields['ID']] = $measureItem; } } /** * @return string */ protected function getDefaultMeasure(): array { return \CCatalogMeasure::getDefaultMeasure(true); } }