Битрикс. Как переместить фильтр в шаблоне
15.08.2018
Теги: CMS • Web-разработка • Битрикс • Буферизация • КаталогТоваров • Компонент • ШаблонКомпонента • ШаблонСайта
Описанный ниже метод основан на технологии буферизации вывода. Буферизация позволяет манипулировать данными, которые формируют php скрипты на странице. Проще говоря, происходит следующее: перед тем как сервер отдаст сформированный HTML-код, мы с помощью определённых методов можем изменить расположение этого кода, переместив его выше или ниже.
Вызов компонента умного фильтра bitrix:catalog.smart.filter
должен происходить еще до вызова компонента списка товаров раздела bitrix:catalog.section
. Это важно, так как сначала должен сформироваться массив для фильтрации, а затем он должен быть передан в компонент списка товаров.
<div class="smart-filter"> <?php $APPLICATION->IncludeComponent( 'bitrix:catalog.smart.filter', '', array( // параметры компонента ), $component ); ?> </div> <div class="section-products"> <?php $APPLICATION->IncludeComponent( 'bitrix:catalog.section', '', array( // параметры компонента ), $component ); ?> </div>
Если нужно разместить фильтр в другом месте, например в левой или правой колонке, то делаем так:
<?php $this->SetViewTarget('html_smart_filter'); ?> <div class="smart-filter"> <?php $APPLICATION->IncludeComponent( 'bitrix:catalog.smart.filter', '', array( // параметры компонента ), $component ); ?> </div> <?php $this->EndViewTarget(); ?> <div class="section-products"> <?php $APPLICATION->IncludeComponent( 'bitrix:catalog.section', '', array( // параметры компонента ), $component ); ?> </div>
Фильтр отработает и сформирует массив для фильтрации. Но вывода HTML-кода в месте вызова не будет. Этот вывод сформированного HTML-кода мы можем разместить в другом месте. Это может быть как выше, так и ниже места вызова компонента умного фильтра:
<div class="left sidebar"> <?php $APPLICATION->ShowViewContent('html_smart_filter'); ?> </div>
Для того, чтобы воспользоваться методами SetViewTarget()
и EndViewTarget()
из файла component_epilog.php
, использовать переменную $this
не получится, т.к. в данном файле это уже объект класса CBitrixComponent
(а не CBitrixComponentTemplate
, как в файле template.php
). В таком случае нужно делать так:
<?php $this->__template->SetViewTarget('some_content'); ?> Some content here ... <?php $this->__template->EndViewTarget(); ?>
Если нужно проделать похожую манипуляцию не в шаблоне компонента, а в шаблоне сайта, делаем так:
<?php // здесь выводим контент с меткой «some_content», который будет сфорирован ниже $APPLICATION->ShowViewContent('some_content'); ?> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit... </p> <?php ob_start(); // включаем буферизацию вывода, все идет в отдельный буфер ?> Some content here ... <?php // выключаем буферизацию и помечаем этот контент меткой «some_content» $APPLICATION->AddViewContent('some_content', ob_get_clean()); ?>
- Битрикс. Регистрация и авторизация. Часть 3 из 3
- Битрикс. Создание комплексного компонента. Часть 4 из 4
- Битрикс. Создание комплексного компонента. Часть 3 из 4
- Битрикс. Создание комплексного компонента. Часть 2 из 4
- Битрикс. Создание комплексного компонента. Часть 1 из 4
- Битрикс. Создание простого компонента. Часть 2 из 2
- Битрикс. Создание простого компонента. Часть 1 из 2
Поиск: CMS • Web-разработка • Битрикс • Буферизация • Каталог товаров • Компонент • Умный фильтр • Шаблон компонента • Шаблон сайта • SetViewTarget • EndViewTarget • ShowViewContent • AddViewContent