Drupal 8 - 在树枝或预处理文件中获取图像宽度/高度/ alt /等..

时间:2016-03-18 15:10:15

标签: drupal-8

我实际上是想在预处理文件中获取图像的宽度和高度。

我设法使用管理员中的媒体/样式中定义的样式生成图像,但我无法渲染生成的图像的宽度和/或高度(有些人会说我应该硬编码它在twig文件中但我真的有兴趣学习如何获取我以后需要的元素:))

以下是我用来获取特定内容类型的图片的方法: 让我们假设我的字段的机器名称是" field_image"我的内容类型是"文章";

if(!empty($node->field_image->entity->getFileUri())){
    $style = ImageStyle::load('medium');
    $image = $node->field_image->entity;
    $variables['image'] = [
        'src' => $style->buildUrl($image->getFileUri())
    ];
}

之后,我需要在node-article.tpl.php中做的所有事情是:

<img src="{{ image.src }}" />

但是我也试图获得宽度和高度属性,有没有人设法解决这个问题呢?

感谢&#39;!小号

2 个答案:

答案 0 :(得分:4)

if ($node = \Drupal::routeMatch()->getParameter('node')) {
    if ($node->hasField('field_image')) {
        $imageField = $node->field_image;
        $properties = $imageField->getProperties();
    }
}

$ properties将包含您要求的属性数组。 $ imageField是Drupal \ image \ Plugin \ Field \ FieldType \ ImageItem类的一个实例。您可以在此处阅读文档https://api.drupal.org/api/drupal/core%21modules%21image%21src%21Plugin%21Field%21FieldType%21ImageItem.php/class/ImageItem/8.2.x

答案 1 :(得分:0)

这是我找到的最简单的解决方案

if ($node = \Drupal::routeMatch()->getParameter('node')) {
    if ($node->hasField('field_image')) {
        //get first image on multi value field
        $image = $node->field_image[0]->getValue();

        $width = $image['width'];
        $height = $image['height'];
    }
}