Подскажите возможно ли такое - вырезать код свойства и параметры ЧПУ - is-from-to-or - из него же? И дополнение /apply/? Поиск по форуму и поисковикам ничего не дал... Колдую над классом компонента smart.filter, но безуспешно. На данный момент так - /catalog/sale_flats/filter/street-is-2-ya-sadovaya/apply/ А хочу чтоб было так - /catalog/sale_flats/filter/2-ya-sadovaya/ В классе 5 функций которые за это отвечают, но не могу с ними разобраться... PHP: public function searchProperty($items, $lookupValue) { foreach($items as $itemId => $arItem) { if (!$arItem["PRICE"]) { $code = toLower($arItem["CODE"]); if ($lookupValue === $code) return $itemId; if ($lookupValue == intval($arItem["ID"])) return $itemId; } } return false; } public function searchValue($item, $lookupValue) { foreach($item as $itemId => $arValue) { if ($lookupValue === $arValue["URL_ID"]) return $itemId; } return false; } public function convertUrlToCheck($url) { $result = array(); $smartParts = explode("/", $url); foreach ($smartParts as $smartPart) { $item = false; $smartPart = preg_split("/-(from|to|is|or)-/", $smartPart, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($smartPart as $i => $smartElement) { if ($i == 0) { if (preg_match("/^price-(.+)$/", $smartElement, $match)) $itemId = $this->searchPrice($this->arResult["ITEMS"], $match[1]); else $itemId = $this->searchProperty($this->arResult["ITEMS"], $smartElement); if ($itemId) $item = &$this->arResult["ITEMS"][$itemId]; else break; } elseif ($smartElement === "from") { $result[$item["VALUES"]["MIN"]["CONTROL_NAME"]] = $smartPart[$i+1]; } elseif ($smartElement === "to") { $result[$item["VALUES"]["MAX"]["CONTROL_NAME"]] = $smartPart[$i+1]; } elseif ($smartElement === "is" || $smartElement === "or") { $valueId = $this->searchValue($item["VALUES"], $smartPart[$i+1]); if (strlen($valueId)) { $result[$item["VALUES"][$valueId]["CONTROL_NAME"]] = $item["VALUES"][$valueId]["HTML_VALUE"]; } } } unset($item); } return $result; } public function makeSmartUrl($url, $apply, $checkedControlId = false) { $smartParts = array(); if ($apply) { foreach($this->arResult["ITEMS"] as $PID => $arItem) { $smartPart = array(); //Prices if ($arItem["PRICE"]) { if ($arItem["VALUES"]["MIN"]["HTML_VALUE"] || $arItem["VALUES"]["MAX"]["HTML_VALUE"]) { if ($arItem["VALUES"]["MIN"]["HTML_VALUE"]) $smartPart["from"] = $arItem["VALUES"]["MIN"]["HTML_VALUE"]; if ($arItem["VALUES"]["MAX"]["HTML_VALUE"]) $smartPart["to"] = $arItem["VALUES"]["MAX"]["HTML_VALUE"]; } } if ($smartPart) { array_unshift($smartPart, toLower("price-".$arItem["CODE"])); $smartParts[] = $smartPart; } } foreach($this->arResult["ITEMS"] as $PID => $arItem) { $smartPart = array(); if ($arItem["PRICE"]) continue; //Numbers && calendar == ranges if ( $arItem["PROPERTY_TYPE"] == "N" || $arItem["DISPLAY_TYPE"] == "U" ) { if ($arItem["VALUES"]["MIN"]["HTML_VALUE"] || $arItem["VALUES"]["MAX"]["HTML_VALUE"]) { if ($arItem["VALUES"]["MIN"]["HTML_VALUE"]) $smartPart["from"] = $arItem["VALUES"]["MIN"]["HTML_VALUE"]; if ($arItem["VALUES"]["MAX"]["HTML_VALUE"]) $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"]; } } } if ($smartPart) { if ($arItem["CODE"]) array_unshift($smartPart, toLower($arItem["CODE"])); else array_unshift($smartPart, $arItem["ID"]); $smartParts[] = $smartPart; } } } if (!$smartParts) $smartParts[] = array("clear"); return str_replace("#SMART_FILTER_PATH#", implode("/", $this->encodeSmartParts($smartParts)), $url); } public function encodeSmartParts($smartParts) { foreach ($smartParts as &$smartPart) { $urlPart = ""; foreach ($smartPart as $i => $smartElement) { if (!$urlPart){ $urlPart .= urlencode($smartElement); } elseif ($i == 'from' || $i == 'to'){ $urlPart .= urlencode('-'.$i.'-'.$smartElement); } elseif ($i == 1){ $urlPart .= urlencode('-is-'.$smartElement); } else{ $urlPart .= urlencode('-or-'.$smartElement); } } $smartPart = $urlPart; } unset($smartPart); return $smartParts; } Может быть кто-то более опытный подскажет?