Как скрыть поле Fivestar при редактировании комментария от другого пользователя?
Мои комментарии к статьям имеют обязательное поле рейтинга Fivestar, которое называется "Звезды", и я скрыл его с помощью следующего пользовательского модуля (см. 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']);
}
}
}
Как администратор, я имею право редактировать комментарии других пользователей. Предположим, что пользователь прокомментировал свою статью. Это означает, что ему не нужно было устанавливать поле "Звезды" из-за кода выше. Но когда я пытаюсь отредактировать этот комментарий, мне нужно выбрать значение для "Звезд".
Как я могу предотвратить это? Достаточно проверить, что 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']
не очень хорошо определен, потому что я получаю следующую ошибку:
Msgstr "Примечание: неопределенный индекс: значения в hiderating_form_alter()".
Какой правильный код?
1 ответ
Код в редакторе не работает, потому что $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']
возвращает идентификатор пользователя, написавшего комментарий. Значение отличается только от 0, если комментарий редактируется. Когда пользователь пишет новый комментарий, uid из формы равен 0. Поэтому AND
во-вторых if
является необходимым.