Получаем количество элементов инфоблока 1С-Битрикс

Получаем количество элементов инфоблока 1С-Битрикс

Получаем количество элементов инфоблока 1С-Битрикс

Наверное многие, читая руководство для разработчиков битрикса, опускают некоторые моменты и особенности. А затем мучаются и пишут костыли для решения той или иной задачи или проблемы.

А нужно лишь вернуться к определенной его теме и еще раз внимательно все прочитать.

Возьмем типичный пример: нужно посчитать количество элементов в инфоблоке, которые соответствуют каким-то параметрам. Что обычно делают люди: делают выборку, затем формируют в цикле массив элементов. После этого либо в цикле устанавливают счетчик для подсчета, либо после формирования массива выполняют функцию count(), которая высчитывает количество элементов.

Но зачем проделывать столько ненужных манипуляций, ведь все решается гораздо проще:


//подключаем модуль инфоблоков, если он не подключен ранее 
CModule::IncludeModule("iblock"); 
//id нужного инфоблока 
$iblock_id = 3; 
$arFilter = Array("IBLOCK_ID"=>$iblock_id, "ACTIVE"=>"Y");
$res_count = CIBlockElement::GetList(Array(), $arFilter, Array(), false, Array());

На выходе, в переменной $res_count будет значение количества элементов, соответствующих указанному фильтру. В нашем случае это все активные элементы из инфоблока с ID равным 3.

Чем эта конструкция отличается от типичных конструкций по выборке элементов? Дело в том, что мы третьим параметром (arGroupBy) в методе GetList указали пустой массив - Array(). Посмотрим, что нам говорит на этот счет документация:

"arGroupBy - Массив полей для группировки элемента. Если поля указаны, то выборка по ним группируется (при этом параметр arSelectFields будет проигнорирован), а в результат добавляется поле CNT - количество сгруппированных элементов. Если указать в качестве arGroupBy пустой массив, то метод вернет количество элементов CNT по фильтру."

Что мы, собственно, и сделали. Обычно третий параметр выставляют в false, тогда происходит обычная выборка элементов со всеми полями и свойствами, которые мы указали в arSelectFields. Но стоит только вместо false указать пустой массив Array() и метод GetList вернет нам количество элементов.


  • Если общее количество всех элементов (активность элементов и права доступа не учитываются) CIBlock::GetElementCount(IBLOCK_ID);