Телеграм: @camouf_ru Почта: mihail@bazarow.ru Заказать разработку проекта

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

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

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

Просмотров: 769 | Комментариев: 0

Комментарии

Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
 
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Загрузить файл
Нажимая кнопку "Отправить", Вы принимаете условия
Политики конфиденциальности и обработки персональных данных
Поделиться страницей Спасибо, это помогает развивать сайт.
Мой youtube канал. C 1-го сентября начнется выход видеокурса по разработке доски объявлений с мобильным приложением.
Перейти на канал Подписывайтесь и будьте в курсе:
Заметки разработчика

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

attention