Drupal 7 - 使用视图与过滤器的关系

时间:2012-06-14 02:12:58

标签: drupal drupal-7 views drupal-views

在视图中,我有一个公开的过滤器,用于查看UID(用户ID /作者),但是是否有办法将此限制为“仅限”已发布此内容类型的用户?

我尝试添加“内容:作者”关系并点击“应用”。我不确定为什么,但直到这一点,我才能回到关系并看到更多选项,例如:“用户:内容创作”(这必须依赖于第一个关系?)所以我也选择了那个并将其设置为: Relationship step 1 现在我能够进入暴露的过滤器并选择关系:

Relationship step 2 但这不起作用 - 暴露的过滤器继续显示所有注册用户。

我还尝试将用户引用字段(对于此内容类型)添加到关系中,但它不允许显示任何内容并给出此SQL警告:

SQLSTATE [42S22]:未找到列:1054'on子句'中的未知列'field_data_field_hidden_​​name.uid'

如何将此作者公开的过滤器限制为“仅”发布此内容类型的用户?

2 个答案:

答案 0 :(得分:0)

有一些drupal模块可以帮助你。例如Corresponding node references

但是,如果你熟悉php代码,你可以创建逻辑来查询数据库并返回所需的结果(这将是表的列)。创建一个上下文过滤器,然后选择一个字段(任何字段应该工作,但最好选择任何一种内容类型)。然后编辑它,当滤波器值不可用时 - >提供默认值 - > PHP代码

$nid = arg(1);// current node id
$query = "SELECT <desired_field_column_name> FROM {<field_data_table_name>} c 
WHERE c.<column_that_is_same_as_nid> = :nid";                                             
$result = db_query($query, array(':nid' =>$nid));
$id = array();
while ($row = $result->fetch())
{
                array_push($id, $row->field_curator_target_id);//put each node id that's referenced in array
}

$separated = implode("+", $id); // separate them by + for AND , for OR
return $separated; //eg.32 + 30 would represent nodes that you want.

答案 1 :(得分:0)

Linked theme中有关于视图选择性过滤器(又名“视图选择性暴露过滤器”,又名views_filters_selective,又名views_selective_filters)的答案。

此模块添加名称后缀为“(selective)”的过滤器 - 添加一个您需要的过滤器而不是带后缀的过滤器。