Как сделать альтернативный ЧПУ умного фильтра?

Всем здравствуйте!

Хочу сделать альтернативное ЧПУ умного фильтра, чтоб вместо "site.ru/catalog/filter/brand-is-makita/apply/" был красивый "site.ru/catalog/makita/" подскажите как реализовать. Возможно кто то уже делал подобное и подкинет мыслишку в какую сторону ковырять. Примерно представляю варианты реализации, например подмену урла, но по идее должен отрабатывать 301 редирект, а может и не должен. Во всяком случае взываю к вам более опытные коллеги.
  • Вопрос задан
  • 3301 просмотр
Решения вопроса 1
@anton99zel Куратор тега 1С-Битрикс
29а класс средней школы №7
Убираем filter и apply
Строку в компоненте bitrix:catalog заменить на :
"smart_filter" => "#SECTION_CODE_PATH#/#SMART_FILTER_PATH#/",

В фильтре catalog.smart.filter меняем настройки на такие :
<?
                $res = CIBlockSection::GetByID($arCurSection['ID']);
                if($ar_res = $res->GetNext())
                $url = "/catalog/".$ar_res[CODE]."/#SMART_FILTER_PATH#/";
		$APPLICATION->IncludeComponent("bitrix:catalog.smart.filter", "bootstrap_v4", array(
                "CACHE_GROUPS" => "N",	// Учитывать права доступа
		"CACHE_TIME" => "3600",	// Время кеширования (сек.)
		"CACHE_TYPE" => "A",	// Тип кеширования
		"COMPOSITE_FRAME_MODE" => "N",
		"COMPOSITE_FRAME_TYPE" => "AUTO",
		"CONVERT_CURRENCY" => "N",	// Показывать цены в одной валюте
		"DISPLAY_ELEMENT_COUNT" => "N",	// Показывать количество
		"FILTER_NAME" => "arrFilter",	// Имя выходящего массива для фильтрации
		"FILTER_VIEW_MODE" => "vertical",
		"HIDE_NOT_AVAILABLE" => "Y",	// Не отображать товары, которых нет на складах
		"IBLOCK_ID" => $arParams["IBLOCK_ID"],	// Инфоблок
		"IBLOCK_TYPE" => "catalog",	// Тип инфоблока
		"PAGER_PARAMS_NAME" => "arrPager",	
		"SAVE_IN_SESSION" => "N",	// Сохранять установки фильтра в сессии пользователя
		"SECTION_CODE" => "",	// Код раздела
		"SECTION_DESCRIPTION" => "-",	// Описание
		"SECTION_ID" => $arCurSection['ID'],	// ID раздела инфоблока
		"SECTION_TITLE" => "-",	// Заголовок
		"SEF_MODE" => "Y",	// Включить поддержку ЧПУ
		"TEMPLATE_THEME" => "blue",	// Цветовая тема
		"XML_EXPORT" => "N",	// Включить поддержку Яндекс Островов
		"COMPONENT_TEMPLATE" => "",
		"POPUP_POSITION" => "left",
		"SECTION_CODE_PATH" => "",	// Путь из символьных кодов раздела
		"SEF_RULE" => $url,	// Правило для обработки
		"SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"],	// Блок ЧПУ умного фильтра
		"SHOW_ALL_WO_SECTION" => "Y",
		"PRICE_CODE" => "",	// Тип цены
		"PREFILTER_NAME" => "smartPreFilter",	// Допфильтрация элементов
						),
	         false);
		 ?>

В urlrewrite.php нужно добавить одно правило, оно не затрется в будущем, а общий вид будет примерно таким:
<?php
$arUrlRewrite=array (
  1 => 
  array (
    'CONDITION' => '#^/catalog/([a-z0-9_\\-\\/]+)/#',
    'RULE' => 'SMART_FILTER_PATH=$1&',
    'ID' => '',
    'PATH' => '/catalog/index.php',
    'SORT' => 100,
  ),
  2 => 
  array (
    'CONDITION' => '#^/catalog/\\??(.*)#',
    'RULE' => 'SMART_FILTER_PATH=$1&$2',
    'ID' => 'bitrix:catalog.smart.filter',
    'PATH' => '/catalog/index.php',
    'SORT' => 100,
  ),
  3 => 
  array (
    'CONDITION' => '#^/catalog/#',
    'RULE' => '',
    'ID' => 'bitrix:catalog',
    'PATH' => '/catalog/index.php',
    'SORT' => 100,
  )
);

Убираем IS и OR
Чтобы убрать -is- нужно подменять значения в SMART_FILTER_PATH, а затем сделать 301 редирект с оригинального адреса на кастомный.
Как вы будете делать подмену - я не знаю (циклами, массивами, и прочими "пэхэпэшными штучками"), но подмена должна быть выше, чем код фильтра. Нужно проверять вхождения, корректность подмен, добавить обработку ошибок, юзать 301 редирект, чтобы не плодить дубли, которых и так много и без доработки фильтра.
Вот пример:

$_REQUEST[SMART_FILTER_PATH] = str_replace("red/brown", "colors-is-brown-or-red/", $_REQUEST[SMART_FILTER_PATH]);


В итоге вместо строки
https://test.ru/catalog/pants/filter/color_ref-is-green/apply/

мы получим строку:
https://test.ru/catalog/pants/green/
5f4fd8c4caad8356011565.jpeg
5f4fd8cf127cb908819760.jpeg
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@antikritik
решение подмены конкретных страниц - https://www.youtube.com/watch?v=qiv6PAP1NuI
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы