@IliaMal

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

Здравствуйте.

Настроили в умном фильтре ЧПУ, но из за того у нас в свойствах товара XML_ID задан по умолчанию в url получается примерно следующее /catalog/platya/filter/dlina_izdeliya-is-b012a3ad-eee1-11e8-a9a8-0cc47adb18fb/apply/
Такую запись нельзя назвать ЧПУ.
Переписать XML_ID мы не можем, у нас товары импортируются из 1с, из за замены XML_ID слетит выгрузка.

Видимо надо кастомизировать компаненты catalog.smart.filter и catalog.section, что бы фильтрация осуществлялась по имени свойства, а не по XML_ID.

Кто нибудь решал подобные задачи? Можете поделиться опытом, где что править?
  • Вопрос задан
  • 665 просмотров
Пригласить эксперта
Ответы на вопрос 2
alexyarik
@alexyarik
Битрикс разработчик
Комментировать
@PetrPo
Кастомить catalog.smart.filter файл class.php
1. В методе makeSmartUrl найди
//Numbers && calendar == ranges
				if (
					$arItem["PROPERTY_TYPE"] == "N"
					|| $arItem["DISPLAY_TYPE"] == "U"
				)
				{
					if (strlen($arItem["VALUES"]["MIN"]["HTML_VALUE"]) > 0)
						$smartPart["from"] = $arItem["VALUES"]["MIN"]["HTML_VALUE"];
					if (strlen($arItem["VALUES"]["MAX"]["HTML_VALUE"]) > 0)
						$smartPart["to"] = $arItem["VALUES"]["MAX"]["HTML_VALUE"];
				}
				else
				{
					foreach($arItem["VALUES"] as $key => $ar)
					{
						if (
							(
								$ar["CHECKED"]
								|| $ar["CONTROL_ID"] === $checkedControlId
							)
							&& strlen($ar["URL_ID"])
						)
						{
							$smartPart[] = $ar["URL_ID"];
						}
					}
				}

в else замени два $ar["URL_ID"] на $ar["VALUE"]

2. Метод searchValue замени на
public function searchValue($item, $lookupValue)
	{
		$error = "";
		$searchValue = \Bitrix\Main\Text\Encoding::convertEncoding($lookupValue, LANG_CHARSET, "utf-8", $error);
		if (!$error)
		{
			$encodedValue = rawurlencode($searchValue);
			foreach($item as $itemId => $arValue)
			{
				$convertValue = \Bitrix\Main\Text\Encoding::convertEncoding($arValue['VALUE'], LANG_CHARSET, "utf-8", $error);
				if ($encodedValue === rawurlencode($convertValue))
					return $itemId;
			}
		}
		return false;
	}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы