Иногда часть информации нужно разместить вне компонента где она вычисляется, например — в боковой колонке. В Битриксе передача данных между компонентами затруднена, но есть несколько способов.
- ShowViewContent
Один из них — метод CMain::ShowViewContent.
В темплейте исходного компоненте перед созданием контента пишем:
$this->SetViewTarget('sidebar');
Далее — формирум данные для вывода.
Завершаем блок командой$this-> EndViewTarget();
В результате наши данные сформированы, но пока нигде не отображаются.
Для вывода созданного фрагмента в header или footer размещаем вызов контента:$APPLICATION->ShowViewContent("sidebar");
- AddViewContent
<?$this->SetViewTarget("sidebar");?> <div class="element-filter"> <!--вывод фильтра --> </div> <?$this->EndViewTarget();?>
CMain::AddViewContent( view, content, pos = 500) позволяет вывести контент в пароизвольной области. view — идентификатор буферизируемой области. Идентификатору может соответствовать несколько буферов. Последовательность вывода контента определяется сортировкой pos. Пример:if(!isset($_REQUEST["ajax"])) $this->SetViewTarget("sidebar"); $APPLICATION->IncludeComponent( "bitrix:catalog.smart.filter", "", array(...), false ); if(!isset($_REQUEST["ajax"])) $this->EndViewTarget("sidebar");
в темплейте вызываем через$APPLICATION->ShowViewContent('sidebar');
- Использование this
<h1><?=$APPLICATION->ShowTitle();?><?$APPLICATION->ShowViewContent('mdf_title');?></h1> <?$this->SetViewTarget('mdf_title');?> same text here ... <?$this->EndViewTarget();?>
- ob_start
ob_start(); echo 'SomeText'; $out1 = ob_get_contents(); ob_end_clean(); $APPLICATION->AddViewContent('block_id',$out1);