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

Lin*_*nda 14 drupal drupal-views drupal-6

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

小智 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
Run Code Online (Sandbox Code Playgroud)

(文件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);
}
Run Code Online (Sandbox Code Playgroud)

然后在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',
      )
    )
  );
}
Run Code Online (Sandbox Code Playgroud)

请注意,我们将author_select过滤器的机器名称,定义的过滤器handler('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;
  }
}
Run Code Online (Sandbox Code Playgroud)

我们在这里没有做太多的事情:只使用我们的用户列表填充options数组,其余部分由父类处理.

有关更多信息,请参阅


Sid*_*iya 17

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

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

详细步骤

  1. 下载Ctools模块 http://drupal.org/project/ctools 启用混沌工具模块.这个模块提供了一个名为"Jump Menu"的Views Style插件
  2. 创建一个通常创建的类型Users和NOT类型的新视图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到主题中的任何区域,例如Content Top(通常是最好的)或左侧边栏.确保该块仅在URL处可见,my_node_list/*my_node_list通过设置块可见性设置
  7. 现在创建另一个类型的视图Node.添加参数字段User: uid.添加字段您有兴趣例如Node: title,User: Name等等.
  8. 添加页面显示.让页面在网址上my_node_list
  9. 保存视图.使用系统上的用户列表测试下拉列表http://yoursitename/my_node_list