Часто бывает так, что какой-то элемент сайта должен быть только на определённой странице или разделе. Начинающие Битрикс разработчики часто для этих целей просто копируют шаблон. В итоге получается два практически идентичных шаблона с незначительными отличиями. Да, это выход, но, как мне кажется, не совсем правильный, да и гибкости у такого способа никакой. Начинающим разработчикам предлагаю использовать следующий способ.
Будем использовать ни что иное как условие. Например, мы хотим, чтобы какая-то картинка была только на главной странице нашего сайта. Для этого мы просто вставляем следующее условие
<? 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).
Далее мы рассмотрим и другие варианты условий, но так как эта статья для начинающих, для начала этого должно хватить.
Спасибо!
А почему не
$APPLICATION->GetCurPage()=='/'
?вернет true, если главная
Если адрес будет, например «/index.php», то условие
$APPLICATION->GetCurPage()=='/'
вернет false.Здравствуйте!
а есть ограничения на количество условий?
если мне нужно например меню боковое выводить только на страницах товаров?
и таких разделов с товарами у меня 8.
пробую задать для 5 — все хорошо отрабатывает, а для 6го уже белый экран. Думала проблема в синтаксисе. но проверила раз 5 — ошибок нет, но экран белый.
Нет, ограничений на количество условий нет. Белый экран значит, что в настройках сервера у Вас отключен вывод ошибок.
Конечно, в вашем случае я бы действовал иначе. В любом случае, код в студию.
задала условие через другую функцию и все получилось)
но меня заинтересовала ваша приписка «Конечно, в вашем случае я бы действовал иначе». Вы имеете ввиду, что это можно реализовать как-то иначе?
Я вот думала может два шаблона использовать? один на каталог, другой для информационных страниц?
Можно, например, в свойствах раздела указать, что это раздел с товарами и на основе этого условия уже выводить боковое меню. Так выйдет меньше кода.
Второй шаблон не в коем случае делать не надо, это лишнее.
Подскажите, пожалуйста, как в свойствах раздела указать, что это раздел с товарами? в свойствах раздела кроме названия, ключевых слов и прав доступа ничего нельзя указать больше. Или я не там смотрю?
Для начала, эти свойства нужно создать. на странице http://vash_sait.ru/bitrix/admin/settings.php?lang=ru&mid=fileman&mid_menu=1 в разделе»Типы свойств».
Вот здесь можно подробнее прочитать http://dev.1c-bitrix.ru/learning/course/?COURSE_ID=35&LESSON_ID=1929
Спасибо! Попробую использовать, пока не представляю как)
Т к у меня сложный шаблон достаточно. Меню каталога выводить нужно только в кореной сайта, каталоге и подкаталогах, а в карточках товара нет, и на инф.страницах не выводить.
Спасибо!!! Очень помогло, и дальше помогать будет)))
Если нужно наоборот везде кроме главной (к примеру для сквозного сайтбара)
if (CSite::InDir(‘/index.php’)==0)
Я бы сделал так:
if(!CSite::InDir(‘/index.php’))
Спасибо большое! Очень в тему!
А как определить карточку товара? То есть если карточка товара делать то-то
Можно, например, в коде шаблона компонента(bitrix:catalog.element).
А если мне нужно к body добавлять Id таким способом, то есть определять только в шапке?
Тогда помогут отложенные функции.
Подскажите, пожалуйста, как в header.php определить что это либо каталог либо информационная страница либо карточка товара? Я знаю как определить является ли данная страница индексной или нет, а как сделать проверку на другие типы страниц? Спасибо.
Для начала вот тут создаём своё новое свойство в разделе «Типы свойств»
http://ваш_сайт.ru/bitrix/admin/settings.php?mid=fileman&lang=ru
Скорее всего там уже будут типы «description» и «keywords».
На нужных Вам разделах или в определённых компонентах определяем это свойство $APPLICATION->SetPageProperty(«novoe_svoistvo», «значение нового свойства»);?>
Далее в header.php выводим новое свойство так =$APPLICATION->ShowProperty(«novoe_svoistvo»);?>
Дальше простым условием, в зависимости от того какое значение свойству мы проставили можем легко определить каталог это, либо что-то другое.
Нельзя $APPLICATION->ShowProperty() использовать в условиях. Есть другие варианты ?
«Нельзя $APPLICATION->ShowProperty() использовать в условиях.» Можно.
«Есть другие варианты ?» Есть.
Правильно поставленный вопрос — залог верного ответа.
Здравствуйте! А можно как нибудь сделать, что бы html код выводился в категории каталога, а в карточке товара нет?
Конечно можно. Правда, здесь уже придётся редактировать шаблон компонента каталога. В вашем случае это будет section.php
Добрый день.
Подскажите пожалуйста, если мне нужно использовать для главной и всех остальных страниц разный только header.php.
Как мне правильно прописать в header.php, что если сейчас главная страница, то использовать header_index.php, а если нет, то использовать header_inner.php?
И соответственно со стилями, подскажите, как мне лучше сделать под разные header? Если разница будет только в высоте и некоторые пункты во внутренних страницах выключены будут?
Большое спасибо за ответ!
В этом случае можно использовать включаемые области.
https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3246
Либо простые условия «if».
а высоту как отрегулировать?
Через включаемые области ведь не получиться, если я правильно понимаю?
Без подробностей я Вам не помогу.
В общем случае можно через css высоту менять. Нужный css можно, например через «if» подключать.
Здравствуйте! Подскажите, мне нужно делать вывод на нескольких страницах. Например в «/catalog/section1/», «/catalog/section2/». Как правильно написать условие?
if (CSite::InDir('/catalog/')){ ?>В это условие попадёт и «/catalog/section1/» и «/catalog/section2/» } ?>
Здравствуйте!
А если в /catalog/section3/ не нужно, чтобы попало условие? как тогда
if(CSite::InDir('/catalog/') && !CSite::InDir('/catalog/section3/')){
....
}
спасибо
Добрый. А если например нужно выводить код только на разделах и на подразделах . При этом он не должен выводится для элементов этих разделов. Речь о хедере
Если речь идёт об элементах инфоблока, то там другая логика работы, например depth_level смотреть.
В данной статье говорится лишь о разделах и страницах в структуре сайта.
здравствуйте, а как прописать исключение для карточки товара?
/catalog/sobaki/ тут ничего не должно происходить, а например тут /catalog/sobaki/shleyki_s/190641/ скрыть блок?
Здравствуйте. Например, так
if(strpos($APPLICATION->GetCurUri(), '/shleyki_s/190641')!==false){
//скрыть блок
}
Но правильнее, наверное, сделать какое то поле в товаре и по нему уже скрывать либо показывать блок.
В коммерческом предложении не выводятся условия и комментарии ,хотя они заполнены, у нескольких сотрудников. У других они выводятся 2 раза , как исправить?
тут одним предложением не ответить.
Спасибо большое. Очень помогли. Мне нужно было убрать обтекание блока. Я использовал такой кусок кода:
Как НЕ выводить банер в разделах /bike/ и /roller/ ?
if(CSite::InDir('/bike/') || CSite::InDir('/roller/')){ ... }
Добрый день! У меня есть раздел новости и например ряд новостей в детальном просмотре я хочу выводить с другим шаблоном. Как это лучше реализовать: создать доп. поле и по нему ставить условие( если значение задано то выводим, так, а если нет то так ) или есть более простой/ грамотный метод ?
Добрый день, подробно об этом рассказано в курсе Разработчик Bitrix Framework
А подскажите, как отменить разом все ранее добавленные условия на главной странице? чтобы не копаться во всем коде выискивая, что там ещё всплывет.
Добрый день, можно воспользоваться поиском по файлам. В любом случае, в коде придётся копаться.