Если папка то применяем...в Битрикс

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

Итак согласно документации Битрикс:

string CMain::GetCurPage(bool get_index_page=null)
Возвращает путь к текущей странице относительно корня без параметров.

Как нам это может пригодится:
Задача применить класс для li.company в разделе /company/ при этом на любой другой для этогоже li должен применяться li.nocompany

 <li <?if ($APPLICATION->GetCurDir()=='/company/'):?>class="company"<?else:?> class="nocompany"<?endif;?>>содержимое</li>

Расшифровываю:

<li <если дирректория равно '/company/') применяем class="company", иначе применяем class="nocompany">

Элементарщина в общем.

Добавлено:

GetCurDir позволяет применить условие для каталога, если нужно применить для каталога и всех внутренних подкаталогов, можно воспользоваться if(CSite::InDir():

<li <?if(CSite::InDir('/metalworking/')):?>class="active"<?endif;?> class="noactive">

Пример из реальной жизни: на моем сайте часть разделов (портфолио, форум, дизайн) имеет одноколоночную верстку, дабы не плодить отдельные шаблоны, я просто указал в каких разделах не выводить aside

<?if (
($APPLICATION->GetCurDir()=='/designes/ready-made-html-layouts/')
|| ($APPLICATION->GetCurDir()=='/designes/adaptive-html/')
|| ($APPLICATION->GetCurDir()=='/portfolio/')
|| ($APPLICATION->GetCurDir()=='/forum/')
):?>

По хорошему, злоупотреблять этим не стоит, так как после вас мало кто разберется в верстке если условий будет очень много. Приходилось сталкиваться с реализацией шаблона который проще переверстать нежели разобраться как эта хрень вообще работает. (накипело)

Определяем текущий уровень раздела в каталоге

Если нужно назначить некое условие для заранее заданного уровня подраздела в каталоге Битрикс, можно воспользоваться вот таким условием

<?if( //если текущей уровень каталога 1 или 2
($arResult["SECTION"]["DEPTH_LEVEL"]==1)
||($arResult["SECTION"]["DEPTH_LEVEL"]==2)
):?>

Должно произойти вот это

<?endif;?>

По просьбе читателя добавляю: Отсчет разделов начинается с 0 а не с 1

Просмотров: 26199 | Комментариев: 21
Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Загрузить файл
Нажимая кнопку "Отправить", Вы принимаете условия
Политики конфиденциальности и обработки персональных данных
Дмитрий
А как выглядит код не для категории, а для страницы сайта ?
Имя Цитировать
Михаил Базаров
Цитата
Дмитрий пишет:
А как выглядит код не для категории, а для страницы сайта ?
Код
  
 
<?if ($APPLICATION->GetCurPage()=='/catalog/index.php'):?>ЧТО-ТО ЧТО ХОТИМ ВЫВЕСТИ<?else:?>Что-то что иначе<?endif;?>  
[CODE][/CODE]
Имя Цитировать
Алексей
А как определить текущий уровень раздела каталога из файла section.php (файл из комплексного каталога)? Там в $arResult не хранится DEPTH_LEVEL.
Имя Цитировать
Леонид
Здравствуйте Михаил! Подскажите как сделать чтоб слайдер не показывался во все разделах каталога?
Я использовал ваш код "<?if (
($APPLICATION->GetCurDir()=='/designes/ready-made-html-layouts/')
|| ($APPLICATION->GetCurDir()=='/designes/adaptive-html/')
|| ($APPLICATION->GetCurDir()=='/portfolio/')
|| ($APPLICATION->GetCurDir()=='/forum/')
):?>" , но т.к. в каталоге очень много разделов, не очень удобно каждый выписывать в код. Как сделать проще? :\
Имя Цитировать
Михаил Базаров
Цитата
Леонид пишет:
Здравствуйте Михаил! Подскажите как сделать чтоб слайдер не показывался во все разделах каталога?
Я использовал ваш код "<?if (
($APPLICATION->GetCurDir()=='/designes/ready-made-html-layouts/')
| ($APPLICATION->GetCurDir()=='/designes/adaptive-html/')
| ($APPLICATION->GetCurDir()=='/portfolio/')
| ($APPLICATION->GetCurDir()=='/forum/')
):?>" , но т.к. в каталоге очень много разделов, не очень удобно каждый выписывать в код. Как сделать проще?
Вместо == (равно) используйте !== (не равно)
Имя Цитировать
Леонид
Цитата
Михаил Базаров пишет:
Цитата
Леонид пишет:
Здравствуйте Михаил! Подскажите как сделать чтоб слайдер не показывался во все разделах каталога?
Я использовал ваш код "<?if (
($APPLICATION->GetCurDir()=='/designes/ready-made-html-layouts/')
| ($APPLICATION->GetCurDir()=='/designes/adaptive-html/')
| ($APPLICATION->GetCurDir()=='/portfolio/')
| ($APPLICATION->GetCurDir()=='/forum/')
):?>" , но т.к. в каталоге очень много разделов, не очень удобно каждый выписывать в код. Как сделать проще?
Вместо == (равно) используйте !== (не равно)
Спасибо! Нашел еще решение: (CSite::InDir('/catalog')
Имя Цитировать
Василий
Михаил подскажите, у меня есть раздел каталог у которого есть страницы авио, ж/д, как мне  вывести определённое меню для этих страниц?
Имя Цитировать
Михаил Базаров
Цитата
Василий написал:
Михаил подскажите, у меня есть раздел каталог у которого есть страницы авио, ж/д, как мне  вывести определённое меню для этих страниц?
Нужно, конечно, вашу задачу понимать полнее- но в данном случае, сподручнее через catalog.section.list сделать
Имя Цитировать
Василий
Михаил, а можно примерчик, какой нибудь, чтобы яснее было
Имя Цитировать
Игорь Бойко
Код
<?if( //если текущей уровень каталога 1 и 2 
($arResult["SECTION"]["DEPTH_LEVEL"]==1) 
||($arResult["SECTION"]["DEPTH_LEVEL"]==2) 
):?> 

Должно произойти вот это 

<?endif;?>
 
Тут можно бы на всякий случай уточнить, что уровни начинаются с 0, а не с 1.
Имя Цитировать
Кирилл
Здравствуйте!
Подскажите, пожалуйста, какое нужно написать условие, чтобы показывать в шаблоне определённый блок, только когда находишься на странице элемента каталога (странице товара), но не в разделах каталога.
Или наоборот, условие, чтобы скрыть определённый блок шаблона только когда находишься в разделах каталога, а на всех остальных страницах показывать блок, включая страницы элемента каталога (страницы товаров).
Имя Цитировать
Михаил Базаров
Цитата
Кирилл написал:
Здравствуйте!
Подскажите, пожалуйста, какое нужно написать условие, чтобы показывать в шаблоне определённый блок, только когда находишься на странице элемента каталога (странице товара), но не в разделах каталога.
Или наоборот, условие, чтобы скрыть определённый блок шаблона только когда находишься в разделах каталога, а на всех остальных страницах показывать блок, включая страницы элемента каталога (страницы товаров).
В данной ситуации лучше использовать не условия, а прямо в шаблоне компонента каталога выводить или не выводить блок
в файлах section.php и sections.php - это разделы и топ
element.php - это карточка товара

Так наиболее эффективно и грамотно
Имя Цитировать
Илья
Добрый день, Михаил
есть вот такое условие:

<?if(CSite::InDir('/katalog/')):?>

<?else:?>

<?$APPLICATION->IncludeComponent(
"bitrix:news.list",
"news_right",
array(
"DISPLAY_DATE" => "Y",
и.т..д
как в  'if  добавить в условие еще одну страницу чтоб и на ней не показывались новости???'
спасибо!
Имя Цитировать
Михаил Базаров
Цитата
Илья написал:
Добрый день, Михаил
есть вот такое условие:

 <?if(CSite::InDir('/katalog/')):?>

<?else:?>

<?$APPLICATION->IncludeComponent(
"bitrix:news.list",
"news_right",
array(
"DISPLAY_DATE" => "Y",
и.т..д
как в  'if  добавить в условие еще одну страницу чтоб и на ней не показывались новости???'
спасибо!
Код
<?if( (CSite::InDir('/katalog/')) || (CSite::InDir('/news/')) ):?> 
Имя Цитировать
mtsub
как передать в письмо URL страницы на которой был задан вопрос, код $arFields["PAGE_URL"] = $APPLICATION->GetCurPage(); не срабатывает? В моём случае используется Тип почтового события: Заполнена web-форма "SIMPLE_FORM_2" [FORM_FILLING_SIMPLE_FORM_2]
Имя Цитировать
mtsub
- через init.php
Имя Цитировать
mtsub
сам код:
<?
AddEventHandler('main', 'OnBeforeEventSend', Array("MyForm", "my_OnBeforeEventSend" ;) );
class MyForm
{
   function my_OnBeforeEventSend(&$arFields)
   {
       $arFields["TEST1"] = $APPLICATION->GetCurPage();
       //#TEST1#
   }
}
?>
Имя Цитировать
Михаил Базаров
Цитата
mtsub написал:
сам код:
<?
AddEventHandler('main', 'OnBeforeEventSend', Array("MyForm", "my_OnBeforeEventSend"  );
class MyForm
{
   function my_OnBeforeEventSend(&$arFields)
   {
       $arFields["TEST1"] = $APPLICATION->GetCurPage();
       //#TEST1#
   }
}
?>
Наверное проще, в форме создать input невидимый и в него передать заголовок или адрес страницы.
Не всегда, нужно захламлять init.php - если моно обойтись- лучше обойтись
Имя Цитировать
mtsub
Цитата
Михаил Базаров пишет:
Наверное проще, в форме создать input невидимый и в него передать заголовок или адрес страницы.
Не всегда, нужно захламлять init.php - если моно обойтись- лучше обойтись
- а как код должен выглядеть, если не сложно, напишите, понимаю, что код элементарный))
Имя Цитировать
slava.jax
Цитата
Леонид пишет:
Цитата
Михаил Базаров пишет:
Цитата
Леонид пишет:
Здравствуйте Михаил! Подскажите как сделать чтоб слайдер не показывался во все разделах каталога?
Я использовал ваш код "<?if (
($APPLICATION->GetCurDir()=='/designes/ready-made-html-layouts/')
| ($APPLICATION->GetCurDir()=='/designes/adaptive-html/')
| ($APPLICATION->GetCurDir()=='/portfolio/')
| ($APPLICATION->GetCurDir()=='/forum/')
):?>" , но т.к. в каталоге очень много разделов, не очень удобно каждый выписывать в код. Как сделать проще?
Вместо == (равно) используйте !== (не равно)
Спасибо! Нашел еще решение: (CSite::InDir('/catalog')
В принципе как вариант, можно использовать define
Имя Цитировать
Alexey Klyonin
Михаил почему так работает:
Код
<?if ( 
($APPLICATION->GetCurDir()=='/otdykh-u-ivanycha/') 
|| ($APPLICATION->GetCurDir()=='/otdykh-u-ivanycha/banya-1/') 
):?>
   Действие
<?endif; ?> 
так, не работает:
Код
<?if ( ($APPLICATION->GetCurDir()!='/otdykh-u-ivanycha/')   
|| ($APPLICATION->GetCurDir()!='/otdykh-u-ivanycha/banya-1/') 
):?>
   Действие
<?endif; ?> 
а так, тоже работает:
Код
<?if ( ($APPLICATION->GetCurDir()!='/otdykh-u-ivanycha/')   

):?>
   Действие
<?endif; ?> 
или так:
Код
<?if (($APPLICATION->GetCurDir()!='/otdykh-u-ivanycha/banya-1/') 
):?>
   Действие
<?endif; ?> 

Условие != через || не работает, а по одиночке работает. В чём может быть причина?  
Имя Цитировать
Михаил Базаров
Цитата
Alexey Klyonin написал:
!=
Попробуй !==
Имя Цитировать
taa@webstripe.ru
Здравствуйте.
Как сделать, что бы определенный элемент не появлялся(отображался) на главной И в одной директории?
if ($APPLICATION->GetCurPage() != '/')) { элемент } - не отображает на главной
Как приписать в CSite::InDir('/service/')) , так что бы в них не отображался элемент.
if ($APPLICATION->GetCurPage() != '/' and CSite::InDir('/service/')) - думал так, но тут логика не правильная, надо что бы во втором условии было "нет".  
Имя Цитировать
Михаил Базаров
Цитата
taa@webstripe.ru написал:
Здравствуйте.
Как сделать, что бы определенный элемент не появлялся(отображался) на главной И в одной директории?
if ($APPLICATION->GetCurPage() != '/')) { элемент } - не отображает на главной
Как приписать в CSite::InDir('/service/')) , так что бы в них не отображался элемент.
if ($APPLICATION->GetCurPage() != '/' and CSite::InDir('/service/')) - думал так, но тут логика не правильная, надо что бы во втором условии было "нет".  
Если элемент инфоблока- думаю проще через глобальный фильтр. Типа того
Код
$GLOBALS['arrFilter'] = array('!ID' => 12);
Имя Цитировать

