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

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

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

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

Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне ... Просмотров: 1769 Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении то... Фотогалерея на базе компонента новостей, с fancybox. Просмотров: 2906 Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогал... Быстрая отписка от всех рассылок модуля "E-mail маркетинг", в кабинет... Просмотров: 277 Задача: дать пользователям возможность отписаться от всех рассылок "E-mail маркетинга", не... Если предложение SKU в корзине, поменять кнопку добавления на "В корз... Просмотров: 3881 Данная заметка является дополнением к ранее опубликованной: Есл... Цвета торговых предложений из Highload инфоблоков в списке товаров Просмотров: 14905 Подвернулся на доработку очень старый сайт, работал еще на 11-ой версии Битрикс. Выполнили... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 16130 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Ajax форма обратной связи, реализация в битрикс Просмотров: 8680 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Пункты меню из разделов инфоблока Битрикс Просмотров: 93234 В принципе это стандартная возможность системы управления битрикс, но почему-то часто спра... Вывод элементов с помощью API битрикс Просмотров: 23961 Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Нап... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 12750 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Дополнительные картинки в новостях Битрикс, почти фотогалерея. Просмотров: 49498 Частенько стоит задача, по мимо стандартных "Картинка для анонса" и "Деталь... Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: И... Просмотров: 3430 В этой заметке расскажу как настроить синхронизацию между 1С:предприятие и "1С-Битрикс24: ... Как работает система сертификации партнеров 1С-Битрикс, уровни партне... Просмотров: 4471 Сертификация от «1С-Битрикс» – это объективная оценка знаний и практических навыков разраб... Если товар в корзине, поменять значение input на "В корзине" Просмотров: 11092 Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользо... Вывести компонент новостей на страницу в Битрикс Просмотров: 65106 Посмотрел Яндекс метрику на свой сайт, и решил что буду частенько писать сюда именно то, ч... Заполнить картинки разделов каталога из картинок товаров Просмотров: 943 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Fancybox в стандартном шаблоне детальной карточки товара, вместо вспл... Просмотров: 104 Задача: заменить работу с изображениями в стандартном или кастомном шаблоне детальной карт... Удалить товары из корзины, если есть определенные товары. Просмотров: 1914 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Получить все товары из всех заказов пользователя. История купленных т... Просмотров: 2216 Задача: нужно создать раздел, в персональном разделе пользователя, с историей всех купленн... Отключить поиск по описаниям товаров в Битрикс Просмотров: 11844 Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разр...