Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Подсчет элементов в разделе

00 голосов
3
Есть каталог товаров, у элементов есть пользовательское свойство принадлежности к определённой группе (кроме обычного разделения по разделам), надо считать количество элементов с заданным пользовательским свойством в разделе. Пользовательское свойство представляет собой множественный список, т.е. один элемент может относится к многим группам по этому свойству.


делал так:
Код
   $arOrder=Array("SORT"=>"ASC");
   
   $arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"]);
   
   $ListEl = CIBlockSection::GetList($arOrder, $arFilter, true);

   
   while($El = $ListEl->Fetch()) {
      if ($El["DEPTH_LEVEL"] == 3) :
         $El["ING_EL_CNT"] = CIBlockSection::GetSectionElementsCount($El["ID"], isset($_REQUEST["ING"]) ? Array("PROPERTY"=>Array("INGREDIENTS"=>intval($_REQUEST["ING"]))) : false);
         $arEl[] = $El;
      endif;
   }
   
   $arResult["El"] = $arEl;


считал, пока не подключил другой инфоблок, всё вроде бы также, только структура поглубже, в общем просто количество считает, а по свойству не выходит уже.


потом вычитал, что щас надо уже считать другой ф-ей, попробовал так:

Код
   $arOrder=Array("SORT"=>"ASC");
   
   $arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"]);
   
   $ListEl = CIBlockSection::GetList($arOrder, $arFilter, true);

   while($El = $ListEl->Fetch()) {
      
      if ($El['DEPTH_LEVEL'] == 3) :
   
            $arOrder = false;
            $arFilter = Array(
                          "IBLOCK_ID"=>$arParams["IBLOCK_ID"],
                          "IBLOCK_SECTION_ID"=>$El["ID"],
                          );
            $arGroupBy = Array("PROPERTY_INGREDIENTS");
            $arSelectFields = false;
            $ListElements = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, false, $arSelectFields);
            $ElCnt = $ListElements->Fetch();
            print_r($ElCnt);
                  
         $El["ING_EL_CNT"] = $ElCnt['CNT'];
         $arEl[] = $El;
      endif;
   }
   
   $arResult["El"] = $arEl;


считает общее количество элементов в инфоблоке не учитывая разделы

$arGroupBy = Array("PROPERTY_INGREDIENTS"=>31);
пишет Array ( [NOP] => 0 )
что за NOP?

как посоветуете считать?
спросил 31 Март, 14 от Lisica (900 баллов)

3 Ответы

00 голосов
неужели никто никогда не считал элементы в разделе?
ответил 11 Окт, 14 от Lisica (900 баллов)
00 голосов
Нужно сделать правильную выборку (т.е. настроить фильтр) и $obElement->SelectedRowsCount();
ответил 11 Фев, 15 от Lekar (2,220 баллов)
00 голосов
Не забываем про кэширование, если много нужно считать и пересчитывать, то лучше вынести в отдельный скрипт и записывать в определенное место, откуда потом легко выводить.
ответил 23 Май, 15 от Lekar (2,220 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 08 Март, 14 от Ye6aK (220 баллов)
0 голосов
2 ответов
0 голосов
4 ответов
спросил 27 Июль, 13 от Anton6 (160 баллов)
0 голосов
4 ответов
спросил 26 Март, 14 от Merkof (160 баллов)