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

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

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

<?
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).

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

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

    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. Добрый день, можно воспользоваться поиском по файлам. В любом случае, в коде придётся копаться.

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

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

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

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