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

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

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

<?
if (CSite::InDir('/index.php')){
        ?>картинка, которая будет только на главной<?
}
?>

на месте «вашей картинки» вставляете html код, который должен быть только на главной странице. Если хотите, чтобы условие было для раздела /faq, то просто вместо

CSite::InDir('/index.php')

вставьте

CSite::InDir('/faq/index.php')

Если требуется, чтобы условие включало и подразделы(например «/faq/q1»), то пишем

CSite::InDir('/faq/')

Этот код можно использовать в шаблоне сайта(header.php, footer.php), в шаблоне компонента(templte.php) и на самой странице(index.php).

Далее мы рассмотрим и другие варианты условий, но так как эта статья для начинающих, для начала этого должно хватить.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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