Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Вывести информацию, только на первом уровне раздела каталога, в 1С-Битрикс

Просмотров: 5604

Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента подключены в файле section.php комплексного шаблона. Соотвественно, оба фильтра отображаются во всех разделах и подразделах каталога, не зависимо, от грубины вроженности. Нужно отобразить верхний фильтр- только на первых уровнях.

Соответственно, оба фильтра отображаются во всех разделах и подразделах каталога, не зависимо, от глубины врожености. Нужно отобразить верхний фильтр- только на первых уровнях.

Вывести информацию, только на первом уровне раздела каталога, в 1С-Битрикс

Получение самого верхнего родительского раздела инфоблока

Нам нужно определить, является ли текущий раздел, в котором находится пользователь, корневым. Для этого воспользуемся методом CIBlockSection::GetNavChain - возвращает путь по дереву от корня до раздела SECTION_ID

$navChain = CIBlockSection::GetNavChain(
	$arParams["IBLOCK_ID"], 
	$arResult['VARIABLES']['SECTION_ID']
)
while ($arNav = $navChain->Fetch()) {
      var_dump($arNav);
}

Передали параметры из комплексного шаблона ID инфоблока и ID текущего раздела. В var_dump получим всю цепочку разделов, с основными параметрами разделов- начиная с корневого.

Далее: нужно получить ID корневого раздела и сопоставить с текущим. Просто оборвем цикл while на первой итерации, сопоставим разделы и создадим переменную для дальнейшего сравнения.

$navChain = CIBlockSection::GetNavChain(
	$arParams["IBLOCK_ID"], 
	$arResult['VARIABLES']['SECTION_ID']
);
while ($arNav = $navChain->Fetch()) {
	if ($arResult['VARIABLES']['SECTION_ID'] == $arNav['ID']) {
		$itMainSection = true;
	}
break;}

Здесь мы создали переменную $itMainSection при условии если текущий раздел совпал с корневым. Дальше, просто, обворачиваем фильтр в условие.

if ($itMainSection) {
	$APPLICATION->IncludeComponent(
        "bitrix:catalog.smart.filter",
       ...
       	Компонент фильтра
       ...
    );
}

Если переменная $itMainSection существует, значит пользователь находится в корневом разделе и выводится умный фильтр.

Дополнительные поля раздела.

Расширение первоначальной задачи: нужно показывать фильтр во всех разделах, но в некоторых его нужно скрыть. При этом, в пользовательском поле указывается Показывать фильтр Да/Нет. Что бы не проходиться по всем вложенным, достаточно указать этот параметр только у корневого раздела.

В примере выше, метод CIBlockSection::GetNavChain не возвращает пользовательские поля, если нужно выполнить двойную проверку, например: корневой ли раздел и заполнено ли его пользовательское поле. Нужно добавить метод CIBlockSection::GetList получив пользовательские поля.

В примере ниже, выполняется проверка: корневой ли раздел и установлено ли пользовательское поле раздела UF_TOP_FILTER.

$navChain = CIBlockSection::GetNavChain($arParams["IBLOCK_ID"], $arResult['VARIABLES']['SECTION_ID']);
while ($arNav = $navChain->GetNext()) {
    $db_list = CIBlockSection::GetList(array($by => $order),
        $arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ID" => $arNav["ID"]), true,
        $arSelect = array('ID', 'UF_TOP_FILTER'));
    while ($ar_result = $db_list->GetNext()) {
		if ($ar_result['UF_TOP_FILTER'] == true) {
			$itMainSection = true;
		}
    }
break;}

Такой проверки достаточно: в любом подразделе, этого раздела - не зависимо от глубины вложенности, фильтр показываться не будет.

barder 20.03.2022
Что то так сложно все.
Я сделал проще:
Код
if ($APPLICATION->GetCurPage() == $arParams['IBLOCK_URL']){echo "Мы в корне"}
Михаил Базаров 20.03.2022
Цитата
barder пишет:
if ($APPLICATION->GetCurPage() == $arParams['IBLOCK_URL']){echo "Мы в корне"}

Тут немножко сложнее все)
Не в корне каталога, а в корневом разделе - без учета подразделов.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Помечаем новинки лейблом в каталоге битрикс Просмотров: 20877 Достаточно часто, при разработке каталога товаров или интернет магазина на системе управле... Почтовое событие на создание нового элемента инфоблока, через API Просмотров: 15730 Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблок... Как подобрать редакцию Битрикс под задачи Просмотров: 7029 Последнее время, все чаще, при общении с заказчиками, сталкиваюсь с вопросом "— К... Вывести компонент новостей на страницу в Битрикс Просмотров: 65165 Посмотрел Яндекс метрику на свой сайт, и решил что буду частенько писать сюда именно то, ч... Memcached на сайте под управлением битрикс, при использовании Веб Окр... Просмотров: 7838 Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования ... Не дать пользователю купить больше одного товара, в Битрикс Просмотров: 5887 Иногда нужно и такое: Например: на одном из разрабатываемых сайтов, мне нужно было создать... Создание мобильного приложения на cordova, для любого сайта. Просмотров: 15922 Если стоит задача разработки мобильного приложения для сайта, можете воспользоваться данно... Вывести все товары, с постраничной навигацией, из всех разделов инфоб... Просмотров: 29937 По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е... Сортировать товары по названию, цене и дате поступления в каталоге Би... Просмотров: 41136 Достаточно часто заказчик просит вывести сортировку по цене, новым поступлениям и названию... Подключение мобильной версии шаблона Битрикс сайта, с автопереключени... Просмотров: 43410 Предпочитаю, что бы сайт не грузил кучу скриптов и стилей. При загрузке адаптивного шаблон... Автоматически помечаем новинки лейблом в каталоге битрикс Просмотров: 6030 Если вы хотите помечать новинки каталога, вашего магазина на Битрикс, лейблом "Новинка". И... Как вывести свойства инфоблока по отдельности и немного плюшек не в т... Просмотров: 108942 Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании нов... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 29636 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Связанные элементы в карточке товара, с помощью catalog.section Просмотров: 15800 Достаточно часто, при разработке магазинов на битрикс, требуется выводить связанные элемен... Увидеть файл заказов который передаст Битрикс в 1С Просмотров: 24512 Для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей,... FTP доступ на Виртуальной машине Битрикс Просмотров: 17285 Бывает что нужно открыть FTP доступ к заранее известной папке на сайте под управлением 1С ... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 7441 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... Time Capsule на Windows 10. Хранение бекапов Time Machine на компьюте... Просмотров: 7925 Заметку написал скорее для себя, что бы собрать все в одну кучу. Написана на базе нескольк... Пошагово получить информацию о заказах и сохранить как Excel (xls) Просмотров: 1702 Задача: Нужно получить информацию о заказах с возможностью указания даты создания "от"" и ... Вывести товары из того же раздела в карточке товара Просмотров: 18895 Немножко топорный, но все же вполне действенный способ по выводу внутри подробной карточки...