2014-02-09 30 views
0

我对文章的评论已被称为“星”所要求的五星评级领域,我用下面的自定义模块藏(请参阅:https://drupal.stackexchange.com/questions/90629/how-to-hide-rating-field-when-adding-comment-to-own-node):如何在编辑来自其他用户的评论时隐藏Fivestar字段?

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']并不明确,因为我得到以下错误:

"Notice: Undefined index: values in hiderating_form_alter()".

什么是正确的码?

+0

'$ form_state ['values']'仅在提交后才存在。如果用户是评论所有者或管理员(如“任何具有管理员角色的用户”所定义的),您是否希望移除field_stars字段? – bishop

+0

@bishop:当编写评论的用户的uid与编写评论的用户的uid不同时,不应显示“field_stars”。以上就足够了,因为只有编辑其他用户评论的用户才是具有管理员角色的用户。 – Jeroen

+0

所以问题归结为需要评论对象。我不在我的工作站附近尝试任何东西,所以我不想给出我无法审查的正确答案。你有权访问'$ form ['#node'] - > comment'?如果没有,你可以转储并发布'$ form'吗? – bishop

回答

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

相关问题