【发布时间】: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