Данная реализация позволит сохранить обновляемость шаблона каталога товаров "bitrix:catalog","main" в Аспро: Лайтшоп.
1. Создаем правило обработки адресов для фильтра товаров с ЧПУ:
1 => array(
'CONDITION' => '#^/catalog/filter/(.+)/apply/#',
'RULE' => 'SMART_FILTER_PATH=$1&',
'PATH' => '/catalog/index.php',
'SORT' => 90
),
В вашем файле urlrewrite.php ключ "1" может быть занят - тогда используйте другой.
В регулярном выражении используем (.+), чтобы все символы были допустимы, в том числе кириллица.
2. Перед вызовом каталога товаров "bitrix:catalog" настраиваем управление адресами страниц и поведение 404-й ошибки:
if (!empty($_REQUEST['SMART_FILTER_PATH']))
{
$SET_STATUS_404 = 'N';
$SHOW_404 = 'N';
$SEF_URL_TEMPLATES = [
'sections' => '',
'section' => '',
'element' => '#ELEMENT_CODE#/',
'compare' => 'compare.php?action=#ACTION_CODE#',
'smart_filter' => '/catalog/filter/#SMART_FILTER_PATH#/apply/',
];
}
else
{
$SET_STATUS_404 = 'Y';
$SHOW_404 = 'Y';
$SEF_URL_TEMPLATES = [
'sections' => '',
'section' => '#SECTION_CODE_PATH#/',
'element' => '#SECTION_CODE_PATH#/#ELEMENT_CODE#/',
'compare' => 'compare.php?action=#ACTION_CODE#',
'smart_filter' => '#SECTION_CODE_PATH#/filter/#SMART_FILTER_PATH#/apply/',
];
}
3. Ниже, в параметрах вызова компонента, прописываем определённые выше переменные:
$APPLICATION->IncludeComponent(
"bitrix:catalog",
"main",
Array(
...
"SET_STATUS_404" => $SET_STATUS_404,
"SHOW_404" => $SHOW_404,
"SEF_URL_TEMPLATES" => $SEF_URL_TEMPLATES,
...
)
);
4. В папке с шаблоном каталога товаров .../catalog/main/ в подпапке page_blocks создаём файл sections_1_custom.php с таким содержимым:
// Чтобы всё заработало, подключаем языковой файл для section.php, т. к. в sections.php нет некоторых названий нужных полей. Bitrix\Main\Localization\Loc::loadMessages($_SERVER['DOCUMENT_ROOT'].$templateFolder.'/section.php'); // Чтобы подключился нужный шаблон фильтра. $arParams['FILTER_VIEW'] = 'COMPACT'; // Чтобы ссылки на товары были рабочими. $arResult['URL_TEMPLATES']['element'] = '#SECTION_CODE_PATH#/#ELEMENT_CODE#/'; // Чтобы заработал умный фильтр. $arResult['URL_TEMPLATES']['smart_filter'] = 'filter/#SMART_FILTER_PATH#/apply/'; $arResult['VARIABLES']['SMART_FILTER_PATH'] = htmlspecialcharsbx($_REQUEST['SMART_FILTER_PATH']); $arElementFilter['INCLUDE_SUBSECTIONS'] = 'Y'; $arElementFilter['SECTION_GLOBAL_ACTIVE'] = 'Y'; $arElementFilter['SECTION_ACTIVE '] = 'Y'; // Подключение списка элементов. $bContolAjax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' && isset($_GET['control_ajax']) && $_GET['control_ajax'] == 'Y'); $sViewElementTemplate = ($arParams['SECTION_ELEMENTS_TYPE_VIEW'] == 'FROM_MODULE' ? $arTheme['ELEMENTS_CATALOG_PAGE']['VALUE'] : $arParams['SECTION_ELEMENTS_TYPE_VIEW']); ?>
<div class="js_wrapper_items<?= $arTheme['LAZYLOAD_BLOCK_CATALOG']['VALUE'] == 'Y' ? ' with-load-block' : ''; ?>" >
<div class="js-load-wrapper <?=$APPLICATION->ShowViewContent('section_additional_class'); ?>">
<?if($bContolAjax):?>
<?$APPLICATION->RestartBuffer(); ?>
<?endif; ?>
<?@include_once $sViewElementTemplate.'.php'; ?>
<?if($bContolAjax):?>
<?exit; ?>
<?endif; ?>
</div>
</div>
<?$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.history.js'); ?>
<?
// Подключаем необходимые библиотеки.
TSolution\Extensions::init(['filter_panel', 'dropdown_select', 'smart_filter', 'order-info']);
Файл надо создать в обоих шаблонах сайта: для компьютеров и для мобильных. В шаблоне для мобильных в этом файле подключаем другой список библиотек:
TSolution\Extensions::init(['filter_panel', 'order-info']);
5. В настройках Аспро, в параметре "Шаблон списка разделов" выбираем sections_1_custom:
6. Делаем полную очистку файлов кэша на сайте.
После этого в корне каталога товаров заработает умный фильтр с ЧПУ.