Как отобразить изображение текущего пользователя в модели TWIG?

#templates #drupal #twig #drupal-8

#шаблоны #drupal #twig #drupal-8

Вопрос:

Я создаю шаблон TWIG для домашней страницы моего сайта на Drupal 8.

 page--front.html.twig
  

Я хочу отобразить на этой странице фотографию текущего пользователя.

Как отобразить изображение текущего пользователя в модели TWIG?

Ответ №1:

Вы можете использовать этот код для получения изображения пользователя:

 $user = DrupaluserEntityUser::load(Drupal::currentUser()->id());

    if (!$user->user_picture->isEmpty()) {
      $displayImg = file_create_url($user->user_picture->entity->getFileUri());
    }else{
      $displayImg = '';    
    } 
  

Затем передайте его как переменную в twig, проверьте, пустое оно или нет, и в зависимости от этого распечатайте внутри какого-нибудь тега img.

https://www.drupal.org/forum/support/post-installation/2018-09-28/drupal-8-how-can-i-get-the-profile-picture-of-a-user

Обновить:

Чтобы получить URL-адрес в стиле изображения, вы могли бы сделать что-то вроде:

 $style = Drupal::entityTypeManager()->getStorage('image_style')->load('thumbnail');
$url = $style->buildUrl($displayImg);
  

Основано на: https://www.webomelette.com/how-render-your-images-image-styles-drupal-8

И вы должны назначить переменную twig из вашего контроллера домашней страницы.

Комментарии:

1. Спасибо, это пользовательский модуль или в файле .theme ? Есть ли другой способ сделать это? Например, я могу получить имя пользователя с помощью {{ user.displayname }} и идентификатор с {{ user.id }} непосредственно в годах TWIG. Я хотел бы отобразить изображение пользователя со стилем.

2. Обновлен мой ответ о том, как получить URL-адрес в стиле изображения. Извините, я не знаю лучшего решения для этого, даже если это звучит логично, чего вы ожидали.

3. Как мне следует поступить? вы должны поместить этот код в .theme или в пользовательский модуль?