ShowViewContent в bitrix

Чтобы передать данные, например, из шаблона компонента в шаблон сайта можно воспользоваться функционалом отложенных функций.

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);