2

我有一个相当基本的问题,但我不知道如何“很好”地解决它。我有一个包含日历信息的节点类型,我使用视图来使月视图呈现得很好,到目前为止一切都很好。接下来的事情是让日历视图也包含“group_xyz”类型的节点,但仅在用户登录时显示这些事件我设法通过使用几行 PHP 过滤来获取用户 ID 和节点类型,但已经在这里,它感觉不像是一个真正的 drupalish 解决方案......

对于我的问题,我们希望根据用户角色和节点中使用的分类术语来限制日历帖子的显示。

因此,该节点有一个分类术语引用“visibility_to”,可以说是(All、Internal、Administrators)集合之一。用户可以是访客、登录用户或管理员。

现在我想找到一个像这样过滤的好方法:如果节点类型为日历 AND ( (visibility_to == "All") OR ( (visibility_to == "Internal") AND (role=="administrator) 则显示项目" OR role == "logged_in") OR (visisbility_to == "Administrators" AND role =="administrator"))

我想你明白了......我想我可以设法在 PHP 中硬编码,但是当我们添加新角色、新分类术语的那一天,我宁愿使用管理界面配置所有这些......

任何帮助和/或建议表示赞赏。还张贴在 drupal 论坛上:http ://drupal.org/node/1879238

4

1 回答 1

4

好的,这就是我如何以“Drupalish”的方式进行操作:

  1. 在您的“可见性”词汇表中,我会添加一个作为角色参考的字段(在 Drupal 7 中,术语可以有自己的字段——耶!)。您必须下载并启用角色参考模块才能设置此类字段。在我的示例中,我将术语的角色引用字段称为“可见性角色”
  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);
    

*最后,确保展开上下文过滤器下的“更多”选项,并选择允许此过滤器使用多个值。

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

于 2013-01-04T20:31:51.287 回答