Меню

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

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

Иногда требуется применить особый стиль к определённой директории сайта или управлять выводом элементов на странице в зависимости от текущего 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; ?>

    Стоимость и сроки разработки сайтов и приложений

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

    Интернет магазин: разработка с нуля от 350 000 руб.
    от 4-х недель

    Cоздание интернет-магазина на 1С-Битрикс. Разработка с нуля, оптимизация кода под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

    Интернет-магазин на готовом решении от 100 000 руб.
    от 7-ми дней

    Готовое решение — вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Запускается на одном из 200-та (на ваш выбор) готовых решений.

    Мобильное приложение от 400 000 руб.
    от 1-го месяца

    Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

    Опросник на разработку. После ознакомления, задам уточняющие вопросы и оценю проект по стоимости и срокам разработки.