Как загрузить поле пользователя в комментарий предварительной обработки шаблона()


Я добавил поле страны для пользователей и хочу показать его под именем пользователя в комментариях (в теме "Бартик"). Как я могу загрузить это поле в функцию bartik_preprocess_comment()?

 3
Author: Laxman13, 2011-09-14

2 answers

Drupal уже загружает объект пользователя. Вы можете увидеть объект пользователя в этой функции:

function bartik_preprocess_comment($variables) {
  $user = $variables['user'];
  // Full load user
  $user = user_load($user->uid);
  // Now access your field
  $country = field_get_items('user', $user, 'field_country');
  if ($country) {
    $variables['author_country'] = $country[0]['safe_value'];
  }
  else {
    $variables['author_country'] = '';
  }
  // On your comment.tpl.php using $author_country
}
 5
Author: Sang Le Thanh, 2011-09-14 21:18:55

Template_preprocess_comment(), функция предварительной обработки, которая вызывается перед MODULE_preprocess_HOOK() и THEME_preprocess_HOOK(), использует $variables['user'], но из кода, который она использует, я беру, что переменная содержит объект пользователя для пользователя, который просматривает комментарий; в противном случае класс CSS, который он добавляет, не был бы "комментарием для просмотра" ($comment->uid - идентификатор пользователя для автора комментария).

if ($comment->uid === $variables['user']->uid) {
  $variables['classes_array'][] = 'comment-by-viewer';
}

Если вы хотите загрузить любое поле, связанное с пользователем, создавшим комментарий, вы можете использовать $comment->uid, и передайте его в user_load(). Фактически, template_preprocess_comment() содержит следующий код, что означает, что $comment->uid является идентификатором пользователя пользователя, создавшего комментарий; после сравнения с $variables['node']->uid код может сказать, что комментарий был создан автором узла.

if ($comment->uid == $variables['node']->uid) {
  $variables['classes_array'][] = 'comment-by-node-author';
}
 3
Author: kiamlaluno, 2014-05-08 16:22:57