这是 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;
}
}
我们在这里不需要做太多事情:只需用我们的用户列表填充选项数组,其余的由父类处理。
有关更多信息,请参阅:
关于Drupal Views 将作者姓名的过滤器显示为下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881718/