获取用户的个人资料图片 url

Get a user's profile picture url

我正在使用 Drupal 8 和 Twig。我有一个包含字段“团队成员”的内容类型,它是对用户的实体引用。

在这个Content Type的Content上我设置了Team Members。

如何在我的 Twig 模板中获取这些用户个人资料图片的 URL?


我尝试过的:

{% for key, item in content.field_team_members if key|first != '#' %}
    <p>{{ dump(item['#options'].entity.user_picture.0|keys) }}</p>
{% endfor %}

这导致:

array(5) {
  [0]=>
  string(9) "target_id"
  [1]=>
  string(3) "alt"
  [2]=>
  string(5) "title"
  [3]=>
  string(5) "width"
  [4]=>
  string(6) "height"
}

我可以获取 user_picture 实体,但无法从中获取个人资料图片 url

我也认为通过这样做:

{% for key, item in content.field_team_members if key|first != '#' %}
    {{ item['#options'].entity.user_picture.0 }}
{% endfor %}

会显示图像,但我收到错误消息。

The website encountered an unexpected error. Please try again later.

Exception: Object of type Drupal\image\Plugin\Field\FieldType\ImageItem cannot > be printed. in Drupal\Core\Template\TwigExtension->escapeFilter() (line 441 of > core/lib/Drupal/Core/Template/TwigExtension.php).

此外,我注意到“content.field_team_members”数组包含不同的数据,具体取决于我是否登录到 Drupal。如果我没有登录,for 循环甚至不会循环,这意味着这种方法对我网站的访问者不起作用,所以必须有不同的方法。

我通过向我的 mythemename.theme 文件添加一个预处理函数来解决这个问题,该文件将个人资料图片 URL 添加到暴露给 Twig 的 $variables 数组。

预处理函数:

function mythemename_preprocess_ds_1col__node_portfolio_item(&$variables) {

  $teamMembers = array_filter(array_keys($variables['content']['field_team_members']), 'is_int');
  $teamMembersCount = count($teamMembers);

  for ($i = 0; $i < $teamMembersCount; $i++ ) {
    $user = &$variables['content']['field_team_members'][$i];
    $user['imgUrl'] = file_create_url($user['#options']['entity']->user_picture->entity->getFileUri());
  }

所以 URL 可以通过 Twig 访问:

{% for key, item in content.field_team_members if key|first != '#' %}
    <img src="{{ item['imgUrl'] }}" />
{% endfor %}

第二题

"content.field_team_members" array contains different data depending on whether I am logged into Drupal or not

已根据权限解决。例如。com/admin/people/permissions "View User Information" 字段必须检查匿名用户

Permission Setting

我将 {{ entity.field.0 }} 替换为 {{ entity.field.value }}{{ entity.field.0.value }}

所以,在你的情况下 {{ item['#options'].entity.user_picture.value }}

我不确定这是否是 "correct" 方法,但它似乎适用于我的数据。