根据Drupal中的角色控制显示哪些注释

根据Drupal中的角色控制显示哪些注释,drupal,drupal-6,drupal-comments,Drupal,Drupal 6,Drupal Comments,这是一个奇怪的问题,并不理想,但基本上我们有一个Drupal站点,它一直在使用核心评论模块,允许经过身份验证的用户发布和查看节点的评论。我们现在需要扩展它,以便未经验证的用户也可以发布评论,但不能查看它们。经过身份验证的用户只能查看其他经过身份验证的用户的评论。只有管理员用户才有权查看所有评论 有没有办法做到这一点?权限似乎不允许这种灵活性(需要access注释才能向用户提供表单,但会显示所有已批准的注释) 我已经研究过如何使用一些Drupal钩子,但据我所知,只有钩子注释函数在检索到注释后才会

这是一个奇怪的问题,并不理想,但基本上我们有一个Drupal站点,它一直在使用核心评论模块,允许经过身份验证的用户发布和查看节点的评论。我们现在需要扩展它,以便未经验证的用户也可以发布评论,但不能查看它们。经过身份验证的用户只能查看其他经过身份验证的用户的评论。只有管理员用户才有权查看所有评论

有没有办法做到这一点?权限似乎不允许这种灵活性(需要access注释才能向用户提供表单,但会显示所有已批准的注释)

我已经研究过如何使用一些Drupal钩子,但据我所知,只有钩子注释函数在检索到注释后才会出现(也许有一种很好的方法可以利用它,但我的脑子一片空白)


有什么建议吗?我喜欢对某些用户隐藏评论,但允许他们发表评论可能不是最佳做法;但是,我需要使用我们已经拥有的内容。

您不能使用评论审核队列来实现这一点吗?检查评论模块的设置(位于admin/content/comment)

您可以在theme template.php中设置是否希望匿名用户查看评论,只需检查用户是否已登录,如果未登录,则不显示评论

例如:

然后在comment.tpl.php的顶部:

if(isset($content)):

检查注释是否已取消设置,以便不呈现大量空div


毫无疑问,有更好的方法可以做到这一点,包括使用一个钩子来避免加载任何非用户的评论,但是这段代码将不用做很多工作就可以完成这项工作。

您不能使用评论调节队列来实现这一点吗?检查评论模块的设置(位于admin/content/comment)

您可以在theme template.php中设置是否希望匿名用户查看评论,只需检查用户是否已登录,如果未登录,则不显示评论

例如:

然后在comment.tpl.php的顶部:

if(isset($content)):

检查注释是否已取消设置,以便不呈现大量空div


毫无疑问,有更好的方法可以做到这一点,包括使用一个钩子来避免加载任何非用户的评论,但是这段代码将不用做很多工作就可以完成这项工作。

我可以想出一种方法来解决这个问题,但这不是最漂亮的解决方案

  • 使用您自己的权限创建自定义模块
  • 覆盖用于呈现注释的标准主题函数。您应该可以使用comment对象,这样就可以很容易地看到这些评论是来自匿名用户还是注册用户,并且可以检查用户应该能够看到哪些评论
  • 现在这里有一些问题,因为注释可以被线程化,所以理论上,线程中的注释可能会丢失,从而导致混乱和其他可能的错误


    但正如我所说,这是一个快速而肮脏的解决方案,用你所得到的。

    我可以想出一个解决这个问题的方法,但这不是最漂亮的解决方案

  • 使用您自己的权限创建自定义模块
  • 覆盖用于呈现注释的标准主题函数。您应该可以使用comment对象,这样就可以很容易地看到这些评论是来自匿名用户还是注册用户,并且可以检查用户应该能够看到哪些评论
  • 现在这里有一些问题,因为注释可以被线程化,所以理论上,线程中的注释可能会丢失,从而导致混乱和其他可能的错误


    但正如我所说,这是一个快速而肮脏的解决方案,你可以利用你所得到的。

    除非我遗漏了什么,否则这不会阻止经过身份验证的用户看到匿名用户的评论。你可以使用审核队列来控制他们。管理员用户将看到所有,身份验证用户将只看到已批准,匿名用户将看不到任何。您已将经过身份验证的用户设置为具有“未经批准发表评论”权限。除非我遗漏了某些内容,否则这不会阻止经过身份验证的用户看到匿名用户发表的评论。您可以使用审核队列对其进行控制。管理员用户将看到所有,身份验证用户将只看到已批准,匿名用户将看不到任何。您已将经过身份验证的用户设置为具有“未经批准发布评论”权限。感谢您的响应,我将使用自定义模块方法,并使用hook_db_rewrite_sql()(我一直忘了)向评论查询添加一些附加条件。我想试着把它们都放在一个模块中,不放在模板中,因为我们可能会在稍后的阶段重新设置网站的主题。我不应该对线程化注释有异议,但我会记住这一点。感谢您的回复,我将使用自定义模块方法,并使用hook_db_rewrite_sql()(我一直忘记了)向注释查询添加一些附加条件。我想试着把它们都放在一个模块中,不放在模板中,因为我们可能会在稍后的阶段重新设置网站的主题。我不应该对线程评论有异议,但我会记住这一点。
    function mytheme_preprocess_comment(&$vars, $hook) {
      global $user;
      if (!$user->uid) {
        unset($vars);
      }
    }