0

我对文章的评论有一个必需的 Fivestar 评级字段,称为“Stars”,我使用以下自定义模块将其隐藏(请参阅:https ://drupal.stackexchange.com/questions/90629/how-to-hide-rating-field-何时向自己的节点添加评论):

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']);
    }
  }
}

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

我怎样才能防止这种情况?检查写评论的用户的 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() 中的值”。

什么是正确的代码?

4

1 回答 1

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是必要的。

于 2014-02-09T23:49:34.820 回答