【问题标题】:How to hide Fivestar field when editing a comment from another user?编辑其他用户的评论时如何隐藏 Fivestar 字段?
【发布时间】:2014-02-09 17:20:24
【问题描述】:

我在文章中的 cmets 有一个必需的 Fivestar 评级字段,称为“Stars”,我使用以下自定义模块将其隐藏(请参阅:https://drupal.stackexchange.com/questions/90629/how-to-hide-rating-field-when-adding-comment-to-own-node):

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  if ($form_id == "comment_node_article_form") {
   if ($form['#node']->uid == $user->uid) { 
      unset($form['field_stars']);
    }
  }
}

作为管理员,我有权编辑其他用户的 cmets。假设用户评论了他自己的文章。这意味着由于上面的代码,他不必设置“星星”字段。但是当我尝试编辑该评论时,我确实必须为“星星”选择一个值。

如何防止这种情况发生?只需检查来自撰写评论的用户的 uid 与来自编辑评论的用户的 uid 是否不同就足够了。最后,请注意必须保留我自己发表新评论时选择星星的义务!


编辑:我尝试了以下代码:

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  $comment->uid = $form_state['values']['uid'];
  if ($form_id == "comment_node_article_form") {
   if ($comment->uid != $user->uid) { 
    unset($form['field_stars']);
    }
  }
}

显然,$form_state['values'] 定义不明确,因为我收到以下错误:

“注意:未定义的索引:hiderating_form_alter() 中的值”。

什么是正确的代码?

【问题讨论】:

  • $form_state['values'] 仅在提交后出现。尽管如此,如果用户是评论所有者或管理员(由“任何具有管理员角色的用户”定义),您是否要删除 field_stars 字段?
  • @bishop:当撰写评论的用户的 uid 与编辑评论的用户的 uid 不同时,不应显示 field_stars。以上就足够了,因为只有拥有管理员角色的用户才能编辑其他用户的 cmets。
  • 所以问题归结为需要评论对象。我不在我的工作站附近尝试任何事情,所以我不想给出一个我无法审查的正确答案。您可以访问$form['#node']->comment 吗?如果没有,您可以转储并发布$form吗?
  • @bishop:我试过dpm($form),经过长时间的搜索和尝试,我终于找到了答案。

标签: php drupal-7 drupal-comments drupal-fivestar


【解决方案1】:

编辑中的代码不起作用,因为$form_state['values'] 在提交之前不存在。这是正确的代码:

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  if ($form_id == "comment_node_article_form") {
   if ($form['uid']['#value'] != $user->uid AND $form['uid']['#value'] != 0) { 
    unset($form['field_stars']);
   }
  }
}

使用dpm($form),我发现$form['uid']['#value'] 返回了写评论的用户的uid。只有在编辑评论时,该值才不同于 0。当用户写新评论时,表单中的 uid 为 0。这就是为什么第二个 if 中的 AND 是必要的。

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2011-12-21
    • 2015-03-03
    • 2017-02-02
    • 2012-02-17
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多