2010-07-02 35 views
1

这是一个很奇怪的问题,但并不理想,但基本上我们有一个Drupal站点,它使用核心注释模块来允许经过身份验证的用户发布和查看节点的注释。我们现在需要对此进行扩展,以便未经身份验证的用户也可以发表评论,但不能查看它们。经过身份验证的用户只能查看其他经过身份验证的用户的评论。只有管​​理员用户才能查看所有评论。控制哪些注释是基于Drupal中的角色显示的

有没有办法做到这一点?权限似乎不允许这种灵活性(访问评论是需要给用户的表单,但显示所有批准的评论)。

我已经研究过使用一些Drupal钩子,但据我所见,只有hook_comment函数发生在评论已被检索后发生(也许有利用这个的好方法,但是我的头脑已经空白)。

有什么建议吗?我赞赏隐藏某些用户的评论,但允许他们发布这些评论可能不是最佳做法;然而,我需要与我们已有的东西一起工作。

回答

1

我可以想办法解决这个问题,但这不是最好的解决方案。

  1. 使用您自己的权限创建自定义模块。
  2. 覆盖用于呈现注释的标准主题函数。你应该有评论对象可用,所以它应该很容易看到评论是来自匿名用户还是注册用户,并且可以检查用户应该能够看到哪些评论。

现在有在这几个问题,如评论可以线程,因此从理论上讲,有可能在一个线程评论将丢失造成混乱和可能的其他错误。

但正如我所说,这是一个快速和肮脏的修复,与你有什么。

+0

感谢您的回应,我将使用自定义模块方法并使用hook_db_rewrite_sql()(我一直在遗忘)向评论查询添加一些附加条件。我想尝试将它们全部保存在模块中,并保留在模板之外,因为我们可能会在稍后的阶段重新组织该网站。 我不应该有线程评论的问题,但这是一个很好的观点。 – drmonkeyninja 2010-07-02 12:24:26

0

难道你不能使用评论管理队列来实现这个吗?检查评论模块的设置(在admin/content/comment)。

您可以在主题template.php中设置您是否希望匿名用户通过检查用户是否已登录来查看评论,如果他们不是,则不显示评论。

如:

function mytheme_preprocess_comment(&$vars, $hook) { 
    global $user; 
    if (!$user->uid) { 
    unset($vars); 
    } 
} 

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

if (isset($content)) :

要检查是否注释一直未设置,让你不渲染大量空白的div。

毫无疑问,有更好的方法可以做到这一点,包括使用钩子来避免为匿名用户加载注释,但是这些代码会在没有太多工作的情况下完成这项工作。

+1

除非我遗漏了一些东西,否则这将不会让已认证的用户看到匿名用户发表的评论。 – googletorp 2010-07-02 11:08:28

+0

您将通过使用审核队列来控制它们。管理员用户会看到所有,auth用户只会看到批准,而匿名用户则看不到任何用户。您设置了经过身份验证的用户的“未经批准发布评论”权限。 – cam8001 2010-07-02 13:20:48