Для добавления фильтра товаров необходимо изменить соответствующий компонент так как описано ниже.
1) В системных настройках компонента необходимо добавить инициализацию полей по которым будет фильтроваться продукция и обработчик переменной $query_where добавляющий фильтрующие условия в SQL запрос.
$netshop = nc_netshop::get_instance(); //$netshop->filter->options('ignore_cc', true); //раскомментировать в собирающем разделе с ignore_cc $netshop->filter->init_fields(array('Vendor', 'Screen', 'Price')); $netshop->filter->query_where($query_where);
2) В префиксе списка объектов добавляем вывод формы фильтра:
echo $netshop->filter->make_form()
Альтернативный способ построения форм (Кастомизация форм)
Метод make_form возвращает html форму вид которой можно изменить только с помощью таблиц стилей (CSS). Если этого не достаточно, то можно построить форму альтернативным способом.
<form action='' method='post'> <?=$netshop->filter->make_field('Vendor') ?> <?=$netshop->filter->make_field('Screen') ?> <?=$netshop->filter->make_field('Price') ?> <button type='submit'>OK</button> <input type='submit' name='nc_filter_reset' value='Reset'> </form>
init_fields($fields=array())
Устанавка полей для фильтра товаров
Параметр $fields может быть простым массивом полей:
$netshop->filter->init_fields(array('Price', 'Color', 'Counts'));
или ассоциативным массивом для установки специфических параметров для поля:
$netshop->filter->init_fields(array( 'Price', 'Color', 'Counts' => array( 'type' => 'list', 'label' => 'Кол-во', 'options' => array('',1,2,3,4,5,6,7,9) ), ));
Доступные параметры поля:
Устанавливает (если передан аргумент $value) или возвращает (если $value = null) параметр фильтра.
Доступные параметры:
$netshop->filter->options('filter_values', false);
Добавляет в SQL запрос фильтрующие условия
Функция вызывается в системных настройках компонента:
$netshop->filter->query_where($query_where);
Гененрирует html форму фильтра
Гененрирует html фильтрующего поля
Возвращает фильтрующее значениея поля
Возвращает массив полей с установленными параметрами
Комментарии 5
[CODE]<input type="hidden" name="nc_filter_set" value="1">[/CODE]
Без нее фильтр рабоать не будет.
Например, цена от и до работает только если она есть у основного товара, а это зачастую не так.
$netshop->filter->options('ignore_cc', true);
$netshop->filter->query_where($query_where);
при отображении фильтра не учитываются параметры из $query_where.
Т.е. к $query_where параметры фильтра добавляются, а наоборот нет.
Например, в основном ифоблоке имеется 100 товаров, а в зеркальном делается выборка товаров с пользовательскими критериями и в списке остается 20. При этом фильтр отображается, но выдает параметры фильтрации для всех 100 товаров, которые находятся в основном инфоблоке, а не для 20 выбраных.
Посмотрели код класса nc_netshop_filter и обнаружили, что обратная конкатенация параметра $query_where к фильтру в принципе не предусмотрена и имеет смысл только при зеркалировании всего инфоблока. И обойти это никак не получается без написания своих фильтров. Хотелось, бы чтобы была такая возможность в будущем.