function getAvailableElementsCount(array $arSections)
{
$res = \Bitrix\Iblock\SectionElementTable::getList(array(
'select' => array('CNT', 'IBLOCK_SECTION_ID'),
'filter' => array(
'IBLOCK_SECTION_ID' => $arSections,
'PRODUCT.AVAILABLE' => 'Y',
'ELEMENT.ACTIVE' => 'Y'
),
'runtime' => array(
new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
'PRODUCT' => array(
'data_type' => '\Bitrix\Catalog\ProductTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
),
'ELEMENT' => array(
'data_type' => '\Bitrix\Iblock\ElementTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
)
)
));
return $res->fetchAll();
}
|
Гусев Александр, в методе CIBlockSection::GetList считаются только активные элементы:
Обращения к таблице продуктов нет
... $strSelect = $sSelect.",COUNT(DISTINCT BE.ID) as ELEMENT_CNT".(isset($obUserFieldsSql)? $obUserFieldsSql->GetSelect(): ""); ... LEFT JOIN b_iblock_element BE ON (BSE.IBLOCK_ELEMENT_ID=BE.ID AND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL ) AND BE.IBLOCK_ID = BS.IBLOCK_ID |