如何在 Drupal 8 中使用 Twig 获取 field_image 路径

Posted

技术标签:

【中文标题】如何在 Drupal 8 中使用 Twig 获取 field_image 路径【英文标题】:How to get the field_image path with Twig in Drupal 8 【发布时间】:2016-05-05 13:59:58 【问题描述】:

为了制作动画滑块,我在自己的模板中覆盖了一个字段视图模板文件,名为:views-view-fields--slider.html.twig

在该文件中,我可以访问字段数组以打印出我的内容类型 slide 中的所有字段。

问题是我需要获取图像文件的路径而不是图像本身,因为我需要 CSS 背景图像样式的路径。

以下不起作用:

<div class="jumbotron " ref="" style="background-image:url(?????);">
    file_url(fields.field_image.entity.fileuri) 
</div>

我尝试了所有我在 Google 上找到的好东西:

fields.field_image.entity.uri
fields.field_image.entity.uri.value
fields.field_image.entity.url
fields.field_image.entity.url.value

等等

有人知道在 Drupal 8 中是如何完成的吗?

【问题讨论】:

【参考方案1】:

由于您处于未格式化的视图中,您应该已经可以使用 row.content 单独访问您的内容类型的每个字段幻灯片,因此您必须这样做:

file_url(row.content.field_image.entity.fileuri)

【讨论】:

对不起我的错误。上面的 jumbotron div 在views-view-fields--slider.html.twig 内,我还有一个周围的文件views-view-unformatted--slider.html.twig 正在打印row.content。 row.content.field_image.entity.fileuri 还是空的 :( 好的,那你可以试试 file_url(fields.field_image['#items'].entity.fileuri) 对不起,输出还是空的。 /【参考方案2】:

试试 file_url(row._entity.field_image.entity.uri.value) 。 它对我有用。

<div style="background-image:url( file_url(row._entity.field_image.entity.uri.value) );"></div>

【讨论】:

【参考方案3】:

我找到了这个模块:image_url_formatter,所以在查看界面,我可以用它来格式化我的图像文件作为路径。

它工作得很好,但是如果我打开了 twig 调试,它就不起作用了,因为它会输出调试注释。我还不知道怎么解决。

我用fields.field_image.content显示路径,不知道是不是rignt。


没有额外模块的解决方案:

在你看来:

1.将您的图片添加到高级/关系中

2.然后在filed部分,更改为File Group,你可以看到URI字段,添加它,并确保你选中“显示文件下载URI”

3.在树枝模板中添加新字段: field.uri.content

完成!

【讨论】:

感谢您提及此模块。我也不确定为什么需要一个额外的模块,应该有一个 entity.fileuri 或类似的东西。 content.field_image['#items'].entity.uri.value 在“节点”模板中工作,在“视图”模板中,字段没有“实体”属性 感谢关系解决方案有效,只有路径周围的树枝调试输出会破坏我的内联背景图像 css 行

以上是关于如何在 Drupal 8 中使用 Twig 获取 field_image 路径的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 8 在 Twig 模板中渲染内容

如何在drupal 8中的主题字段

从 8 升级到 Drupal 9 出现 Twig 相关错误

Drupal 8添加javascript并使用自定义模块在钩子中传递数据

块内主题化 Drupal 8

php 基于内容类型的Drupal 8自定义页面模板(建议)(页面 - [content-type] .html.twig)