Пример работы с SetViewTarget

Пример работы с SetViewTarget

5444
03.09.2015

Что делать если нам нужно разместить фильтр в подвале сайта или слева/справа в сайдбаре? Но при этом фильтр должен вызываться ДО компонента bitrix:catalog.section...

Что делать если нам нужно разместить компонент, например, фильтр, в подвале сайта или слева/справа в сайдбаре? Но при этом фильтр должен вызываться ДО компонента bitrix:catalog.section. В ядре продукта 1С-Битрикс имеется замечательный метод CMain::ShowViewContent. Метод позволяет установить выводимый контент для функции AddViewContent. С помощью этого метода можно вывести компонент где угодно. Допустим мы используем комплексный компонент каталога и фильтр у нас вызывается (или будет вызываться) в файле шаблона section.php (sections.php). Тогда вызов фильтра должен быть таким:

if(!isset($_REQUEST["ajax"])) $this->SetViewTarget("sidebar");

$APPLICATION->IncludeComponent(
    "bitrix:catalog.smart.filter",
    "",
    array(...),
    false
);

if(!isset($_REQUEST["ajax"])) $this->EndViewTarget("sidebar");

Т.е. перед фильтром мы вызываем метод SetViewTarget, после EndViewTarget. В результате фильтр отработает ДО компонент bitrix:catalog.section, но показан он не будет. Затем в том месте где мы хотим отобразить фильтр необходимо вызвать метод

    $APPLICATION->ShowViewContent('sidebar');

Это может быть любым местом – шаблон сайта, шаблон другого компонента, включаемая область.

UPDATE 2015-12-08

На одном из сайтов заметил менее явный пример использования данного механизма: Предположим, в хедере выводится заголовок текущей страницы, а на разных страницах в этот блок нужно отображать какие-то данные, тогда вывод заголовка будет иметь вид:

<h1><?=$APPLICATION->ShowTitle();?><?$APPLICATION->ShowViewContent('mdf_title');?></h1>

А уже на нужной странице делаем механизм, который будет формировать нужный нам текст:

<?$this->SetViewTarget('mdf_title');?>
    same text here ...
<?$this->EndViewTarget();?>

UPDATE 2016-10-21

Еще один пример для статических файлов. Для задания контента, который должен быть помещен в определенную область с помощью отложенной функции, необходимо воспользоваться конструкцией:

<?ob_start();
    echo 'SomeText';
    $out1 = ob_get_contents();
    ob_end_clean();
$APPLICATION->AddViewContent('block_id',$out1); ?>

UPDATE 2016-12-06

Для того, чтобы воспользоваться конструкцией $this->SetViewTarget из файла component_epilog.php, воспользоваться просто переменной $this не удастся, т.к. в данном файле это уже объект класса CBitrixComponent (а не CBitrixComponentTemplate, как в файле template.php). В таком случае нужно использовать конструкцию вида:

<?$this->__template->SetViewTarget('mdf_title');?>
    same text here ...
<?$this->__template->EndViewTarget();?>

Источник: http://filter.kombox.ru/docs/course/?COURSE_ID=1&LESSON_ID=13


Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

$this->_template не правильно, верно $this->__template
  • Ответить
Александр, благодарю за обнаруженную очепятку. Исправил
  • Ответить

Добавить комментарий

captcha

Возврат к списку