使用Drupal7、Views3和Node引用模块,我使用一个视图来填充自定义内容类型上的节点引用字段。(因此它是"Reference“显示类型的视图。)
我只希望过滤此视图以显示(并允许用户选择):
过滤器1和2始终是强制性的;那么过滤器3或4也必须是强制的。我知道我可以将过滤器重新排列成过滤器组来完成这项工作。问题是我无法找到构建过滤器4的方法。
对于过滤器3,我必须引入一个类型为"Content: Author“的关系,这使得出现了许多新的过滤器,包括我为过滤器3(节点作者==当前用户)使用的”用户:当前“。
对于过滤器4,我需要根据当前用户(而不是作者)的角色进行筛选,而我无法找到如何进行筛选。
在过滤器列表中有一个新的“用户:角色”过滤器可用,但它只引用“内容:作者”关系,因此它只检查节点作者的角色。这不是我需要的。
我猜我必须添加一个新的关系来导入当前的用户数据(类似于" user : current"),然后对该数据进行筛选,但是我在屏幕中找不到这一点。
知道怎么做吗?
提前谢谢。
更新:
注意:在编辑节点引用字段(在我的自定义内容类型中)时,我看到有一个“视图参数”字段,允许将参数传递给视图。还不清楚这个字段是否接受令牌,但如果是,也许我可以使用该字段将当前的用户ID传递给View。但我不知道如何在视野中使用它..。
发布于 2013-12-31 22:01:32
在发布same question on drupal.stackexchange之后,我被建议使用视图中的一些PHP代码(上下文过滤器)解决方案。这是我找到的最好的解决方案,所以除非有人能提出更好的解决方案,否则我会坚持这个方案。
以下是解决方案:https://drupal.stackexchange.com/questions/38205/alter-field-settings-using-hook/38922#38922
这就是它的要点:
在视图中,在Author: Uid上添加上下文过滤器,并使用以下设置:
当筛选值不可用时,:
使用以下代码:
global $user;
if (in_array('administrator', $user->roles))
{return -1;}
else
{return $user->uid;}当筛选值可用或提供默认值时,为
使用以下代码:
if ($argument == -1)
{return FALSE;}
else
{return TRUE;}就这样!
备注:
与我最初的设置相比,关系(内容:作者)不再需要了;“作者”过滤器也不再需要了(反正它是由关系带来的)。
对于Drupal 6,第一个PHP片段中的条件应该是if (in_array('super user', array_values($user->roles)))
您也可以允许其他角色,只需编辑上面的条件。例如:
if (
in_array('administrator', $user->roles) ||
in_array('editor', $user->roles)
)发布于 2013-12-30 13:35:39
添加作者关系后,应该有一个新的筛选标准User: Roles。
在视图筛选条件中,需要将2筛选组与或组合起来;第一组包含过滤器1、2和3,另一组应包含过滤器1、2和4。
https://stackoverflow.com/questions/20840490
复制相似问题