关于分类术语和用户角色的Drupal过滤器视图

时间:2013-01-03 19:46:12

标签: drupal drupal-7 drupal-views

我有一个相当基本的问题,但我无法解决如何解决它“好”。 我有一个包含日历信息的节点类型,我使用视图来使月视图渲染得很好,到目前为止一切都很好。 接下来的事情是让日历视图也包含“group_xyz”类型的节点,但只在用户登录时显示这些事件我设法通过使用几行PH​​P过滤来获取用户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

1 个答案:

答案 0 :(得分:4)

好的,这就是我用'Drupalish'方式做的事情:

  1. 在您的“知名度”词汇表中,我会添加字段作为角色参考(在Drupal 7术语中可以有自己的字段 - yay!)。您必须下载并启用Role Reference module才能设置此类型的字段。对于我的示例,我将称该术语的角色参考字段“可见性角色”
  2. 现在修改所有可见性术语并为每个术语填写新创建的角色字段,主要设置哪个角色适用于哪个术语。我想你可以直接在节点上有一个角色引用,而不是在术语的后面,但这取决于你
  3. 在您的视图中,添加关系“内容:可见性”或该术语的任何内容
  4. 最后,添加一个上下文过滤器,将“可见性”字词中的角色与当前用户的角色进行比较。只有在添加了上述关系后,才会在可用的上下文过滤器列表中弹出“可见性角色”字段。选择它作为上下文过滤器。选择“提供默认值”和“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);
    
  5. * 最后,请确保展开上下文过滤器下的“更多”选项,然后选择允许此过滤器使用多个值。

    尝试一下,让我们知道这是否适合您!我测试了它,它似乎对我有用。