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

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

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

Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента подключены в файле 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-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Изменить размер картинок на лету в битрикс Просмотров: 46732 Встала задачка: на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздел... Подключение jquery из ядра битрикс и объединение своих скриптов в оди... Просмотров: 19696 Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие г... Привязка к разделам в компоненте "Добавления элементов пользователем" Просмотров: 12032 В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - котор... Вывести артикул в печатную форму бланка заказа Просмотров: 350 Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе. ... Данные о заказе текущего пользователя Просмотров: 12868 Иногда нужно получить данные о заказе текущего пользователя. Не через компонент, а непосре... Рассылка новинок каталога в автоматическом режиме Просмотров: 1145 Что бы реализовать рассылку новинок каталога на email-ы пользователей, можно воспользовать... Пошагово получить информацию о заказах и сохранить как Excel (xls) Просмотров: 505 Задача: Нужно получить информацию о заказах с возможностью указания даты создания "от"" и ... Заполнить картинки разделов каталога из картинок товаров Просмотров: 324 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Добавить свойство в административную форму заказа Просмотров: 2770 Задача, кастомизировать административную форму заказа: добавить свойство заказа в шапку фо... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 6114 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... Получение местоположений через API Битрикс c поиском по select. Просмотров: 21257 Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Би... Вывести список всех пользователей с необходимой информацией Просмотров: 24030 Если нужно, на какой-либо странице сайта, вывести всех пользователей из группы "Зарегистир... Кастомизация компонента восстановления пароля bitrix:system.auth.forg... Просмотров: 24735 Достаточно часто спрашивают как кастомизировать компонент восстановления пароля пользовате... Регистрация пользователя в определенную группу сайта на Битрикс Просмотров: 22043 Достаточно часто требуется регистрировать пользователя в определенную группу, в зависимост... Дать пользователю возможность быстро отредактировать материал Просмотров: 4343 На одном из разрабатываемых сайтов, пользователи формирую его контент. После регистрации, ... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 11506 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв... Создать pdf файл из элемента инфоблока, дать скачать пользователю, по... Просмотров: 3900 Задача: при каждом посещении статьи, на сайте, нужно создавать pdf файл с ее содержимым и ... Получить множественное пользовательское поле раздела. Значения множес... Просмотров: 341 Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно п... Memcached на сайте под управлением битрикс, при использовании Веб Окр... Просмотров: 6908 Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования ... Denwer c PHP 7.1.8 и MYSQL 5.7 оптимизированный для Битрикс Просмотров: 29478 В последнее время, все чаще приходиться работать на Windows, хотя и не люблю эту ОС- с точ...