Умный фильтр в компоненте новости
- 12 февраля 2021
-
1065
-
Нет комментариев
Компонент "Умный фильтр" (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'] это код текущего раздела.