我正在使用Drupal 8和Twig。我有一个内容类型,其中包含“团队成员”字段,该字段是对用户的实体引用。
在此内容类型的内容上,我设置了团队成员。
如何在Twig模板中获取这些用户个人资料图片的网址?
我尝试过:
{% 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实体,但无法看到从此处获取配置文件图片网址的方法
我还想到了:
{% for key, item in content.field_team_members if key|first != '#' %}
{{ item['#options'].entity.user_picture.0 }}
{% endfor %}
会显示图像,但收到错误。
该网站遇到意外错误。请稍后再试。
异常:Drupal \ image \ Plugin \ Field \ FieldType \ ImageItem类型的对象不能&gt;打印。在Drupal \ Core \ Template \ TwigExtension-&gt; escapeFilter()(&core; lib / lib / Drupal / Core / Template / TwigExtension.php的第441行)。
另外,我注意到“content.field_team_members”数组包含不同的数据,具体取决于我是否登录Drupal。如果我没有登录,for循环甚至不会循环,这意味着这种方法对我网站的访问者不起作用,所以必须采用不同的方法。
答案 0 :(得分:1)
我通过在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());
}
因此可以通过Twig访问URL:
{% for key, item in content.field_team_members if key|first != '#' %}
<img src="{{ item['imgUrl'] }}" />
{% endfor %}
第二个问题
“content.field_team_members”数组包含不同的数据,具体取决于我是否登录Drupal
已根据权限解决。在example.com/admin/people/permissions上,必须为匿名用户
检查“查看用户信息”字段答案 1 :(得分:0)
通过将{{ entity.field.0 }}
替换为{{ entity.field.value }}
或{{ entity.field.0.value }}
,我得到了类似的工作。
所以,在你的情况下{{ item['#options'].entity.user_picture.value }}
。
我不确定这是否是“正确的”方法,但它似乎适用于我的数据。