Drupal Views 将作者姓名的过滤器显示为下拉列表

标签 drupal drupal-6 drupal-views

这是 Drupal Views exposed filter of Author name 的后续问题.以下问题已得到解答并且有效。我可以按用户名过滤 View 。输入的用户名是通过在一个框中输入的,然后该框会自动完成。而不是这样做,我希望用户列表作为下拉列表。我只需要选择一个用户。你知道这是否可能吗?

最佳答案

为此,您需要一个自定义模块。

我以这种方式为 Drupal 7 完成了此操作:创建一个模块,例如 views_more_filters , 所以你有一个 views_more_filters.info像这样的文件:

name = Views More Filters
description = Additional filters for Views.
core = 7.x

files[] = views_more_filters_handler_filter_author_select.inc
files[] = views_more_filters.views.inc

(文件 views_more_filters_handler_filter_author_select.inc 将包含我们的过滤器处理程序)。

一个基本的views_more_filters.module文件:
<?php
/**
 * Implements of hook_views_api().
 */
function views_more_filters_views_api() {
  return array('api' => 3);
}

然后在 views_more_filters.views.inc 中定义您的过滤器:
<?php
/**
 * Implements of hook_views_data().
 */
function views_more_filters_views_data() {
  return array(
    'node' => array(
      'author_select' => array(
        'group' => t('Content'),
        'title' => t('Author UID (select list)'),
        'help' => t('Filter by author, choosing from dropdown list.'),
        'filter' => array('handler' => 'views_more_filters_handler_filter_author_select'),
        'real field' => 'uid',
      )
    )
  );
}

注意我们设置了author_select作为过滤器的机器名称,定义过滤器处理程序('handler' => 'views_more_filters_handler_filter_author_select')和我们将过滤的字段('real field' => 'uid')。

现在我们需要实现我们的过滤器处理程序。因为我们的过滤器功能就像默认 views_handler_filter_in_operator , 我们只是在 views_more_filters_handler_filter_author_select.inc 中扩展它的类文件:
<?php
/**
 * My custom filter handler
 */
class views_more_filters_handler_filter_author_select extends views_handler_filter_in_operator {

  /**
   * Override parent get_value_options() function.
   *
   * @return
   *   Return the stored values in $this->value_options if someone expects it.
   */
  function get_value_options() {
    $users_list = entity_load('user');

    foreach ($users_list as $user) {
      $users[$user->uid] = $user->name;
    }

    // We don't need Guest user here, so remove it.
    unset($users[0]);

    // Sort by username.
    natsort($users);

    $this->value_options = $users;

    return $users;
  }
}

我们在这里不需要做太多事情:只需用我们的用户列表填充选项数组,其余的由父类处理。

有关更多信息,请参阅:
  • Views API
  • Where can I learn about how to create a custom exposed filter for Views 3 and D7?关于 Drupal 答案
  • Demystifying Views API - A developer's guide to integrating with Views
  • Sophisticated Views filters, part2 - writing custom filter handler (in Russian, link to Google translator)
  • Tutorial: Creating Custom Filters in Views
  • 关于Drupal Views 将作者姓名的过滤器显示为下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881718/

    相关文章:

    Drupal 7用户注册: creating mandatory gender/city fields

    linux - 对于匿名用户来说,Drupal 菜单项和博客条目消失了

    drupal - 将drupal View 设置为随机页码

    mysql - Drupal 数据不采用孤立表 - 显然这是一个表前缀问题(不确定这意味着什么)?

    django - 如何从 Drupal 移植到 Django?

    svn - Drupal DATABASE 部署策略?

    drupal - 如何仅在某些页面 View 显示上显示 block

    PHP XML-导出为文件下载

    javascript - 使用 Drupal 在灯箱中打印 'node/add' 表单

    drupal-6 - 查看标记我的用户?