Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twig 访问Drupal 8视图模板中的单个字段_Twig_Views_Templating_Drupal 8 - Fatal编程技术网

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

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

我在做一些我认为应该是相对简单的Drupal8视图的事情时遇到了困难

我有一种叫做国家的内容类型。我想在我的主页上的视图块中显示3个最新的国家/地区节点。每个国家/地区都显示在container div上的class views行中。我正在使用views-view-unformatted-countries-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的尝试都不会给我带来任何结果,调用{{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)的人-出于安全原因,这些标记被过滤掉。但在我看来,有几个人明智地认为,首先只有授权管理员才能管理视图!再见,再次感谢。