Цены на разработку сайта или приложения

Что бы узнать точные стоимость и срок разработки:
достаточно, как можно подробнее, заполнить опросник и выслать на электронную почту info@bazarow.ru.
После ознакомления, смогу задать уточняющие вопросы и оценить.

В стоимость разработки уже включены и не требуют доплат:
  • Лицензия на необходимую редакцию 1С-Битрикс: Управление сайтом и лицензии на дополнительные модули, если требуются для конкретного проекта.
  • Применение технологии композитный сайт: Оптимизация скорости работы проекта под нагрузками.
  • Один год, бесплатной, технической поддержки от 1С-Битрикс
Интернет-магазин от 250 000 рублей
Полно-комплексная разработка интернет-магазина любой сложности. Интеграция с 1С, службами доставки и оплаты. Внутренняя СЕО оптимизация перед запуском.
Сайт компании от 200 000 рублей
Сайт с каталогом товаров или услуг, без функционала магазина. Включает формы обратной связи внутри карточек каталога. Любое количество статичных и динамичных разделов.
Инфоресурс от 200 000 рублей
Портал или доска объявлений с большим количеством разделов. Возможность включения форумов, блогов, регистрации пользователей, внутри сайтовая социальная сеть.
Сайт на готовом решении от 40 000 рублей
Подбор решения из более 200-от готовых сайтов, в соответствии с тематикой бизнеса. Запуск сайта на сервере или хостинге, со всеми настройками. Не большие доработки под задачу.
Мобильное приложение от 200 000 рублей

Кроме сайтов, занимаюсь разработкой мобильных приложений на технологии Apache Cordova. Это полноценные приложения, которые публикуются и распостранияются через официальные магазины GooglePlay и AppStore

  • Полная интеграция с базой данных, основного сайта.
  • Вывод каталогов продукции и услуг, прямо в приложении.
  • Персональные разделы пользователей с историей заказов.
  • Прямой доступ к устройству: GPS, камера, звонки и медиабиблиотека

attention