Умный фильтр для каталога по брендам

195
30 октября 2018, 17:10

В интернет магазине у каждого товара есть свойство Brand, которое хранит название бренда. Также создан инфоблок с брендами, в котором хранится название бренда и его символьный код.

Необходимо было сделать страницу которая выводит все товары текущего бренда, а также все товары бренда текущей категории, и для этих страниц добавить умный фильтр. Но умный фильтр работает только по разделам и так сделать не получилось.

Пробовал сделать костыль, который перед запуском компонента умного фильтра напрямую с массив сессии добавляет значения полей фильтра таким кодом

$param_name = 'arrFilter_'.$prop_id.'_'. abs( crc32( htmlspecialcharsbx( $prop_value ) ) );

Где $prop_id - id свойства Brand, а pro_value соответственно его значение.

$_SESSION['arrFilter'][$param_name] = 'Y'

И естественно само свойство бренд из шаблона фильтра убрали

Это должно было работать, если включить сохранение фильтра в сессии. Но т.к. свойство вводилось вручную значения немного разные, например отличались регистром и хеш не подходил.

Как можно заставить умный фильтр фильтровать не по разделам, а по брендам?

Answer 1

Для того чтобы реализовать такой отбор Вам нужно воспользоваться полем "FILTER_NAME" компонента в которое необходимо передать фильтр отбора записей. Пример как такое сделать можете посмотреть здесь, здесь, здесь и здесь

В Вашем случае примерный вид для фильтрации будет такой:

<?php
global $arBrandFilter;
$arBrandFilter = array(
    "PROPERTY_CODE" => VALUE,
);
?>

Это пример фильтра.

Вы можете расширять этот массив в зависимости от условий. Для фильтрации по свойствам используйте описание свойства в формате PROPERTY_CODE => array(//значения которые принимает свойство). При переходе на страницу с товарами определенного бренда вам остается только определить что это за бренд, чтобы сформировать фильтр по конкретному бренду.

Теперь переменную с фильтром передаете в код вызова компонента отображения товара FILTER_NAME: ... "FILTER_NAME" => $arBrandFilter ...

Важно: код определяющий переменную фильтра должен располагаться в том же месте, что и вызов компонента вывода списка товаров и перед вызовом компонента.

READ ALSO
Высчитать сколько процентов занимает 1 пункт из общего числа

Высчитать сколько процентов занимает 1 пункт из общего числа

Есть массив, в котором записаны цифрыВ массиве много элементов, но вывожу я только 10

144
Ошибка в mod_rewrite

Ошибка в mod_rewrite

Использую стандартные настройки

150
Проблема добавление данных laravel

Проблема добавление данных laravel

всем доброе время суток не могу добавть запись в чем проблема именно в моей ситуации

169