[英]How to hide Fivestar rating field programatically after first comment?
[英]How to hide Fivestar field when editing a comment from another user?
我對文章的評論中有一個必填的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']);
}
}
}
作為管理員,我有權編輯其他用戶的評論。 假設用戶對自己的文章發表了評論。 這意味着由於上面的代碼,他不必設置“ 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()中的值”。
什么是正確的代碼?
編輯中的代碼不起作用,因為在提交之前不存在$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']
#value $form['uid']['#value']
返回編寫評論的用戶的uid。 僅當編輯注釋時,該值才不同於0。 當用戶編寫新注釋時,表單中的uid為0。這就是為什么if
需要的if
,第二個AND
的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.