我想在 menu.html.twig 模板中显示用户图片(头像)和其他一些字段。
我知道我们可以在user.html.twig模板中显示这些字段。
{{ content.user_picture }}
{{ user.getDisplayName() }}
{{ content.field_name_user[0] }}
等等。
但我想在 menu.html.twig 模板中显示这些字段。
我认为。我们可以在preprocess_block()中创建一个变量并打印所需的值。 或者,如果模板中没有必要的变量 - 请在此模板的预处理器中执行此操作!
帮助我们就此问题做出决定。你需要写什么代码。
答案 0 :(得分:0)
最好编写预处理并定义变量并在其中插入所需的元素。
hook_preprocess_menu__menu_name(array &$variables) {
$userDetails = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
/**
fetch the desired elements and pass to $variables eg:
**/
$variables['userPictureUrl'] = $userDetails->user_picture->entity->url();
}
答案 1 :(得分:0)
您可以使用hook_preprocess_menu:
function YOURMODULE_preprocess_menu(&$variables)
{
$uid = \Drupal::currentUser()->id();
if($uid > 0)
{
// Load user
$user = User::load($uid);
$userName = $user->getUsername();
// If user have a picture, add it to variable
if(!$user->user_picture->isEmpty()){
$pictureUri = $user->user_picture->entity->getFileUri();
// Add style to picture
$userPicture = [
'#theme' => 'image_style',
'#style_name' => 'profile_picture',
'#uri' => $pictureUri,
];
}
// Set variables
$variables['MYMODULE'] = [
'profile_name' => $userName,
'profile_picture' => $userPicture,
'profile_id' => $userId
];
}
}
在menu.html.twig文件中显示结束:
{{ YOURMODULE.profile_name }}
{{ YOURMODULE.profile_picture }}
{{ YOURMODULE.profile_id }}