Блог специалистов
29.03.2014

Делаем ЧПУ со значениями фильтра в Битрикс

Например, нам нужно сделать модуль Бренды, т.е. есть каталог, где у товаров есть свойство Список с перечислением брендов. А где-то на страницах сайта мы хотим вывести весь этот список брендов в виде ссылок, нажимая на которые, попадаем на страницу списка товаров данного бренда. При этом ссылка чтобы была ЧПУ.

0. Создаем страницу /brands/ и туда вставляем компонент списка товаров или новостей.

1. Делаем свое пространство имен, копируем в него catalog.filter и правим component.php так, чтобы вместо input select нам выдавало ссылку на свойство бренд. Уже измененная часть кода:

foreach($arResult["arrProp"] as $prop_id => $arProp)
{
$res = "";
$name = "";
$value ="";
$arResult["arrInputNames"][$FILTER_NAME."_pf"]=true;
switch ($arProp["PROPERTY_TYPE"])
{
case "L":
$name = $FILTER_NAME."_pf[".$arProp["CODE"]."]";
$value = $arrPFV[$arProp["CODE"]];
if ($arProp["MULTIPLE"]=="Y")
$res .= '<select multiple name="'.$name.'[]" size="'.$arParams["LIST_HEIGHT"].'">';
else
$res .= '';
$res .= '';
foreach($arProp["VALUE_LIST"] as $key=>$val)
{
$res .= '<a href="';

$res .= '/brands/'.htmlspecialcharsbx($key).'/">'.htmlspecialcharsbx($val).'</a><br>';
}
$res .= '';



2. Далее вставляем фильтр на страницу сайта и правим шаблон фильтра в файле template.php, оставляем в нем только следующий код:

<?foreach($arResult["ITEMS"] as $arItem):?>
<?if(!array_key_exists("HIDDEN", $arItem)):?>

<?=$arItem["INPUT"]?>

<?endif?>
<?endforeach;?>



3. Теперь делаем ЧПУ. Для этого в urlrewrite.php пишем свое правило, где показываем, что запрос с фильтром должен быть переделан в ЧПУ:

array(
"CONDITION" => "#^/brands/([0-9]+)/#",
"RULE" => "arrFilter_pf%5Bbrand%5D=$1&set_filter=Y",
"ID" => "",
"PATH" => "/brands/index.php",
),


Вот и все.

Количество показов: 11480




Возврат к списку