从文章/实体获取图像


8

如何最轻松地从Drupal 8中包含的文章内容类型中获取图像(其路径)?

我拥有的是一个实体。不过,使用$image = $node->fields['field_image']给我带来了结构上的麻烦。

有没有更简单的方法来获取图像路径?我也找不到URL,我得到的是某种target_id(文件ID?)。


get_class ($node->fields['field_image'])给你什么?
克莱夫(Clive

它给了我Drupal \ file \ Plugin \ Field \ FieldType \ FileFieldItemList,它似乎只包含允许上传的内容。
Undrium 2014年

如果您迭代列表,则其成员是什么类型?我还没有检查,但是我希望能对该字段进行一些合理的输入。如果一切都失败了,你可以用file_load()和可用的方法之一的Drupal\file\FileInterface
克莱夫

我得到的是Drupal \ image \ Plugin \ Field \ FieldType \ ImageItem,但不确定如何正确处理。
Undrium 2014年

file_load是不得已的方法,但它已被贬低,感觉很不对劲。
Undrium 2014年

Answers:


17

以前没看到这个。

获取单值字段的引用实体的最短方法是:

$node->field_image->entity->url()

您还可以显式指定增量:

$node->field_image[0]->entity->url()

这适用于许多ArrayAccess和__get()魔术。

另请参阅出色的备忘单,网址http://wizzlern.nl/drupal/drupal-8-entity-cheat-sheet。和https://www.drupal.org/node/1795854以及那里的其他文档页面,以获取更多信息(仍在进行大量工作)。


真好!我想知道我们如何才能获得图像的高度。我尝试了$ node-> field_image [0]-> entity-> alt和$ node-> field_image [0]-> entity-> image-> alt; 我在您提到的文档中找到了它,但是它不适用于我认为的节点实体。
Hedeshy

1
alt / title不在引用的文件实体上,而是字段项本身。只是$ node-> field_image [0]-> alt应该可以正常工作。
贝尔迪尔'18

3

在D8中最终为我工作的是:

$imageUrl = $node->get('field_image')->entity->uri->value;

使用kint($node->get('field_image')->entity)和查看数组非常有帮助

在此处输入图片说明

然后在我的树枝文件中使用:

<img class="top-article-image" src="{{ file_url(imageUrl) }}" />

1

因此,我的解决方案是使用在nodeobject中找到的方法“ referencedEntities()”。这给了我一个文件对象数组,我可以对其进行迭代并使用文件对象中的方法“ url()”来检索有效路径。


0

如果您的节点有多个图像,则可以使用它来获取图像URL的数组(有助于在许多其他有用的东西之间制作幻灯片模块)

$allImagesFound = false;
$imageUrls = array();
$numberOfImages = 0;
while(!$allImagesFound)
{
    //make sure we are not calling a null value, if so then we have found all images
    if($node->get('your_image_field_name')[$numberOfImages] != null) {
        $imageUrls[] = $node->get('your_image_field_name')[$numberOfImages]->entity->url();
        $numberOfImages++;
    } else {
        $allImagesFound = true;
        break;
    }
}

imageUrls数组将保存与nodes字段关联的任何图像的所有URL。希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.