在menu.html.twig

时间:2018-03-24 19:17:27

标签: drupal twig drupal-8 drupal-theming

我想在 menu.html.twig 模板中显示用户图片(头像)和其他一些字段。

我知道我们可以在user.html.twig模板中显示这些字段。

{{ content.user_picture }}
{{ user.getDisplayName() }}
{{ content.field_name_user[0] }} 

等等。

但我想在 menu.html.twig 模板中显示这些字段。

我认为。我们可以在preprocess_block()中创建一个变量并打印所需的值。 或者,如果模板中没有必要的变量 - 请在此模板的预处理器中执行此操作!

帮助我们就此问题做出决定。你需要写什么代码。

2 个答案:

答案 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 }}