Drupal 6 Drupal,视图公开过滤器:列出包含结果的选项

Drupal 6 Drupal,视图公开过滤器:列出包含结果的选项,drupal-6,views,Drupal 6,Views,我正在建立一个公寓搜索网站,并公开了“属性类型”的视图过滤器。属性类型是一个包含16个选项的选择字段,但客户端只希望那些实际包含结果的选项出现在公开过滤器的下拉列表中 有什么想法吗 谢谢 您可以使用form\u alter,查看:,或用于特定于公开筛选器的用法。您可以使用form\u alter,查看:,或用于特定于公开筛选器的用法。这就是您想要的 查看选择性暴露过滤器 在列表和复选框公开的过滤器上,可以指定过滤器选项“将列表限制为结果集”,以仅显示视图结果中实际返回的值。过滤器选项“活动过滤器

我正在建立一个公寓搜索网站,并公开了“属性类型”的视图过滤器。属性类型是一个包含16个选项的选择字段,但客户端只希望那些实际包含结果的选项出现在公开过滤器的下拉列表中

有什么想法吗


谢谢

您可以使用form\u alter,查看:,或用于特定于公开筛选器的用法。

您可以使用form\u alter,查看:,或用于特定于公开筛选器的用法。

这就是您想要的

查看选择性暴露过滤器 在列表和复选框公开的过滤器上,可以指定过滤器选项“将列表限制为结果集”,以仅显示视图结果中实际返回的值。过滤器选项“活动过滤器的进一步限制列表”将显示的值限制为查看通过应用公开的过滤器值获得的结果。

这就是您想要的

查看选择性暴露过滤器
在列表和复选框公开的过滤器上,可以指定过滤器选项“将列表限制为结果集”,以仅显示视图结果中实际返回的值。过滤器选项“活动过滤器的进一步限制列表”将显示的值限制为查看通过应用公开的过滤器值获得的结果。

在Drupal 8中,我只能显示带有以下代码的结果的标签。 请注意,我使用的是更好的公开过滤器contrib模块,并将我的过滤器显示为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;
    }
  }
}

这篇文章是一个很大的帮助:

在Drupal8中,我能够使用以下代码仅显示带有结果的标记。 请注意,我使用的是更好的公开过滤器contrib模块,并将我的过滤器显示为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;
    }
  }
}

这篇文章是一个很大的帮助:

对于Drupal 8,我发现这个模块非常有用:


这适用于基于分类术语的字段。

对于Drupal 8,我发现这个模块非常有用:


这适用于基于分类术语的字段。

上述代码不适用于多语言网站。上述代码不适用于多语言网站。