获取用户的个人资料图片 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" 字段必须检查匿名用户
我将 {{ entity.field.0 }}
替换为 {{ entity.field.value }}
或 {{ entity.field.0.value }}
。
所以,在你的情况下 {{ item['#options'].entity.user_picture.value }}
。
我不确定这是否是 "correct" 方法,但它似乎适用于我的数据。
我正在使用 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" 字段必须检查匿名用户
我将 {{ entity.field.0 }}
替换为 {{ entity.field.value }}
或 {{ entity.field.0.value }}
。
所以,在你的情况下 {{ item['#options'].entity.user_picture.value }}
。
我不确定这是否是 "correct" 方法,但它似乎适用于我的数据。