26 private static $instance;
28 private array $documentProductPositionListCollection = [];
29 private int $catalogId;
36 if (is_null(static::$instance))
38 static::$instance =
new static();
41 return static::$instance;
53 $productPositionList = $this->fetchDocumentProductPositionList($documentId);
54 return array_slice($productPositionList, 0, $limit);
65 return count($this->fetchDocumentProductPositionList($documentId));
69 private function fetchDocumentProductPositionList(
int $documentId):
array
76 if (!empty($this->documentProductPositionListCollection[$documentId]))
78 return $this->documentProductPositionListCollection[$documentId];
81 $documentProductListData = \CCatalogStoreDocsElement::getList(
86 '=DOC_ID' => $documentId,
100 $documentProductList = [];
101 while ($product = $documentProductListData->Fetch())
103 unset($product[
'ID']);
104 $product[
'ELEMENT_ID'] = (int)$product[
'ELEMENT_ID'];
105 $documentProductList[] = $this->formProductPositionData($product);
109 $documentProductListData,
112 $this->documentProductPositionListCollection[$documentId] = $documentProductList;
113 return $documentProductList;
116 private function formProductPositionData(
array $product):
array
118 $productPositionData = [
119 'PRODUCT_NAME' => $product[
'ELEMENT_NAME'],
123 $productId = $product[
'ELEMENT_ID'];
124 $productVariation = ServiceContainer::getRepositoryFacade()->loadVariation($product[
'ELEMENT_ID']);
125 if ($productVariation)
127 $image = $productVariation->getFrontImageCollection()->getFrontImage();
128 $productPositionData[
'PHOTO_URL'] = $image ? $image->getSource() :
null;
131 if (!State::isProductCardSliderEnabled())
133 $productId = $productVariation->getParent() ? $productVariation->getParent()->getId() : $productId;
137 $productPositionData[
'URL'] = $this->buildPositionUrl($productId);
139 return $productPositionData;
142 private function buildPositionUrl(
int $productId): string
147 $urlBuilder->setIblockId($this->getCatalogId());
148 return $urlBuilder->getElementDetailUrl($productId);
154 private function getCatalogId(): int
156 if (!isset($this->catalogId))
158 $this->catalogId = 0;
161 $this->catalogId = \Bitrix\Crm\Product\Catalog::getDefaultId() ?? 0;
165 return $this->catalogId;
static includeModule($moduleName)