Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

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

Просмотров: 30407

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

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

mtsub 12.10.2017
как передать в письмо URL страницы на которой был задан вопрос, код $arFields["PAGE_URL"] = $APPLICATION->GetCurPage(); не срабатывает? В моём случае используется Тип почтового события: Заполнена web-форма "SIMPLE_FORM_2" [FORM_FILLING_SIMPLE_FORM_2]
mtsub 12.10.2017
- через init.php
mtsub 12.10.2017
сам код:
<?
AddEventHandler('main', 'OnBeforeEventSend', Array("MyForm", "my_OnBeforeEventSend" ;) );
class MyForm
{
   function my_OnBeforeEventSend(&$arFields)
   {
       $arFields["TEST1"] = $APPLICATION->GetCurPage();
       //#TEST1#
   }
}
?>
Михаил Базаров 13.10.2017
Цитата
mtsub написал:
сам код:
<?
AddEventHandler('main', 'OnBeforeEventSend', Array("MyForm", "my_OnBeforeEventSend"  );
class MyForm
{
   function my_OnBeforeEventSend(&$arFields)
   {
       $arFields["TEST1"] = $APPLICATION->GetCurPage();
       //#TEST1#
   }
}
?>
Наверное проще, в форме создать input невидимый и в него передать заголовок или адрес страницы.
Не всегда, нужно захламлять init.php - если моно обойтись- лучше обойтись
mtsub 13.10.2017
Цитата
Михаил Базаров пишет:
Наверное проще, в форме создать input невидимый и в него передать заголовок или адрес страницы.
Не всегда, нужно захламлять init.php - если моно обойтись- лучше обойтись
- а как код должен выглядеть, если не сложно, напишите, понимаю, что код элементарный))
slava.jax 28.12.2017
Цитата
Леонид пишет:
Цитата
Михаил Базаров пишет:
Цитата
Леонид пишет:
Здравствуйте Михаил! Подскажите как сделать чтоб слайдер не показывался во все разделах каталога?
Я использовал ваш код "<?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 06.03.2019
Михаил почему так работает:
Код
<?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; ?> 

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

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Умный фильтр во всплывающей панели на мобильных. Просмотров: 2358 Шаблон умного фильтра в Битриксе достаточно сложный, с точки зрения верстки и не очень кра... Композитный сайт на 1С-Битрикс Просмотров: 3600 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Массово: применить наценку ко всем товарам каталога с пересчетом от б... Просмотров: 6372 Рассмотрим как, в магазине работающем на 1С-битрикс, массово применить наценку на все това... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 8715 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Показ страницы сайта в боковом слайдере, на примере всплывающей формы... Просмотров: 3204 Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битри... Простые калькуляторы в карточке товара каталога на Битрикс Просмотров: 16176 На одном из создаваемых сайтов было необходимо сделать небольшой калькулятор и предварител... Простой WEB сервер на ubuntu, для Битрикс Просмотров: 35932 Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких ngi... Наличие на складах в умном фильтре 1С-Битрикс, с автоматическим обнов... Просмотров: 1116 Задача: добавить возможность фильтрации товаров по складам в умном фильтре. Данные должны ... Запретить указание количества товаров, добавляемого в корзину, в опре... Просмотров: 83 Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, ... Малая корзина Битрикс, упрощенный шаблон Просмотров: 13606 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Список новостей с автопрокруткой через overflow:scroll Просмотров: 6137 Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточн... Хостинг панель BrainyCp: оптимизация под 1С-битрикс Просмотров: 8131 В этой видео-заметке расскажу как установить и оптимизировать панель управления сервером B... Глобальные фильтры на всякие случаи жизни Просмотров: 47105 Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива... Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт Просмотров: 18107 При разработке сайтов на Битрикс, с интеграцией с 1С Управление Тороговлей, нужно запретит... Открытие мобильного приложения Apache Cordova по ссылке Просмотров: 1186 Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: п... Как вывести свойства инфоблока по отдельности и немного плюшек не в т... Просмотров: 108813 Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании нов... Как вывести картинки к разделам на базе _ext меню Просмотров: 7642 Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. ... Вывести разделы инфоблока в которых находится элемент Битрикс Просмотров: 17017 Если нужно в карточке товара или новости, вывести структуру разделов в котором находится э... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 18758 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Проверка на наличие элементов, текущего пользователя, в заданном инфо... Просмотров: 6171 Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно во...