2014-02-09 2 views
0

내 의견이 필요한 Fivestar 평가 필드는 '별'이라고 나는 다음과 같은 사용자 정의 모듈을 숨겨왔다 (참조 : 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와 다른지 확인하는 것으로 충분합니다. 마지막으로, 새 코멘트를 남길 때 별을 선택해야 할 의무가 보존되어야한다는 표시를하십시오! 편집


:

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

올바른 무엇 : 나는 다음과 같은 오류를 얻을 수 있기 때문에,

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'] 잘 정의되지 않은 : 나는 다음 코드를 시도 암호?

+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에 필요합니다.

관련 문제