Drupal, просмотры открытых фильтров: параметры списка, содержащие результаты

Я настраиваю сайт поиска квартир и выставляю фильтр просмотров для «типа собственности». Тип свойства - это поле выбора с 16 параметрами, но клиент хочет, чтобы только те параметры, которые фактически содержат результаты, отображались в раскрывающемся списке открытого фильтра.

Любые идеи?

Спасибо!


person Tim Wooten    schedule 02.09.2010    source источник


Ответы (4)


Вы можете использовать form_alter. Взгляните на: http://drupal.org/node/463990 или http://drupal.org/project/better_exposed_filters для использования только с открытыми фильтрами.

person Dot    schedule 30.12.2010

это то, что вы хотите http://drupal.org/project/views_hacks#views_filters_selective

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

person TechNikh    schedule 13.05.2013
comment
Приведенный выше код не работает для многоязычного сайта. - person Munish Kumar; 26.10.2018

В Drupal 8 я мог отображать только теги с результатами с помощью следующего кода. Обратите внимание, что я использую модуль Contrib Better Exposed Filters и отображаю свой фильтр как Select.

function mymodule_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form['#id'] == 'views-exposed-form-your-view-name-page') {

    if (array_key_exists('field_activities_target_id', $form)) {
      // Rewrite the default 'All' option
      if (!empty($form['field_activities_target_id']['#options']['All'])) {
        $option_default = ['All' => t('Choose a category')];
      }

      $options = $form['field_activities_target_id']['#options'];

      $connection = Database::getConnection();
      $query = $connection->select('node__field_activities', 'activities');
      $query->join('node_field_data', 'n', 'n.nid = activities.entity_id');
      $query->fields('activities', ['field_activities_target_id']);
      $query->fields('n', ['status']);
      $query->condition('activities.bundle', 'your_node_type_name');
      $query->condition('n.status', 1);
      $data = $query->distinct()->execute();

      $results = array_flip($data->fetchAll(\PDO::FETCH_COLUMN, 'field_activities_target_id'));
      $options = array_intersect_key($options, $results);

      // Rebuild the option select
      $form['field_activities_target_id']['#options'] = $option_default + $options;
    }
  }
}

Эта статья мне очень помогла: https://johndevman.com/only-show-options-in-a-views-exposed-filter-that-belong-to-result-set/

person romain ni    schedule 27.06.2018

Для Drupal 8 я нашел этот модуль очень полезным: https://www.drupal.org/project/selective_better_exposed_filters

Это работает для полей на основе taxonomy term.

person Eric Claeren    schedule 18.04.2019