【问题标题】:Drupal filter view on taxonomy term and user role关于分类术语和用户角色的 Drupal 过滤器视图
【发布时间】:2012-12-18 05:40:17
【问题描述】:

我有一个相当基本的问题,但我不知道如何“很好”地解决它。 我有一个包含日历信息的节点类型,我使用视图来使月视图呈现得很好,到目前为止一切都很好。 接下来的事情是让日历视图也包含“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

【问题讨论】:

    标签: drupal drupal-7 drupal-views


    【解决方案1】:

    好的,我会以“Drupalish”的方式这样做:

    1. 在您的“可见性”词汇表中,我会添加一个作为角色引用的字段(在 Drupal 7 中,可以有自己的字段——耶!)。您必须下载并启用Role Reference module 才能设置此类字段。在我的示例中,我将术语的角色引用字段称为“可见性角色”
    2. 现在修改所有可见性术语并为每个术语填写新创建的角色字段,主要是设置哪个角色适用于哪个术语。我想您可以直接在节点上而不是在术语后面有角色引用,但这取决于您
    3. 在您看来,添加关系“内容:可见性”或任何该术语的名称
    4. 最后,添加一个上下文过滤器,将“可见性”术语中的角色与当前用户的角色进行比较。只有在您添加了上述关系后,才会在可用的上下文过滤器列表中弹出“可见性角色”字段。选择它作为您的上下文过滤器。选择“提供默认值”和“PHP 代码”作为您的选项。 输入以下 php 代码,将与节点的 term 关联的角色与当前用户的角色进行比较

      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);
      

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

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

    【讨论】:

    • 嗨,做了一个快速测试,它似乎工作。但是我在日历中有多个条目......没有时间测试是否是因为引用了多个术语或同一用户的多个角色......通过禁用“允许此过滤器的多个值”进行快速测试似乎得到了摆脱重复/三胞胎...
    • 后续问题:对于之前没有指定术语/角色的所有日历条目。为这些设置新的默认值的最简单方法是什么?或者可以在上下文过滤器中处理它吗?
    • 我很高兴它成功了!!花了一点时间才弄清楚!为了您的跟进:我没有使用它,但我会尝试使用以下模块对实体进行批量更新:drupal.org/project/views_bulk_operations.
    • 没有时间进一步测试。但这似乎有效,并且是迄今为止最好的解决方案,所以我会接受这一点。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多