randomizex
@randomizex
http://resume.web-ivan.ru

Можно ли использовать $APPLICATION->ShowProperty() в коде шаблона компонента?

Если с функциями SetPageProperty, SetTitle и тд все понятно - они просто не будут выполняться при включеном кеше. То с $APPLICATION->ShowProperty() не доконца понимаю, вроде она должна ставить метку которая будет заполняться позднее уже актуальными данными и следовательно в закешироваться а позднее заполниться должна именно метка.

Сейчас мне необходимо перекрашивать меню в шапке в зависимостит от раздела. Я в index.php раздела задаю
$APPLICATION->SetPageProperty('category_style', 'is-red');


ну а в шаблоне компонента
class="top-menu <?$APPLICATION->ShowProperty('category_style', '');?>"


Ожидая что у меня в зависимости от раздела в закешированный компонент подставиться класс. Но у меня вставка с ShowProperty ломает нафиг верстку.
Может быть дело в том что у нас битрикс переводили из win-1251 в utf-8 и там как то не все файлы в utf-8? Или все же дело в том что ShowProperty в шаблоне компонента пользовать нельзя?
У меня почему то стойкая уверенность что данный пример был в экзамене и он решается именно через ShowProperty.

Вытекающий вопрос
Если нельзя пользовать ShowProperty() какой вариант тогда использовать?
1) я конечно могу по $APPLICATION->GetCurDir() определять и отдавать в параметре значение, но меня смушает что будут создаваться разные кеши (фигня конечно).
2) могу вставлять подстроку вида #category_style# и подменять ее значение на событии
'OnEndBufferContent' что еще больше меня смущает.

Вообщем то хочу уже закрыть для себя этот гештальд с отложенными функциями.
Как поступать в таких случаях?
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
alexyarik
@alexyarik
Битрикс разработчик
Такого плана задача есть в экзамене №2 ех2-109 "Изменить фон в шапке"
Вот я уже отвечал на похожий вопрос Как вывести свойство раздела в Битрикс?
Ответ написан
randomizex
@randomizex Автор вопроса
http://resume.web-ivan.ru
Ярослав Александров, Евгений Спасибо, ответ ясен. Просто иногда очень хочется )
Еслиб в этот вызов кешировалась строка которая позднее разбералась перед выводом, и подменялось ее значение уже перед самым выводом (как я думал) я бы получал необходимый эфект. Но как вижу эти функции ShowProperty(), ShowTitle() по другому работают (закрывают текущий буфер создают, еще один для вывода результата функции, далее закрывают его и открывают новый) вообщем вообще не так как я думал. Следовательно при кешировании компонента этого всего не происходит, а получается эфект что кешируется только часть вывода компонента после вызова ShowProperty().

Выводы
1) ShowProperty(), ShowTitle() нельзя использовать в кешируемых частях кода.
2) Либо выносим их использование в шаблон сайта, либо на некешируемые страницы комплексных компонентов (типа detail.php section.php news.php и тд.)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 янв. 2020, в 21:42
5000 руб./за проект
28 янв. 2020, в 21:40
1000 руб./в час
28 янв. 2020, в 20:58
15000 руб./за проект