Условия для определённых страниц или разделов.

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

Проще сначала проверить адрес текущей страницы, а уже потом выводить нужный HTML. В Битрикс для этого есть CSite::InDir().

Что делает CSite::InDir

Метод отвечает на простой вопрос: сейчас мы находимся в этой папке сайта или нет? Если ответ «да», PHP выполняет код внутри условия.

Например, такой фрагмент можно поставить в header.php шаблона сайта. Он покажет картинку только на главной странице:

<?php
if (CSite::InDir('/index.php')) {
    ?>
    <img src="/local/images/home-banner.jpg"
         alt="Баннер на главной странице">
    <?php
}
?>

Путь начинается со слеша и относится к корню сайта. Картинку лучше положить в папку шаблона или /local/, а не оставлять ссылку на случайный внешний сервис.

Страница, раздел и подразделы — это разные проверки

Допустим, на сайте есть раздел /faq/.

  • CSite::InDir('/faq/index.php') — только главная страница раздела /faq/;
  • CSite::InDir('/faq/') — раздел и всё, что лежит внутри него: например, /faq/delivery/;
  • CSite::InDir('/catalog/') — каталог и его подразделы.

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

Пример: разное сообщение в двух местах

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

<?php
if (CSite::InDir('/faq/')) {
    echo '<p class="notice">Ответы на частые вопросы</p>';
} elseif (CSite::InDir('/index.php')) {
    echo '<p class="notice">Добро пожаловать!</p>';
}
?>

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

Где этот код ставить

Обычно условие добавляют в шаблон сайта — header.php, footer.php или файл шаблона компонента. Выбирайте место по задаче: общий баннер — в шаблон сайта, блок списка новостей — в шаблон компонента.

Не правьте ядро Битрикс и файлы стандартного решения напрямую: обновление может всё перезаписать. Сделайте копию шаблона в своём пространстве и меняйте её.

Если вместо страницы пришла 404

Иногда условие нужно не для раздела, а для страницы «не найдено». Здесь лучше проверять именно факт 404, а не пытаться угадать адрес:

<?php
if (defined('ERROR_404') && ERROR_404 === 'Y') {
    echo '<p>Страница не найдена. Попробуйте поиск по сайту.</p>';
}
?>

Проверяйте этот вариант на настоящем несуществующем адресе. Так вы убедитесь, что у сайта корректно настроена 404-страница.

Коротко

CSite::InDir('/раздел/') пригодится, когда блок нужен в разделе и его подразделах. Для одной стартовой страницы раздела укажите /раздел/index.php. Начните с маленького условия, проверьте два-три адреса и не плодите копии шаблона без необходимости.

Статья обновлена 3 октября 2026 года. Метод и примеры сверены с официальной документацией CSite::InDir.

