Умный фильтр в компоненте новости

Компонент "Умный фильтр" (catalog.smart.filter) - безусловно хороший и удобный, но если использовать его вне стандартного шаблона комплексного компонента "catalog", на первый взгляд может показаться, что он недоделан (например, отказывается нормально работать без указания раздела и др.), но это не совсем так. В этой статье я расскажу как использовать его скрытые возможности и как вносить некоторые изменения в ЧПУ фильтра.

Использование фильтра без указания раздела

В стандартном шаблоне компонента "catalog" компонент "catalog.smart.filter" используется на странице раздела. В комплексном же компоненте "news" вообще используется устаревший компонент "catalog.filter", почему, лично для меня это остается загадкой - могу только предполагать, что либо компании "Битрикс" глубоко безразлично все, что не связано с электронной коммерцией, либо разработчики сами не до конца уверены в производительности "catalog.smart.filter" при обработке большого количества элементов. Так или иначе, использовать "catalog.smart.filter" в шаблоне компонента "news" или в том же "catalog", но не в конкретном разделе, не так сложно, основная проблема, которая тут возникает - это то, что по умолчанию, без указания в параметрах компонента ID или символьного кода раздела не работает счетчик количества элементов (показывает 0). Чтобы избавится от этой проблемы, укажем в параметре "SECTION_ID" - 0 или оставим его пустым, а в дополнительном параметре "SHOW_ALL_WO_SECTION", который был заботливо подготвлен программистами, но потом почему-то тщательно спрятан от посторонних глаз - "Y". Напомню, что такой же параметр существует и у компонента "catalog.section" и означает "Показывать все элементы без указания раздела". Так же не забудьте подправить параметр SEF_RULE который отвечает за ЧПУ фильтра. В моем случае он выглядит так "SEF_RULE" => "/html-templates/filter/#SMART_FILTER_PATH#/apply/", где html-templates это символьный код моего раздела где находиться сам компонент новости.
Вот сам код добавления умного фильтра в фале компонента news.php 
<? $APPLICATION->IncludeComponent(
                    "bitrix:catalog.smart.filter",
                    "smart_main_catalog_filter",
                    array(
                        "CACHE_GROUPS" => "Y",
                        "CACHE_TIME" => "36000000",
                        "CACHE_TYPE" => "A",
                        "COMPOSITE_FRAME_MODE" => "A",
                        "COMPOSITE_FRAME_TYPE" => "AUTO",
                        "DISPLAY_ELEMENT_COUNT" => "Y",
                        "FILTER_NAME" => "arrFilter",
                        "FILTER_VIEW_MODE" => "vertical",
                        "IBLOCK_ID" => $arParams["IBLOCK_ID"],
                        "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
                        "PAGER_PARAMS_NAME" => "arrPager",
                        "POPUP_POSITION" => "left",
                        "SAVE_IN_SESSION" => "N",
                        "SECTION_CODE" => "",
                        "SECTION_DESCRIPTION" => "-",
                        "SECTION_ID" => "",
                        "SHOW_ALL_WO_SECTION" => "Y",
                        "SECTION_TITLE" => "-",
                        "SEF_MODE" => "N",
                        "TEMPLATE_THEME" => "blue",
                        "XML_EXPORT" => "N",
                        "COMPONENT_TEMPLATE" => "smart_main_catalog_filter",
                        "SEF_RULE" => "/html-templates/filter/#SMART_FILTER_PATH#/apply/",
                        "SECTION_CODE_PATH" => "",
                        "SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"],
                        'VIEW' => $VIEW,
                    ),
                    false
                ); ?>

Использование фильтра с указанием раздела

Если вы хотите что бы ваш фильтр работал и в разделах Новостей в файле section.php , то помимо описанного выше необходимо так же подправить ЧПУ фильтра в параметре SEF_RULE. 
Вот код вызова компонента который необходимо вставить в section.php компонента новости.
<? $APPLICATION->IncludeComponent(
                    "bitrix:catalog.smart.filter",
                    "smart_main_catalog_filter",
                    array(
                        "CACHE_GROUPS" => "Y",
                        "CACHE_TIME" => "36000000",
                        "CACHE_TYPE" => "A",
                        "COMPOSITE_FRAME_MODE" => "A",
                        "COMPOSITE_FRAME_TYPE" => "AUTO",
                        "DISPLAY_ELEMENT_COUNT" => "Y",
                        "FILTER_NAME" => "arrFilter",
                        "FILTER_VIEW_MODE" => "vertical",
                        "IBLOCK_ID" => $arParams["IBLOCK_ID"],
                        "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
                        "PAGER_PARAMS_NAME" => "arrPager",
                        "POPUP_POSITION" => "left",
                        "SAVE_IN_SESSION" => "N",
                        "SECTION_CODE" => "",
                        "SECTION_DESCRIPTION" => "-",
                        "SECTION_ID" => "",
                        "SHOW_ALL_WO_SECTION" => "Y",
                        "SECTION_TITLE" => "-",
                        "SEF_MODE" => "N",
                        "TEMPLATE_THEME" => "blue",
                        "XML_EXPORT" => "N",
                        "COMPONENT_TEMPLATE" => "smart_main_catalog_filter",
                        "SEF_RULE" => "/html-templates/".$arResult['VARIABLES']['SECTION_CODE']."/filter/#SMART_FILTER_PATH#/apply/",
                        "SECTION_CODE_PATH" => $arResult['VARIABLES']['SECTION_CODE'],
                        "SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"],
                        'VIEW' => $VIEW,
                    ),
                    false
                ); ?>
вот так выглядит параметр в моем случае  "SEF_RULE" => "/html-templates/".$arResult['VARIABLES']['SECTION_CODE']."/filter/#SMART_FILTER_PATH#/apply/"
где $arResult['VARIABLES']['SECTION_CODE'] это код текущего раздела.

Загрузка комментариев...