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

CIBlockSection::GetList только те у которых есть элементы

00 голосов
6
CIBlockSection::GetList только те у которых есть элементы
как ?
спросил 17 Май, 13 от Frejho (580 баллов)

6 Ответы

00 голосов
1 для подсчета кол элементов есть параметр bIncCnt(bool) который добавляет в фильтр нужные поля для постановки условий выборки. Не тестил на практике, но вон ман:
http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getlist.php
В зависимости от вашей задачи используйте нужный фильтр.

2 Для построения древа "left_margin"=>"asc" в сортировку
ответил 17 Май, 13 от Niola (360 баллов)
00 голосов
ещё и потом вывести с полным путём, типа
Секция1 -> Подсекция2 -> Подсекция3 -> Подсекция4

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

CIBlockSection::GetNavChain(IntVal($IBLOCK_ID), IntVal($SECTION_ID))
ответил 17 Май, 13 от Frejho (580 баллов)
00 голосов
Цитата
Dios пишет:
2 Для построения древа "left_margin"=>"asc" в сортировку


мне не нужно дерево, мне нужны только те секции - в которых есть элементы

Например:
Галерея Пользователя - Галерея темы - Альбом Года - Альбом События - Элементы (фотки)

Вот выдавать в список нужно только Альбомы Событий (т.е. где есть элементы)
Секции
"Галерея Пользователя"
"Галерея темы "
"Альбом Года"
в списке не нужны
ответил 30 Июль, 13 от Frejho (580 баллов)
00 голосов
Снова же в arFilter задайте нужное условие. предположительное поле ELEMENT_CNT
Код
$arFilter = array(">=ELEMENT_CNT" => 1);

Получение пути для раздела
Код
$rsPath = CIBlockSection::GetNavChain(
 $IBLOCK_ID,
 $SECTION_ID
);
while($arPath = $rsPath->GetNext())
{
  Вывод шаблона или построение $arResult, смотря где вы используете код.
  Используете print_r($arPath); для того что бы увидеть структуру массива.
  Заключите вывод в тег <pre> для удобочитаемости.
}

http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getnavchain.php


В зависимости от использованного компонента путь может быть уже добавлен в массив информации для шаблона.
photo.sections.top например не добавляет путь в отличии news.list и еще нескольких которые без проверки не буду постить.

Используйте
if ($USER->IsAdmin()){
echo "arResult:";
echo '<pre>'; print_r($arResult); echo '</pre>';

echo "Параметры компонента:";
echo '<pre>'; print_r($arParams); echo '</pre>';
}
Что бы увидеть всю информацию которая дается в шаблоне и как её использовать.

Как вариант в result_modifier.php в шаблоне добавьте цикл с добавлением для разделов пути через CIBlockSection::GetNavChain.
ответил 01 Ноя, 13 от Niola (360 баллов)
00 голосов
Цитата
Снова же в arFilter задайте нужное условие. предположительное поле ELEMENT_CNT


Снова не то -
в моём случае это вложенные секции и все вышележащие по иерархии будут выдавать ELEMENT_CNT подчинённых.

Так если будет 2 вложенных секции и 1 элемент
Секция 1 - Секция 2 - Элемент
то CIBlockSection::GetList с ">=ELEMENT_CNT" => 1 выберет обе, а мне нужно только Секция 2
ответил 06 Фев, 14 от Frejho (580 баллов)
00 голосов
http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getlist.php
поставьте дополнительно "ELEMENT_SUBSECTIONS" => "N"
ответил 27 Май, 14 от unik (2,560 баллов)