Добавляем информацию нелинейно

Иногда часть информации нужно разместить вне компонента где она вычисляется, например — в боковой колонке. В Битриксе передача данных между компонентами затруднена, но есть несколько способов.

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