- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/v2/BaseIblockElementRepository.php
- Класс: BitrixCatalogv2BaseIblockElementRepository
- Вызов: BaseIblockElementRepository::getList
protected function getList(array $params): array
{
$filter = $params['filter'] ?? [];
$order = $params['order'] ?? [];
$nav = $params['nav'] ?? false;
$iblockElements = [];
$listIds = [];
$iterator = CIBlockElement::GetList(
$order,
array_merge(
$filter,
$this->getAdditionalFilter(),
$this->getAdditionalProductFilter(),
),
false,
$nav,
[
'ID',
'IBLOCK_ID',
],
);
while ($row = $iterator->fetch())
{
$id = (int)$row['ID'];
$iblockElements[$id] = $row;
$listIds[] = $id;
}
unset($iterator);
if (empty($iblockElements))
{
return [];
}
$elementSelect = $this->getDefaultElementSelect();
$detailUrlTemplate = $this->checkAutoloadDetailUrl() ? $this->getDetailUrlTemplate() : null;
$specificFields = [
'QUANTITY_TRACE' => 'QUANTITY_TRACE_ORIG',
'CAN_BUY_ZERO' => 'CAN_BUY_ZERO_ORIG',
'SUBSCRIBE' => 'SUBSCRIBE_ORIG',
];
$productSelect = array_merge(['*', 'UF_*'], array_values($specificFields));
foreach (array_chunk($listIds, CATALOG_PAGE_SIZE) as $pageIds)
{
$elementsIterator = CIBlockElement::GetList(
[],
[
'ID' => $pageIds,
'CHECK_PERMISSIONS' => 'N',
'SHOW_NEW' => 'Y',
],
false,
false,
$elementSelect,
);
if ($detailUrlTemplate)
{
$elementsIterator->SetUrlTemplates($detailUrlTemplate);
}
while ($element = $elementsIterator->getNext())
{
$id = (int)$element['ID'];
$iblockElements[$id] += $this->replaceRawFromTilda($element);
}
unset($elementsIterator);
$productIterator = ProductTable::getList([
'select' => $productSelect,
'filter' => [
'@ID' => $pageIds,
],
]);
while ($product = $productIterator->fetch())
{
$id = (int)$product['ID'];
unset($product['ID']);
foreach ($specificFields as $field => $originalField)
{
$product[$field] = $product[$originalField];
unset($product[$originalField]);
}
$iblockElements[$id] += $product;
}
unset($productIterator);
}
return $iblockElements;
}