Twig 访问Drupal 8视图模板中的单个字段
我在做一些我认为应该是相对简单的Drupal8视图的事情时遇到了困难 我有一种叫做国家的内容类型。我想在我的主页上的视图块中显示3个最新的国家/地区节点。每个国家/地区都显示在container div上的class views行中。我正在使用views-view-unformatted-countries-block_1.tpl模板化输出 我希望输出类似以下标记的内容:Twig 访问Drupal 8视图模板中的单个字段,twig,views,templating,drupal-8,Twig,Views,Templating,Drupal 8,我在做一些我认为应该是相对简单的Drupal8视图的事情时遇到了困难 我有一种叫做国家的内容类型。我想在我的主页上的视图块中显示3个最新的国家/地区节点。每个国家/地区都显示在container div上的class views行中。我正在使用views-view-unformatted-countries-block_1.tpl模板化输出 我希望输出类似以下标记的内容: <a class="view-row-1" href="/link/to/node"> <img
<a class="view-row-1" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
<a class="view-row-2" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
<a class="view-row-3" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
我遇到的问题是访问模板中的各个字段。如果使用视图模式,则可以访问各个字段。如果我选择在视图中显示字段,我可以为视图结果计数器和路径添加字段,这将允许我添加view-row-N类并将a标记链接到节点,但我无法单独访问字段。我有{{row.content}}变量,但任何进一步挖掘变量如row.content.field_name的尝试都不会给我带来任何结果,调用{{dumprow.content}会使网站崩溃
我无法将其输出为视图模式,原因有二。在视图模式下,我无法访问“查看结果计数器”或“路径”字段,即使我有这些变量,某些字段也会嵌套在其他字段中。图像和标题嵌套在
我觉得这应该很简单
<a class="view-row-{{ row.content.view_result_counter }}" href="{{ row.content.path }}">
但是我已经尝试了我能想到的一切。我是不是完全走错了路?Twig和我目前关系不太好…在您的情况下,使用内容/视图模式是可行的 1/在views-view-unformatted.html.twig中,可以在for循环中使用loop.index来获取当前行的索引,并将其添加到row_classes变量中 2/在节点的细枝模板中,可以使用以下内容:
<a href="{{ path('entity.node.canonical', {'node': node.id}) }}">
{{ content.field_img }}
{{ node.getTitle()}}
</a>
3/您可能会获得额外的html,但您可以通过覆盖相关模板来消除大部分html。我不确定这是否是您所期望的,但您可以覆盖字段模板: 启用细枝调试: 在浏览器中检查您的页面,如果站点处于调试模式,则在html中有注释,其中包含每个元素的模板路径。 例如,这是字段模板:core/themes/stable/templates/views/views-view-fields.html.twig 将所需模板复制到主题文件夹中 添加或修改标记。
您可以使用{{dumpvariable}}或{{kintvariable}}调试模板我找到了一种使用kint的方法 在views-view-unformatted.html.twig中,使用以下代码显示各个字段:
{% for row in rows %}
{{ row.content['#view'].style_plugin.render_tokens[ loop.index0 ]['{{ YOUR_FIELD_NAME }}'] }}
{% endfor %}
在您的情况下,应该使用views-view-fields-countries-block_1.html.twig而不是views-view-unformated-countries-block_1.html。树枝锉 视图字段模板将在结果的所有行上迭代。您的views-view-fields-countries-block_1.html.twig应该包含以下代码-
<div>
<a class="view-row" href="{{variable-to-print-path }}">
<img src="{{ image-path }}">
<h3>{{ fields.title.content</h3>
</a>
</div>
您可以使用类似于{{kintfields}的kint函数检查字段数组
检查kint函数输出中的图像路径和锚定路径变量
如果要在views-view-unformatted-countries-block_1.html中执行此操作。twig,然后您可以访问如下所示的字段值-
{% for row in rows %}
{% set photo = file_url(row['content']['#row']._entity.field_page_photo.entity.fileuri) %}
<li><img src={{ photo }} class="img-responsive img-circle"></li>
{% endfor %}
解决方案很简单,请使用“视图字段”模板 我在“主题/模板”文件夹下创建了一个新模板:
views-view-fields--VIEW-NAME.html.twig
现在您可以访问字段值,如下所示:
{{ fields.field_NAME.content }}
如果要访问视图细枝模板中的各个字段以及行信息, 覆盖自定义主题中的视图字段模板: views-view-fields-view-NAME.html.twig 要获取同一文件中的行索引,请使用:
{{row.index}+1对这个答案和问题进行投票-这个答案和问题可以帮助那些需要在视图结果行/字段中输出标记(例如/js)的人-出于安全原因,这些标记被过滤掉。但在我看来,有几个人明智地认为,首先只有授权管理员才能管理视图!再见,再次感谢。