这是Drupal Views exposed filter of Author name的后续问题。以下问题得到了回答并且有效。我可以按用户名过滤视图。输入用户名是通过键入框输入的,然后该框自动完成。而不是这样做我希望用户列表作为下拉列表。我只需要一个用户被选中。你知道这是否可能吗?
答案 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)
是的,这是可能的。它不是特别难以做到这一点......但它有点单调乏味。您需要创建两个视图
Users
的视图)。此用户列表显示为下拉列表而不是列表(使用跳转菜单视图样式)。单击此下拉列表中的任何用户将使用所选用户的uid(用户ID)作为URL中的参数调用第二个视图。这个视图是一个块。详细步骤
Users
的新视图,而不是您经常输入的Node
创建。在字段中添加User:
Name
和User: uid
。为了
User: uid
的设置,请确保
你点击Rewrite the output of
the field
。重写的输出
该领域应该是
my_node_list/[uid]
。确保你
选中exclude from display
复选框。Style
设置中,选择Jump Menu
样式。单击样式的设置。确保Path
下拉列表User: uid
选择User Drop Down
User Drop Down
添加到主题中的任意区域,例如内容顶部(通常是最好的)或左侧边栏。通过设置块可见性设置,确保仅在网址my_node_list/*
和my_node_list
上显示该块Node
类型的视图。添加参数字段User: uid
。添加您感兴趣的字段,例如Node: title
,User: Name
等。my_node_list
http://yoursitename/my_node_list
答案 2 :(得分:-1)
答案 3 :(得分:-2)
我认为您只需选择“分类法:术语分类学术语ID”而不是“名称”。
答案 4 :(得分:-3)