Как загрузить поле пользователя в комментарий предварительной обработки шаблона()
Я добавил поле страны для пользователей и хочу показать его под именем пользователя в комментариях (в теме "Бартик").
Как я могу загрузить это поле в функцию bartik_preprocess_comment()
?
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
}
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';
}