Если папка то применяем, проверка текущего раздела или подраздела

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

Иногда требуется применить особый стиль к определённой директории сайта или управлять выводом элементов на странице в зависимости от текущего URL. Для этого в 1С-Битрикс можно использовать встроенные методы, такие как CMain::GetCurPage или CSite::InDir. Эти методы помогают определять текущий путь или каталог, а затем использовать его для динамического изменения верстки или стилей. Рассмотрим несколько примеров.

Метод CMain::GetCurPage

Метод CMain::GetCurPage возвращает путь к текущей странице без параметров. Это полезно, когда нужно применить стили или выполнить определённый код на конкретной странице.

Пример: Предположим, задача — применить класс для элемента

  • в разделе /company/. Если пользователь находится в директории /company/, элементу будет присвоен класс company, на всех остальных страницах будет применяться класс nocompany.

    
    <li <?if ($APPLICATION->GetCurDir()=='/company/'):?>class="company"<?else:?> class="nocompany"<?endif;?>>
        содержимое
    </li>
    

    Условие для вложенных директорий

    Метод CSite::InDir позволяет применить условие не только для конкретной директории, но и для всех её поддиректорий.

    Пример: Если требуется активировать класс для каталога /metalworking/ и всех его подкаталогов:

    <li <?if(CSite::InDir('/metalworking/')):?>class="active"<?endif;?> class="noactive">

    Пример для исключения aside в определённых разделах

    Представим ситуацию, где на сайте несколько разделов имеют одноколоночную верстку, и нужно не выводить боковую колонку aside в этих разделах.

    <?if ( 
    	($APPLICATION->GetCurDir()=='/designes/ready-made-html-layouts/')
    	|| ($APPLICATION->GetCurDir()=='/designes/adaptive-html/')
    	 || ($APPLICATION->GetCurDir()=='/portfolio/')
    	|| ($APPLICATION->GetCurDir()=='/forum/')
     ):?>

    Здесь важно не злоупотреблять такими конструкциями, поскольку при большом количестве условий код становится сложным для понимания и поддержки.

    В данном примере эффективнее было бы создать и применять параметр разделов из настроек модуля "Управление структурой".

    Определение уровня раздела в каталоге

    Если нужно применить условие для определённого уровня каталога, можно воспользоваться переменной $arResult["SECTION"]["DEPTH_LEVEL"], которая указывает глубину текущего раздела.

    Пример: Для каталога уровней 1 или 2 можно применить следующую конструкцию:

    <?if(
        ($arResult["SECTION"]["DEPTH_LEVEL"]==1) || 
        ($arResult["SECTION"]["DEPTH_LEVEL"]==2)
    ):?>
        
    <?endif;?>

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

  • Леонид 08.02.2015
    Здравствуйте Михаил! Подскажите как сделать чтоб слайдер не показывался во все разделах каталога?
    Я использовал ваш код
    Код
    "<?if ( 
    ($APPLICATION->GetCurDir()=='/designes/ready-made-html-layouts/') 
    || ($APPLICATION->GetCurDir()=='/designes/adaptive-html/') 
    || ($APPLICATION->GetCurDir()=='/portfolio/') 
    || ($APPLICATION->GetCurDir()=='/forum/') 
    ):?>"
    , но т.к. в каталоге очень много разделов, не очень удобно каждый выписывать в код. Как сделать проще? :\
    Михаил Базаров 08.02.2015
    Вместо == (равно) используйте !== (не равно)
    Кирилл 30.12.2016
    Здравствуйте!
    Подскажите, пожалуйста, какое нужно написать условие, чтобы показывать в шаблоне определённый блок, только когда находишься на странице элемента каталога (странице товара), но не в разделах каталога.
    Или наоборот, условие, чтобы скрыть определённый блок шаблона только когда находишься в разделах каталога, а на всех остальных страницах показывать блок, включая страницы элемента каталога (страницы товаров).
    Михаил Базаров 30.12.2016
    В данной ситуации лучше использовать не условия, а прямо в шаблоне компонента каталога выводить или не выводить блок
    в файлах section.php и sections.php - это разделы и топ
    element.php - это карточка товара

    Так наиболее эффективно и грамотно
    taa@webstripe.ru 21.08.2020
    Здравствуйте.
    Как сделать, что бы определенный элемент не появлялся(отображался) на главной И в одной директории?
    if ($APPLICATION->GetCurPage() != '/')) { элемент } - не отображает на главной
    Как приписать в CSite::InDir('/service/')) , так что бы в них не отображался элемент.
    if ($APPLICATION->GetCurPage() != '/' and CSite::InDir('/service/')) - думал так, но тут логика не правильная, надо что бы во втором условии было "нет".  
    Михаил Базаров 21.08.2020
    Если элемент инфоблока- думаю проще через глобальный фильтр. Типа того
    Код
    $GLOBALS['arrFilter'] = array('!ID' => 12);
    
    Гость 29.09.2024
    Рабочий вариант:
    Код
    <? $Dir = $APPLICATION->GetCurDir(); if ($Dir === "/test/" || $Dir === "/news/"):?>
    Текст
    <?endif;?>

    А как сделать для всех подпапок в папке news? Не получается ))
    Михаил Базаров 30.09.2024
    Код
    <? if (CSite::InDir('/news/')): ?>
        Текст
    <? endif; ?>

    Блог-note: заметки разработчика

    Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента

    Задача: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особенность конкретной 1С, но во...

    Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне 1С-Битрикс

    Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении товара в корзину в старых шаблон...

    Очистить брошенные корзины с помощью API 1С-Битрикс

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

    Цвета из справочника Highload блоков в списке новостей

    На сайте выводятся новости с помощью компонента news.list, при этом у новостей есть свойство "Цвета" типа &quo...

    Запретить указание количества товаров, добавляемого в корзину, в определенных разделах каталога.

    Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, в определенных разделах катало...

    Почтовое событие на создание нового элемента инфоблока, через API

    Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблока простыми пользователям.Будет...

    Заполнение множественного пользовательского свойства типа "строка" через API

    Задача: когда пользователь заходит в мобильное приложение, нужно сохранить FCM токен устройства в пользовательское поле ...

    Ссылка и название раздела в списке новостей Битрикс

    Если нужно вывести название раздела инфоблока в котором находится конкретный элемент/новость в компоненте "списк новосте...

    Перенос Битрикс сайта с хостинга на хостинг, инструкция

    Достаточно часто спрашивают как перенести сайт работающий на 1С Битрикс с одного хостинга на другой, как раз подвернулас...