Условия для определённых страниц или разделов.: 48 комментариев

    1. Если адрес будет, например «/index.php», то условие $APPLICATION->GetCurPage()=='/' вернет false.

  1. Здравствуйте!
    а есть ограничения на количество условий?
    если мне нужно например меню боковое выводить только на страницах товаров?
    и таких разделов с товарами у меня 8.
    пробую задать для 5 — все хорошо отрабатывает, а для 6го уже белый экран. Думала проблема в синтаксисе. но проверила раз 5 — ошибок нет, но экран белый.

    1. Нет, ограничений на количество условий нет. Белый экран значит, что в настройках сервера у Вас отключен вывод ошибок.
      Конечно, в вашем случае я бы действовал иначе. В любом случае, код в студию.

      1. задала условие через другую функцию и все получилось)
        но меня заинтересовала ваша приписка «Конечно, в вашем случае я бы действовал иначе». Вы имеете ввиду, что это можно реализовать как-то иначе?
        Я вот думала может два шаблона использовать? один на каталог, другой для информационных страниц?

        1. Можно, например, в свойствах раздела указать, что это раздел с товарами и на основе этого условия уже выводить боковое меню. Так выйдет меньше кода.
          Второй шаблон не в коем случае делать не надо, это лишнее.

          1. Подскажите, пожалуйста, как в свойствах раздела указать, что это раздел с товарами? в свойствах раздела кроме названия, ключевых слов и прав доступа ничего нельзя указать больше. Или я не там смотрю?

  2. Спасибо! Попробую использовать, пока не представляю как)
    Т к у меня сложный шаблон достаточно. Меню каталога выводить нужно только в кореной сайта, каталоге и подкаталогах, а в карточках товара нет, и на инф.страницах не выводить.

  3. Если нужно наоборот везде кроме главной (к примеру для сквозного сайтбара)

    if (CSite::InDir(‘/index.php’)==0)

  4. А как определить карточку товара? То есть если карточка товара делать то-то

      1. А если мне нужно к body добавлять Id таким способом, то есть определять только в шапке?

  5. Подскажите, пожалуйста, как в header.php определить что это либо каталог либо информационная страница либо карточка товара? Я знаю как определить является ли данная страница индексной или нет, а как сделать проверку на другие типы страниц? Спасибо.

    1. Для начала вот тут создаём своё новое свойство в разделе «Типы свойств»
      http://ваш_сайт.ru/bitrix/admin/settings.php?mid=fileman&lang=ru
      Скорее всего там уже будут типы «description» и «keywords».

      На нужных Вам разделах или в определённых компонентах определяем это свойство SetPageProperty(«novoe_svoistvo», «значение нового свойства»);?>

      Далее в header.php выводим новое свойство так ShowProperty(«novoe_svoistvo»);?>

      Дальше простым условием, в зависимости от того какое значение свойству мы проставили можем легко определить каталог это, либо что-то другое.

      1. Нельзя $APPLICATION->ShowProperty() использовать в условиях. Есть другие варианты ?

        1. «Нельзя $APPLICATION->ShowProperty() использовать в условиях.» Можно.
          «Есть другие варианты ?» Есть.

          Правильно поставленный вопрос — залог верного ответа.

  6. Здравствуйте! А можно как нибудь сделать, что бы html код выводился в категории каталога, а в карточке товара нет?

    1. Конечно можно. Правда, здесь уже придётся редактировать шаблон компонента каталога. В вашем случае это будет section.php

  7. Добрый день.
    Подскажите пожалуйста, если мне нужно использовать для главной и всех остальных страниц разный только header.php.
    Как мне правильно прописать в header.php, что если сейчас главная страница, то использовать header_index.php, а если нет, то использовать header_inner.php?
    И соответственно со стилями, подскажите, как мне лучше сделать под разные header? Если разница будет только в высоте и некоторые пункты во внутренних страницах выключены будут?
    Большое спасибо за ответ!

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

        1. Без подробностей я Вам не помогу.
          В общем случае можно через css высоту менять. Нужный css можно, например через «if» подключать.

  8. Здравствуйте! Подскажите, мне нужно делать вывод на нескольких страницах. Например в «/catalog/section1/», «/catalog/section2/». Как правильно написать условие?

      1. Здравствуйте!
        А если в /catalog/section3/ не нужно, чтобы попало условие? как тогда

  9. Добрый. А если например нужно выводить код только на разделах и на подразделах . При этом он не должен выводится для элементов этих разделов. Речь о хедере

    1. Если речь идёт об элементах инфоблока, то там другая логика работы, например depth_level смотреть.
      В данной статье говорится лишь о разделах и страницах в структуре сайта.

  10. здравствуйте, а как прописать исключение для карточки товара?
    /catalog/sobaki/ тут ничего не должно происходить, а например тут /catalog/sobaki/shleyki_s/190641/ скрыть блок?

    1. Здравствуйте. Например, так
      if(strpos($APPLICATION->GetCurUri(), '/shleyki_s/190641')!==false){
      //скрыть блок
      }

      Но правильнее, наверное, сделать какое то поле в товаре и по нему уже скрывать либо показывать блок.

  11. В коммерческом предложении не выводятся условия и комментарии ,хотя они заполнены, у нескольких сотрудников. У других они выводятся 2 раза , как исправить?

  12. Добрый день! У меня есть раздел новости и например ряд новостей в детальном просмотре я хочу выводить с другим шаблоном. Как это лучше реализовать: создать доп. поле и по нему ставить условие( если значение задано то выводим, так, а если нет то так ) или есть более простой/ грамотный метод ?

  13. А подскажите, как отменить разом все ранее добавленные условия на главной странице? чтобы не копаться во всем коде выискивая, что там ещё всплывет.

    1. Добрый день, можно воспользоваться поиском по файлам. В любом случае, в коде придётся копаться.

  14. Добрый день, подскажите как вывести какое-нибудь заметное уведомление на странице товаров определенной категории? Например, есть товары аптечные, которые можно купить и оплатить только в офлайн магазине. Соответственно, на странице этих товаров нужно вывести заметную такую надпись: «Оплата и получение только в офлайн магазине».

    1. Добрый день, тут я бы проверял не по параметру в URL а по какому-нибудь параметру присущему нужной категории.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пожалуйста, докажите, что вы не робот * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.