获取用户的个人资料图片网址

时间:2016-03-09 04:24:54

标签: drupal twig drupal-8

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

  

Entity Reference to User

在此内容类型的内容上,我设置了团队成员。

  

Team Members set on Content

如何在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循环甚至不会循环,这意味着这种方法对我网站的访问者不起作用,所以必须采用不同的方法。

2 个答案:

答案 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上,必须为匿名用户

检查“查看用户信息”字段

Permission Setting

答案 1 :(得分:0)

通过将{{ entity.field.0 }}替换为{{ entity.field.value }}{{ entity.field.0.value }},我得到了类似的工作。

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

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