В общем такое дело. Есть Drupal 7 и Commerce (не сборка). Делаю инет магазин. Сейчас попытаюсь описать суть проблемы, но зайду немного издалека.
Если делать всё правильно, то необходимо под каждую категорию товаров создать свой тип продукта и тип ноды, и соответственно поля (они же термины таксономии), и views с разными наборами фильтров (в том числе и открытых). И импорт товаров будет сложен. Это решение убирает проблему с фильтрами. НО… ВНИМАНИЕ ВОПРОС: если у меня около 200-300 категорий, в каком году я закончу делать сайт?
Как начал делать я:
Создал всего 1 тип продукта и 1 тип ноды под неё. В общей сложности у всех товаров 30 полей (характеристик товаров), создано 30 словарей, и 1 словарь это сами категории товаров, подключенный через «Taxonomy menu» и выведен стандартной встроенной views. Этот вариант очень удобен, так как неиспользованные поля какого-либо материала попросту не выводятся на его странице.
НО ВОТ ГЛАВНАЯ ПРОБЛЕММА:
Explosed Filters выводятся все, и которые нужны и нет (ну вот зачем мне «диаметр бура» в куртках). И так же значения фильтров выводятся все (т.е. при выборе марки ноутбука выпадает и “oriflame”). Как избавиться от этого? Как дать поняться views (или как-то по другому, что необходимо смотреть: какие фильтры и какие значения в них используется в данной категории).
Если у кого-то есть решение данной неурядицы (не обязательно таким способом как я описал, то буду очень признателен.
Комментарии
Можно использовать hook_form_alter, примерно так:
<?php
/**
* Implement hook_form_alter for the exposed form.
*/
function my_module_form_views_exposed_form_alter(&$form, &$form_state) {
if($form_state['#view']->name != 'my_view') return;
foreach (element_children($form) as $key) {
//Здесь вставляем свой код, который убирает лишние поля и опции из селектов
}
}
?>
Такое решение подойдет, если товары выведены в таблицу (Views, всего 4 поля), а сортировать нужно по большим количествам полей из товара (поля, которые имеют значение, NULL поля не трогать)? Ну и ясно дело, чтобы отсортированное выводила опять же вьюшка? Если да, то куплю решение.