我有一个相当基本的问题,但我无法解决如何解决它“好”。 我有一个包含日历信息的节点类型,我使用视图来使月视图渲染得很好,到目前为止一切都很好。 接下来的事情是让日历视图也包含“group_xyz”类型的节点,但只在用户登录时显示这些事件我设法通过使用几行PHP过滤来获取用户ID和节点类型,但已经在这里它并不像一个真正的drupalish解决方案......
对于我的问题,我们希望根据用户角色和节点中使用的分类术语来限制日历帖子的显示。
因此,节点具有分类术语引用“visibility_to”,可以设置(全部,内部,管理员)之一。 用户可以是访客,登录用户或管理员。
现在我想找到一个很好的方法来过滤:显示项目IF节点类型是日历AND((visibility_to ==“All”)OR((visibility_to ==“Internal”)AND(role = =“administrator”OR role ==“logged_in”)或(visisbility_to ==“Administrators”AND role ==“administrator”))
我认为你明白了......我想我可以设法在PHP中对此进行硬编码,但是当我们添加新角色,新分类术语时,我宁愿使用管理界面配置所有这些... < / p>
感谢任何帮助和/或建议。 也发布在drupal论坛:http://drupal.org/node/1879238
答案 0 :(得分:4)
好的,这就是我用'Drupalish'方式做的事情:
最后,添加一个上下文过滤器,将“可见性”字词中的角色与当前用户的角色进行比较。只有在添加了上述关系后,才会在可用的上下文过滤器列表中弹出“可见性角色”字段。选择它作为上下文过滤器。选择“提供默认值”和“PHP代码”作为选项。 输入以下php代码,将与节点术语关联的角色与当前用户的角色进行比较 :
global $user;
$current_roles = "";
foreach ($user->roles as $key => $val) {
$current_roles .= $key;
if ($val != end($user->roles)){ // If not last item, add a '+' which treats these as an or
$current_roles .= '+';
}
}
return($current_roles);
* 最后,请确保展开上下文过滤器下的“更多”选项,然后选择允许此过滤器使用多个值。
尝试一下,让我们知道这是否适合您!我测试了它,它似乎对我有用。