Всем привет.
Недавно у меня возникла необходимость выводить на клиентском сайте, на странице раздела каталога количество активных элементов.
Сперва я пробовал стандартный CIBlockSection::GetList, но он возвращал количество всех элементов, а мне надо было получить количество только активных.
После некоторых ковыряний в хелпах по bitrix api решение было найдено.
Чтобы получить количество активных элементов в разделе каталога надо использовать следующий код.
$sect = CIBlockSection::GetList( Array("sort"=>"asc", 'name'=>'asc'), Array( 'IBLOCK_ID'=>3, 'ID'=>$arResult['ID'], 'GLOBAL_ACTIVE'=>"Y", 'CNT_ACTIVE'=>true ), true, array('NAME') ); while($el = $sect->Fetch()): $count += $el["ELEMENT_CNT"]; endwhile; echo 'Товаров: '.$count;
Именно благодаря параметру ‘CNT_ACTIVE’=>true мы получаем количество только активных элементов каталога.
Еще маленькая хитрость, если для фильтрации использовать ID, а не SECTION_ID то мы избежим пропадания количества во вложенных подразделах.
А подскажите как сделать подсчет по свойству элемента?
В свойство arFilter надо добавить фильтрацию по нужному вам свойству, например, ‘PROPERTY_BRAND’ => ‘NameBrand’
Что то не то,
$Nel=2;
$sect = CIBlockSection::GetList(
Array(«sort»=>»asc», ‘name’=>’asc’),
Array(
‘IBLOCK_ID’=>$arResult[‘IBLOCK_ID’],
‘ID’=>$arResult[«SECTIONS»][$a][«ID»],
‘GLOBAL_ACTIVE’=>»Y»,
‘PROPERTY_Nel’=>$Nel,
‘CNT_ACTIVE’=>true
),
true,
array(‘NAME’)
);
Тип поля — число.
Количество активных элементов считает правильно, но вот на свойство как будто нет его
Разобрался) так надо писать
«PROPERTY»=>array(«NEL»=>»2»),
Было бы совсем круто если бы еще можно было учитывать в фильтре количество на складе >=1
Попробуйте добавить в фильтр «>CATALOG_QUANTITY»=>0
Идиотский способ, дико нагружает сервер при большом количестве элементов.
Да, способ тормозной, можете посоветовать более быстрый и правильный способ?
Спасибо!
$activeElements = CIBlockSection::GetSectionElementsCount( $SECTION_ID, Array(«CNT_ACTIVE»=>»Y»));
echo $activeElements;
Ровно тоже, что и код в теме)