Вы здесь

Два Views Selective Filters

0

Есть два раскрытых фильтра (views_selective_filters) "Район" и "Населенный пункт" с терминами таксономии.
Если выбрать какой-нибудь "Населенный пункт", то из поля "Район" пропадают все варианты, потому что в отфильтрованных материалах нет материалов с заполненным полем "Район".

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

Версия Drupal: 
7.x
Связанные проекты: 
ViewsViews Selective Filters
Вопрос задан 02.08.2015 - 06:26

Ответы

2

Selective Filter так не умеет. Чтобы подкорректировать фильтры, надо писать код.
На форм_альтере проверяете, что это форма фильтров, и что это нужный view

function MODULE_form_alter(&$form, &$form_state, $form_id)
{
  if ($form_id == 'views_exposed_form') {
    $view = $form_state['view'];
    if ($view->name == 'your_view' && $view->current_display == 'page') {
        // Your code
    }
  }
}

Затем удаляете из формы лишние значения.
Если всегда будут два фильтра: "Район" и "Населенный пункт", то проверьте запросом к БД, какие значения лишние.
Если планируете добавлять раскрытые фильтры и хотите универсально, то тут сложнее: надо программно запустить текущий view без фильтров, чтобы проверить, какие значения полей имеются в result.

Ответ дан 02.08.2015 - 09:59

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

Комментарий оставлен 03.08.2015 - 15:04

В общем если я правильно понимаю сначала отбираю уникальный tid по полю ноды, а затем эти значения подставляю в $form['field_razdel_tid']['#options']
Но у меня что-то проблема с уникальными tid

        $nodes = db_select('field_data_field_razdel', 'frf')
            ->distinct('frf.field_razdel_tid')
            ->countQuery('frf.field_razdel_tid')
            ->execute()
            ->fetchField();

Комментарий оставлен 03.08.2015 - 16:53
$query = db_select('field_data_field_razdel', 'frf'); // Достаем все возможные разделы
$query->leftJoin('node', 'n', 'frf.entity_id = n.nid'); // Подключаем ноды, которые относятся к разделам
$query->condition('n.type', 'your_node_type', '='); // Смотрим, чтобы у ноды раздел был нужного типа
$query->fields('frf', array('field_razdel_tid'));
$query->distinct(); // Только уникальные записи


Комментарий оставлен 03.08.2015 - 18:04
0

Логическое завершение темы здесь

Ответ дан 04.08.2015 - 09:23
1
  • Для улучшения зависимости фильтром можно использовать - https://www.drupal.org/project/faceted_search
  • А иначе, если всем материалам - то зависимые фильтра - не нужны, используйте обычные.
Ответ дан 02.08.2015 - 09:00
0

Нужно изменить тип фильтра. Вместо "Selective filter" выбрать, например "Имеет термин таксономии", или просто поле с термином.

Ответ дан 02.08.2015 - 09:03