Drupal, Представленные фильтры: параметры списка, содержащие результаты - PullRequest
2 голосов
/ 02 сентября 2010

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

Ответы [ 4 ]

0 голосов
/ 18 апреля 2019

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

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

0 голосов
/ 13 мая 2013

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

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

0 голосов
/ 27 июня 2018

В Drupal 8 мне удавалось отображать только теги с результатами со следующим кодом.Обратите внимание, что я использую модуль Contribute 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;
    }
  }
}

Эта статья очень помогла:

0 голосов
/ 30 декабря 2010

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

...