Drupal Views将作者名称的过滤器暴露为下拉列表

时间:2010-10-07 12:42:42

标签: drupal drupal-6 drupal-views

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

5 个答案:

答案 0 :(得分:25)

你需要一个自定义模块。

我已经通过这种方式为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;
  }
}

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

有关详细信息,请参阅:

答案 1 :(得分:17)

是的,这是可能的。它不是特别难以做到这一点......但它有点单调乏味。您需要创建两个视图

  1. 第一个视图是系统上的用户列表(类型为Users的视图)。此用户列表显示为下拉列表而不是列表(使用跳转菜单视图样式)。单击此下拉列表中的任何用户将使用所选用户的uid(用户ID)作为URL中的参数调用第二个视图。这个视图是一个块。
  2. 第二个视图是一个简单的Node列表。它是特定URL的页面视图。它需要1个参数,即用户的uid(用户ID)。
  3. 详细步骤

    1. 下载Ctools模块 http://drupal.org/project/ctools 启用混沌工具模块。这个 module提供了一个Views Style插件 称为“跳转菜单”
    2. 创建一个类型为Users的新视图,而不是您经常输入的Node 创建。在字段中添加User: NameUser: uid。为了 User: uid的设置,请确保 你点击Rewrite the output of the field。重写的输出 该领域应该是 my_node_list/[uid]。确保你 选中exclude from display复选框。
    3. 在视图中的Style设置中,选择Jump Menu样式。单击样式的设置。确保Path下拉列表User: uid选择
    4. 向视图添加块显示。将块命名为User Drop Down
    5. 保存视图
    6. 将广告块User Drop Down添加到主题中的任意区域,例如内容顶部(通常是最好的)或左侧边栏。通过设置块可见性设置,确保仅在网址my_node_list/*my_node_list上显示该块
    7. 现在创建另一个Node类型的视图。添加参数字段User: uid。添加您感兴趣的字段,例如Node: titleUser: Name等。
    8. 添加页面显示。让页面位于网址my_node_list
    9. 保存视图。使用http://yoursitename/my_node_list
    10. 系统上的用户列表测试下拉列表

答案 2 :(得分:-1)

答案 3 :(得分:-2)

我认为您只需选择“分类法:术语分类学术语ID”而不是“名称”。

答案 4 :(得分:-3)