Умный фильтр каталога вне стандартного шаблона: SHOW_ALL_WO_SECTION и ЧПУ
Задача
Компонент bitrix:catalog.smart.filter обычно живёт на странице раздела в составе catalog. Вынесенный в нестандартное место (например, в шаблон news) он может «ронять» счётчик количества элементов без раздела. Ниже — скрытые параметры и доработки ЧПУ.
Фильтр без привязки к разделу
Укажите SECTION_ID как 0 и активируйте SHOW_ALL_WO_SECTION = Y (аналог поведения catalog.section). Компоненту списка тоже понадобится тот же флаг.
Подключение в шаблоне catalog
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
"",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => !!$arCurSection?$arCurSection['ID']:0,
"SHOW_ALL_WO_SECTION" => !!$arCurSection?"N":"Y", // !!!
"FILTER_NAME" => $arParams["FILTER_NAME"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"SAVE_IN_SESSION" => "N",
"FILTER_VIEW_MODE" => $arParams["FILTER_VIEW_MODE"],
"XML_EXPORT" => "Y",
"SECTION_TITLE" => "NAME",
"SECTION_DESCRIPTION" => "DESCRIPTION",
'HIDE_NOT_AVAILABLE' => $arParams["HIDE_NOT_AVAILABLE"],
"TEMPLATE_THEME" => $arParams["TEMPLATE_THEME"],
'CONVERT_CURRENCY' => $arParams['CONVERT_CURRENCY'],
'CURRENCY_ID' => $arParams['CURRENCY_ID'],
"SEF_MODE" => $arParams["SEF_MODE"],
"SEF_RULE" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["smart_filter"],
"SMART_FILTER_PATH" => $arResult["VARIABLES"]["SMART_FILTER_PATH"],
"PAGER_PARAMS_NAME" => $arParams["PAGER_PARAMS_NAME"],
"INSTANT_RELOAD" => $arParams["INSTANT_RELOAD"],
"DISPLAY_ELEMENT_COUNT" => "N",
),
$component,
array('HIDE_ICONS' => 'Y')
);
Для вывода разделов в sections.php достаточно include('section.php'); после добавления "SHOW_ALL_WO_SECTION"=>"Y" к catalog.section.
Подключение в шаблоне news
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
"",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => !!$arResult['VARIABLES']['SECTION_ID'] || !!$arResult['VARIABLES']['SECTION_CODE']?$arResult['VARIABLES']['SECTION_ID']:0,
"SECTION_CODE" => $arResult['VARIABLES']['SECTION_CODE'],
"SHOW_ALL_WO_SECTION" => "Y", // !!!
"FILTER_NAME" => $arParams["FILTER_NAME"],
"PRICE_CODE" => array(),
"CURRENCY_ID" => "",
"CONVERT_CURRENCY" => "N",
"HIDE_NOT_AVAILABLE" => "N",
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"SAVE_IN_SESSION" => "N",
"FILTER_VIEW_MODE" => "",
"XML_EXPORT" => "Y",
"SECTION_TITLE" => "NAME",
"SECTION_DESCRIPTION" => "DESCRIPTION",
"SEF_MODE" => $arParams["SEF_MODE"],
"SEF_RULE" => $arResult["FOLDER"].$arResult["SMART_FILTER_URL_TEMPLATE"],
"SMART_FILTER_PATH" => $arResult["VARIABLES"]["SMART_FILTER_PATH"],
"PAGER_PARAMS_NAME" => $arParams["PAGER_PARAMS_NAME"],
"DISPLAY_ELEMENT_COUNT" => "N",
"INSTANT_RELOAD" => "N",
),
$component,
array('HIDE_ICONS' => 'Y')
);
ЧПУ на главной компонента
Catalog: в $arDefaultUrlTemplates404 добавьте правило вида smart_filter_index = "filter/#SMART_FILTER_PATH#/apply/"; после $engine->guessComponentPath, если страница smart_filter_index, подмените её на sections.
News: задайте $smartBase от шаблона раздела, допишите шаблоны smart_filter и smart_filter_index, добавьте $engine->addGreedyPart("#SMART_FILTER_PATH#"), затем переименование smart_filter → section и smart_filter_index → sections.
ЧПУ для цены без кода типа цены
Если URL вида /price-типовое_соглашение-from-…/ неустойчив по SEO, переопределите класс смарт‑фильтра: расширьте CBitrixCatalogSmartFilter и переопределите searchPrice (выбор первой цены из параметров), convertUrlToCheck и makeSmartUrl так, чтобы сегмент цены кодировался как price без суффикса кода типа. Полный рабочий пример см. на исходной публикации; ключевой приём — заменить регулярное выражение для price и в makeSmartUrl использовать array_unshift($smartPart, toLower("price")) вместо price-CODE.
Источник: перенос с блога g·rain·design.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии