Чтобы передать данные, например, из шаблона компонента в шаблон сайта можно воспользоваться функционалом отложенных функций.
ShowViewContent
это обычная отложенная функция такая же как и SetTitle
или SetPageProperty
.
Поэтому вывод контента с помощью ShowViewContent
может быть выше по коду, чем передача самого контента с помощью AddViewContent
или с помощью SetViewTarget
+ EndViewTarget
.
Передаём контент в буферизируемую область:
$APPLICATION->AddViewContent('myContentBlockName', '<p>Hello</p>');
И указываем где нужно выводить содержимое этой буферизируемой области, но только в некешируемой части, например в шаблоне сайта:
$APPLICATION->ShowViewContent('myContentBlockName');
Если не будет выполнено ни одного AddViewContent
, то в месте вывода ShowViewContent
будет пусто.
Если не будет выполнен метод ShowViewContent
, то контент переданный в AddViewContent
не будет выведен нигде.
Если метод ShowViewContent
будет выполнен в разных местах или, например, несколько раз подряд, то контент будет продублирован в каждом из этих мест.
При этом можно добавлять сколько угодно частей контента:
$APPLICATION->AddViewContent('myContentBlockName', '<p>Hello</p>');
$APPLICATION->AddViewContent('myContentBlockName', '<p>World</p>');
$APPLICATION->AddViewContent('myContentBlockName', '<p>!</p>');
Позиционировать выводимые части контента можно с помощью веса (третьего аргумента):
$APPLICATION->AddViewContent('myContentBlockName', '<span>world!</span>', 600);
$APPLICATION->AddViewContent('myContentBlockName', '<span>Hello, </span>', 500);
Как и все отложенные функции AddViewContent
можно использовать только в некешируемой области, т. е. в component_epilog.php
.
Но в шаблоне компонента даже в кешируемой области в файлах template.php
и result_modifier.php
можно использовать методы SetViewTarget
+ EndViewTarget
:
$this->SetViewTarget('myContentBlockName');
?><p>Hello</p><?
$this->EndViewTarget();
Можно комбинировать SetViewTarget
+ EndViewTarget
и AddViewContent
.
Например, в template.php
передаём одну часть:
$this->SetViewTarget('myContentBlockName', 600); // в этом методе тоже есть возможность указать вес (второй аргумент)
?><span>world</span><?
$this->EndViewTarget();
А в component_epilog.php
другую:
$APPLICATION->AddViewContent('myContentBlockName', '<span>Hello, </span>', 500);