Умный фильтр битрикс, создание чпу ссылки до применения
Пригодится для сео, для вывода ссылок в шаблоне фильтра.
$ob = new CBitrixCatalogSmartFilter(); // создаем новый объект фильтра $arTmpItem = $arItem; // свойство фильтра $arTmpItem["VALUES"][$val]['CHECKED'] = 1; // отмечаем текущее значение $ob->arResult = array('ITEMS' => array($arTmpItem)); // закидываем в массив элементов фильтра $url = $ob->makeSmartUrl($arResult['SECTION']["DETAIL_PAGE_URL"], true); // формируем url
Попробую пояснить как это применять. В шаблоне умного фильтра, в цикле перебора значений ($arItem['VALUES']) нужно вставить данный код. Код формирует временный массив из одного элемента (текущего) с одним значением (текущим, checked) и передает его в класс фильтра для формирования чпу. Это сработает только для значений "первого уровня", когда фильтр еще ни разу не применялся. Для других нужно передавать все элементы со всеми значениями, что бы метод makeSmartUrl смог построить полный путь.
Пример получения шаблона пути DETAIL_PAGE_URL:
if (SECTION_ID > 0) { $sectionList = CIBlockSection::GetList( array(), array( "=ID" => SECTION_ID, ), false, array("*") ); $sectionList->SetUrlTemplates($arParams["SEF_RULE"]); $arResult['SECTION'] = $sectionList->GetNext(); } else { $arResult['SECTION']["DETAIL_PAGE_URL"] = "/catalog/all/#SMART_FILTER_PATH#/"; }
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.