访问Drupal 8视图模板中的各个字段

问题描述 投票:9回答:5

我在做一些我认为应该是相对简单的drupal 8视图的问题。

我有一个名为Countries的内容类型。我想在一个视图块中显示我主页上的3个最新国家节点。每个国家/地区都在容器div上显示“views-row”类。我正在使用视图 - 视图 - 未格式化 - 国家/地区 - block_1.tpl来模拟输出。

我想输出类似以下标记的内容:

<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)都没有给我任何信息并且调用{{dump(row.content)}}会使网站崩溃。

由于两个原因,我无法将其输出为视图模式。我无法在视图模式下访问“查看结果计数器”或“路径”字段,即使我有这些变量,某些字段也会嵌套在其他字段中(图像和标题嵌套在其中)

我觉得这应该真的很简单

<a class="view-row-{{ row.content.view_result_counter }}" href="{{ row.content.path }}">

等,但我已经尝试了我能想到的一切。我完全走错了路吗?到目前为止,Twig和我相处得不好......

twig views templating drupal-8
5个回答
14
投票

我已经找到了使用kint的方法。

在views-view-unformatted.html.twig中,使用以下代码显示您的各个字段:

{% for row in rows %}

{{ row.content['#view'].style_plugin.render_tokens[ loop.index0 ]['{{ YOUR_FIELD_NAME }}'] }}

{% endfor %}

0
投票

使用内容/视图模式适用于您的情况。

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,但您可以通过覆盖相关模板来摆脱大部分。


0
投票

我不确定它是否符合您的期望,但您可以覆盖字段模板:

  1. 启用Twig调试:https://www.drupal.org/node/1903374
  2. 在浏览器中检查您的页面(如果站点处于调试模式,则html中有注释,其中包含每个元素的模板路径)。例如,这是字段模板:core / themes / stable / templates / views / views-view-fields.html.twig
  3. 将所需模板复制到主题文件夹中
  4. 添加或修改标记。

您可以使用{{ dump(variable) }}{{ kint(variable) }}调试模板


0
投票

在您的情况下,您应该使用views-view-fields - countries - block_1.html.twig而不是views-view-unformatted - countries - block_1.html。树枝文件。

视图字段模板将迭代结果的所有行。您的观看次数 - 字段 - 国家/地区 - 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>

您可以使用kint函数检查字段数组,例如 - {{kint(fields)}}

从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 %}

0
投票

解决方案是使用视图字段模板。

我在themes / templates文件夹下创建了一个新模板:

views-view-fields--VIEW-NAME.html.twig

现在您可以访问您的字段值,如下所示:

{{ fields.field_NAME.content }}
© www.soinside.com 2019 - 2024. All rights reserved.