С Новым годом! Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/35: Рейтинг темы: голосов - 35, средняя оценка - 4.80
 Аватар для Genome
9 / 9 / 4
Регистрация: 22.03.2013
Сообщений: 226

Вывод непустых разделов

24.10.2014, 09:00. Показов 7821. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Нужно организовать меню, состоящее из непустых разделов . Есть инфоблок, в нем с десяток разделов, у этих разделов еще по несколько разделов. В тип_меню_ext исполняется такой код:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$aMenuLinksExt = $APPLICATION->IncludeComponent(
    "bitrix:menu.sections",
    "",
    Array(
        "IS_SEF" => "Y", /* использовать ли ЧПУ */
        "SEF_BASE_URL" => "/".explode('/', $APPLICATION->GetCurPageParam())[1]."/",
        "SECTION_PAGE_URL" => "#SECTION_ID#/",
        "IBLOCK_ID" => "6", /* ID инфоблока */
        "DEPTH_LEVEL" => "2", /* уровень вложенности разделов */
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "36000000"
    ),
    false
);
Потом в шаблоне меню, в переборе всех разделов я проверяю, есть ли там элементы, если есть то вывожу его на экран, в ином случае пропускаю итерацию:

PHP
1
2
3
4
5
6
7
8
9
10
11
foreach($arResult as $arItem){
            $rsSections = CIBlockSection::GetList(
                Array(),
                Array("SECTION_ID" => explode('/', $arItem['LINK'])[2]),
                true,
                Array(),
                false
            );
 
            $arSction = $rsSections->Fetch();
            if(intval($arSction['ELEMENT_CNT']) > 0){
Проблема в том, что GetList возвращает false для разделов второго уровня вложенности, а для тех десяти разделов первого уровня работает нормально.

Подскажите пожалуйста как реализовать это для всех уровней вложенности.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2014, 09:00
Ответы с готовыми решениями:

Как организовывается вывод разделов и подразделов
Здравствуйте. Подскажите как правильно организовать вывод моделей товаров или где смотреть. Есть инфоблок "Каталог товаров". В...

Вывод разделов инфоблока через компонент новости. не работает ЧПУ
Здравствуйте форумчане, у меня к вам такой вопрос: Требуется вывести на статической странице информацию из разделов инфоблока. то есть у...

Генерация названия разделов и вывод в них товаров с определенными значениями свойств
В нашем интернет-магазине есть каталог товаров, в котором, например, есть раздел "Продукция" -> "Прожекторы" и он...

3
 Аватар для skremet
66 / 64 / 10
Регистрация: 16.07.2010
Сообщений: 287
24.10.2014, 09:52
Morhpix,
Цитата Сообщение от Morhpix Посмотреть сообщение
"DEPTH_LEVEL" => "2", /* уровень вложенности разделов */
изменить на нужное число.
А вообще в битриксе 4 уровня вложенности меню.
Как заявили в битриксе 4-х уровней вполне достаточно. Так как большее количество вложенности плохо сказывается как на сео так и на юзабилити.

Ждем релиз 15 версии. Посмотрим что нового нам предложет битрикс.
0
 Аватар для Genome
9 / 9 / 4
Регистрация: 22.03.2013
Сообщений: 226
24.10.2014, 17:01  [ТС]
Ну у меня всего два уровня вложенности, я писал об этом, при передачи в GetList "SECTION_ID" первого уровня - возвращает раздел, а если передавать "SECTION_ID" второго уровня вложенности, то false. Соответственно
PHP
1
"DEPTH_LEVEL" => "2", /* уровень вложенности разделов */
указано верно.

Добавлено через 7 часов 1 минуту
Используя CIBlockSection::GetByID() выводятся данные о разделах любого уровня, но вот количество элементов среди этих данных нет.

В CIBlockSection::GetList() выводятся такие данные, если передать третьим параметром bIncCnt=true . А GetByID() не принимает такого параметра. Может кто знает как добиться вывода количества элементов в разделе этим методом ?
0
 Аватар для Genome
9 / 9 / 4
Регистрация: 22.03.2013
Сообщений: 226
30.10.2014, 17:28  [ТС]
Реализовал следующим образом: скопировал компонент menu.sections и подправил в нем component.php

PHP
1
2
3
4
5
6
7
$rsSections = CIBlockSection::GetList($arOrder, $arFilter, true, array(
            "ID",
            "DEPTH_LEVEL",
            "NAME",
            "SECTION_PAGE_URL",
                        "ELEMENT_CNT",
        ));
Тут я добавил "ELEMENT_CNT", и в CIBlockSection::GetList() поменял false на true третьим параметром, который и отвечает за вывод информации о количестве элементов в разделах.

Вот тут еще добавил "ELEMENT_CNT" => $arSection["ELEMENT_CNT"],
PHP
1
2
3
4
5
6
7
8
9
10
11
while($arSection = $rsSections->GetNext())
        {
            $arResult["SECTIONS"][] = array(
                "ID" => $arSection["ID"],
                "DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"],
                "~NAME" => $arSection["~NAME"],
                "~SECTION_PAGE_URL" => $arSection["~SECTION_PAGE_URL"],
                                "ELEMENT_CNT" => $arSection["ELEMENT_CNT"],
            );
            $arResult["ELEMENT_LINKS"][$arSection["ID"]] = array();
        }
И в самом конце "ELEMENT_CNT" =>$arSection["ELEMENT_CNT"],

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
foreach($arResult["SECTIONS"] as $arSection)
{
    if ($menuIndex > 0)
        $aMenuLinksNew[$menuIndex - 1][3]["IS_PARENT"] = $arSection["DEPTH_LEVEL"] > $previousDepthLevel;
    $previousDepthLevel = $arSection["DEPTH_LEVEL"];
 
    $arResult["ELEMENT_LINKS"][$arSection["ID"]][] = urldecode($arSection["~SECTION_PAGE_URL"]);
    $aMenuLinksNew[$menuIndex++] = array(
        htmlspecialcharsbx($arSection["~NAME"]),
        $arSection["~SECTION_PAGE_URL"],
        $arResult["ELEMENT_LINKS"][$arSection["ID"]],
        array(
            "FROM_IBLOCK" => true,
            "IS_PARENT" => false,
            "DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"],
                        "ELEMENT_CNT" =>$arSection["ELEMENT_CNT"],
        ),
    );
}
Все. Параметр будет храниться в $section['PARAMS']['ELEMENT_CNT'].
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2014, 17:28
Помогаю со студенческими работами здесь

Присвоить переменной значение, равное количеству непустых строк непустых в таблице Excel
Нужно переменной присвоить значение, равное количеству строк(непустых) в заданной таблице (xlsx). Как это сделать?

ВЫВОД НЕПУСТЫХ ПОЛЕЙ
Добрый день. Ситуация такая есть 50 полей и мне надо выводить не пустые поля? Вот как сделать так, чтобы в результате запроса он...

вывод непустых значений полей
Помогите, пожалуйста! Бьюсь уже не один день, ничего не получается. В базе имеется таблица, в ней много строк с id от 1 до 140, а в каждой...

Вывод списком непустых значений из массива подряд
Добрый день. Не знаю как решить поставленную задачу: имеется таблица с данными, в листе задание выделена жёлтым, надо перенести...

VBulletin Вывод разделов в 2 колонки
Очень понравился вид этого форума с выводом разделов в 2 колонки, подскажите пожалуйста как это реализовать, или если есть такой хак...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru