В случае когда необходимо отображать информацию только на главной странице, на помощь приходит Bitrix API. Рассмотрим несколько случаев, в которых вам стоит применять подобные проверки.
Вывод информации только на главной странице в Битриксе
Перейдем от долгих вступлений сразу к делу. Собственно код:
<?if($APPLICATION->GetCurPage() == "/"):?> <!-- текст или компонент --> <?endif;?>
Или такой вариант:
<?if($APPLICATION->GetCurPage() == "/index.php"){ #ваш код }?>
Большой разницы быть не должно. Вместо GetCurPage() можем попробовать GetCurDir():
<?if($APPLICATION->GetCurDir() == "/") {}?>
Как отобразить информацию везде кроме главной страницы
В новых шаблона Битрикса встречается следующий вариант:
<?$curPage = $APPLICATION->GetCurPage(true);?> <?if ($curPage != SITE_DIR."index.php"):?> <h1><?=$APPLICATION->ShowTitle(false);?></h1> <?endif?>
Но я обычно использовал в этих случаях более короткую запись
<?if($APPLICATION->GetCurPage() != "/"){?> <?}?>
Какой вариант использовать – это уже на ваше усмотрение.
1С-Битрикс: Как отображать информацию на определенном разделе
Рассмотрим пример, когда нужно показывать информацию не только в разделе ‘catalog’, но и на его внутренних разделах и страницах (то есть, на всех страницах, в урле которых встречается /catalog/):
<? $p1 = "/catalog/"; if (strstr($APPLICATION->GetCurDir(), $p1)) {?> <!-- ваш код --> <?}?>
где $p1 – ваш раздел, а strstr – проверяет первое вхождение подстроки.
ПС – документация PHP рекомендует использовать в таких случаях strpos вместо strstr.
Но есть и нормальное решение 🙂 Но работает исключительно с папками:
<?if(CSite::InDir('/about/')) { }?>
Ну и что касается вывода информации на разделе, можем использовать следующий код:
<?if ($APPLICATION->GetCurDir() == "/catalog/") {?> <!-- ваш код --> <?}?>
Кстати говоря, такого рода проверка, встречалась мне и на других сайтах написанных на 1С-Битрикс. Ее использовали, чтобы задать мета-свойства для разделов, выведенных с помощью модуля новости.
GetCurPage() != “/”){?>
Можно ли этот код использовать для нескольких страниц? Или какой-то другой нужно использовать? Есть, в общем, 4 каталога и 1 страница, где НЕ надо выводить кусок кода. Как это можно реализовать, не сталкивались?
Добрый день. Ну вы можете написать что-то в стиле GetCurPage() != «/» || GetCurPage() != «/catalog/» || GetCurPage() != «/about/actions.php»){?> – используя либо логическое ИЛИ (||) или же используя логическое И (&& – заменить вместо ||). Вообще это такой себе вариант – он рабочий, но я не уверен что это можно отнести к “хорошей практике”. В битриксе, в некоторых случаях, целесообразней использовать разные шаблоны для разных страниц, найти можно в настройках шаблона если вам понадобится подробная инструкция как применять другой шаблон отпишите я вам скрин пришлю 🙂
Да, мне кажется, это было бы очень интересно =) И практичней
Заходите вот сюда #ваш_сайт#/bitrix/admin/site_edit.php?lang=ru&LID=s1
а тут вы выбираете для папки и файла – можно указывать как раздел так и страницу – http://joxi.ru/BA0Qk9TB6p6Rry
также, можно выбрать шаблон который будет применяться к данному “условию”. Всё должно быть довольно просто – вы копируете шаблон, на этой странице – #ваш_сайт#/bitrix/admin/template_admin.php?lang=ru называете его как угодно чтобы можно было найти 🙂 и уже правите header и footer вашего нового шаблона. Если у вас возникнут сложности напишите мне на почту, помогу – dmitriyribka@gmail.com
Спасибо! Сейчас буду пробовать =)
Как правильно вывести условие для всех разделов каталога, кроме элементов
например типа этого:
if ($APPLICATION->GetCurDir() == “/catalog/раздел/возможно_подраздел/”) {}
нужно паттерн. но как правильно написать?
Ответил вам на емейл
Добрый вечер. Дмитрий, а мне также можете подсказать, как прописать такое условие, чтобы каноникал выводился только если мы находимся на странице раздела или подраздела, но не карточки товаров?
в таком случае вам нужно его добавлять либо в файле section.php \ sections.php (в вашем компоненте каталога), либо прописывать код для формирования каноникал в component_epilog.php (для каждого шаблона, для разделов и отдельно для подразделов, в случае, если это разные компоненты). Про каноникал вы можете почитать в этой статье:
https://forwww.com/bitrix-seo-how-to-change-meta-tags/ , но если коротко, то вам нужно использовать:
$APPLICATION->AddHeadString('');
Подскажи как сделать наоборот чтоб не отображался везде, кроме выбранного раздела к примеру /include/././
Чтоб на всех страницах показ а в каталоге и товаре нет?
нужно поставить отрицание в условие, то есть if (!strstr($APPLICATION->GetCurDir(), $p1)) {?>
}?> – ставим восклицательный знак перед функцией strstr
Не подскажите как сделать вывод только в категории на главной странице категории
GetCurDir() == “/catalog/”) {?>
123
Чтобы был вывод только /catalog/ а в дочерних страницах и подкатегориях ничего не было
Стоит отметить, что при использовании CSite::InDir есть ньюанс:
if(CSite::InDir(‘/about/’)) {
// выполнение условия для каталога /about/ и всех его подкаталогов, например /about/contancs/
}
if(CSite::InDir(‘/about/index.php’)) {
// выполнение условия для каталога /about/, а именно страницы index.php в каталоге about
}
Привет!
А как поверить, если мы находимся в карточке продукта?
У меня выводится в карточке в интересном месте. Надо скрыть месте под крошками и вывести в другом. Как сделать? 🙂
Честно говоря и сам не знаю идеального решения, все решения проблемы выглядят так себе :). Попробуйте использовать установку определенного свойства для блока
1. $APPLICATION->SetPageProperty(‘CLASS’,’front’);?> – записываем константу
2.
Dmitriy, подскажите пожалуйста как при задании условия для смены шаблоны через php, привязаться за раздел каталога, в стандартных примерах есть вот такой шаблон на регулярных выражениях preg_match(“#/catalog/\?SECTION_ID=\d+&ELEMENT_ID=\d+#i”,$_SERVER[‘REQUEST_URI’]); который задает условие для элемента каталога, а мне необходим раздел.
если вам нужен 1 раздел = 1 шаблон, то тут все просто. вам нужно выбрать “для папки или файла” и в значении поставить ваш раздел ‘/catalog/section/’.
с выражением PHP все гораздо сложнее – дело в том что на разных компонентах, шаблонах, разделах (в зависимости от того, как разработан и настроен каталог) не всегда есть доступ к таким переменным как SECTION_ID. на примере что вы скинули проверка на гет параметры, а если говорить про ЧПУ то эта формула не сработает.
Здравствуйте Дмитрий! Я очень долго пытаюсь понять, как сделать разные заголовки окна браузера на моих многочисленных страницах сайта в битрикс, чтобы каждый заголовок соответствовал разделу каталога и был уникальным, все мои попытки увенчались восстановлением резервной копии сайта(. Подскажите пожалуйста как мне решить эту проблему… я буду Вам очень благодарна! Спасибо)
Ответил вам на почту
Дмитрий, добрый день. Подскажите пожалуйста.
На странице списка разделов (Услуги) под картинкой для анонса отображается текст с кратким описанием с помощью: . Мне нужно чтобы краткое описание отображалось непосредственно на странице раздела. Логично, нужно добавить в шаблон страницы раздела, что я и сделал. Но описание так и не отображается.
<?
echo "”;
echo var_dump($arResult);
echo “”;
?>
Выводит значение NULL.
В чем косяк?
Добрый день. Возможно вы пытаетесь “распечатать” массив вне компонента. Попробуйте проделать тоже самое, только открыв template.php соответствующего шаблона компонента список разделов
Шаблон самого раздела лежит по адресу: bitrix -> templates -> corporate_s1 -> components -> bitrix -> news.list -> main -> template.php
Шаблон списка разделов: bitrix -> templates -> corporate_s1 -> components -> bitrix -> news -> services -> sections_list.php
в случае с news.list у вас должен быть arResult. а вот sections_list.php надо смотреть код
вот sections_list.php: https://prnt.sc/rltmka
в вашем случае нужно распечатать $arSections, а отдельно каждый раздел в цикле – $arSection
Я за закрытие проектов на битриксе в целом, лучше как разроботчику написать проект на laravel или любой другой cms, bitrix это ужас во всех своих проявлениях от ядра до синхронизации с 1c, с 1с Карл! компания разработчик одного и того же не может сделать нормальную синхронизацию цмс и 1c между собой, обычный бесплатный плагин на wp для вукомерс лучше с этим справляется чем этот битрикс, я как разраб со стажем, что то не особо допру как мне сделать условие исключительно для catalog.element она же карточка товара похоже, для всех товаров, а не одного GetCurDir() == «/catalog/») {?> это мне не тарахтело такой условие, или что то типо такого if(CSite::InDir(‘/about/index.php’)) {, что мозгов у разрабов дописать функцию что то типо того is_single() как в wp
В битриксе есть свои проблемы, как в и любой другой CMS, как и в любом фреймворке. Вместо is_single() – попробуйте посмотреть в сторону отложенных функций
Подскажите пожалуйста, как убрать сайдбар с подключаемыми областями с шаблона главной страницы, что бы контент лег на всю страницу?
Если вы используете купленный шаблон (например, Aspro:Next), то вам поможет такое решение – установить параметр в файле .section.php в корневой папке вашего сайта:
$arDirProperties = array(
“HIDE_LEFT_BLOCK” => “Y”,
);
а где вставлять то этот код, куда?
В header или footer вашего шаблона
Подскажите пожалуйста, после отключение в компоненте inDir, перестали выделяться активные пункты меню, как это можно поправить, не включая inDir?
нужно смотреть код, так сложно подсказать. напишите мне на почту dmitriyribka@gmail.com
Здравствуйте. Подскажите пожалуйста. С помощью этого кода в каталоге и на всех подразделах каталога выводится.
GetCurDir(), $p1)) {?>
А как сделать чтобы только в элементах каталога выводилось?