如何在编辑其他用户的评论时隐藏Fivestar字段?

时间:2014-02-09 17:20:24

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

我对文章的评论有一个名为'Stars'的必需Fivestar评级字段,我用以下自定义模块隐藏它(参见: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']);
    }
  }
}

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

我该怎样防止这种情况?只需检查编写注释的用户的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()中的值”。

什么是正确的代码?

1 个答案:

答案 0 :(得分:0)

编辑中的代码不起作用,因为在提交之前$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.这就是为什么第二个AND中的if是必需的。