如何在views-views-unformatted--view-machine-name.html.twig中获取每个字段值?


19

我有一个树枝文件:views-view-unformatted--view-machine-name.html.twig

{#
/**
 * @file
 * Default theme implementation to display a view of unformatted rows.
 *
 * Available variables:
 * - title: The title of this group of rows. May be empty.
 * - rows: A list of the view's row items.
 *   - attributes: The row's HTML attributes.
 *   - content: The row's content.
 * - view: The view object.
 * - default_row_class: A flag indicating whether default classes should be
 *   used on rows.
 *
 * @see template_preprocess_views_view_unformatted()
 *
 * @ingroup themeable
 */
#}
{% if title %}
  <h3>{{ title }}</h3>
{% endif %}
{% for row in rows %}
  {%
    set row_classes = [
      default_row_class ? 'views-row',
    ]
  %}
  <div{{ row.attributes.addClass(row_classes) }}>
    {{ row.content }}
  </div>
{% endfor %}

我希望Titleand body 字段位于1行中,并以逗号分隔,例如:

标题,正文

在调试时,如何在此视图中获取“标题”或“正文”或任何其他字段的值?

我使用了kint(title)和kint(body),但是它不起作用。我也在debug = TRUE;服务文件中做了。

但是无法弄清楚在未格式化的html树枝中具有字段值的方法。

Answers:


20

如您在views-view-unformatted.html.twig中所看到的,它说明了您所显示的注释代码也说明了什么,没有字段变量。因此,此模板不用于字段。

可用变量:

  • title:这组行的标题。可能是空的。
  • 行:视图的行项目的列表。
    • attribute:行的HTML属性。
    • content:该行的内容。
  • view:视图对象。
  • default_row_class:一个标志,指示是否应在行上使用默认类。

如果要在视图模板中使用字段,请使用views-view- fields- [view-name]- [machine-name] .html.twig。在这里,您可以像这样打印字段:

<span>{{ fields.title.content }},</span><span>{{ fields.body.content }}</span>

带下划线的view_name保留,带下划线的机器名称转换为逗号
Matoeil

1
可以从/ core / modules / views / templates文件夹复制views-view-fields.html.twig,然后按上述重命名。对于Machine_name为foobar的给定View,新名称可以为views-view-fields--foobar.html.twig。有关命名约定的更多信息,请参见:drupal.org/docs/8/theming/twig/twig-template-naming-conventions
bkudrle

13

我找到了一种使用Kint的方式,您可以在views-view--unformatted.html.twig中获取字段值

如果你想要一个特定的领域

获取文本字段值

{{row.content['#row']._entity.field machine name[0].value}}

获取图像字段src

{{file_url(row.content['#row']._entity.field machine name.entity.uri.value)}}

获取图像的高度,标题,宽度,高度

{{row.content['#row']._entity.field machine name[0].alt/title/width/height}}

注意:用您的字段计算机名称替换字段计算机名称

如果要遍历多个字段

{% for i in range(0, 10) %}
  {{ row.content['#row']._entity.body[i].value }}
{% endfor %}

如果您想要原始价值

{% for i in range(0, 10) %}
  {{ row.content['#row']._entity.body[i].value|raw }}
{% endfor %}

7

我想出了一种使用kint的方法。

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

{% for row in rows %}

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

{% endfor %}

如何使用图像字段。当我使用field_image时,没有输出。图片网址未显示或呈现!
哈里斯ST

4

以下是访问views-view-unformatted.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 %}

完善!我想知道的就是这些,Renuka。
Niladri Banerjee-Uttarpara

3

您需要创建三个文件以使用树枝文件覆盖视图。
1. views-view--foobar.html.twig
2. views-view-unformatted--foobar.html.twig
3. views-view-fields--foobar.html.twig

下面介绍了这三个文件的用途:
1:主视图模板的默认主题实现。
2:默认主题实现,以显示未格式化的行的视图。
3:默认视图模板,以连续显示所有字段。

您应该使用“ views-view-fields--foobar.html.twig”在视图上输出每个字段。

下面是一个示例:

<li>
<p>{{ fields.title.content }}</p> // Title field
<p>{{ fields.body.content }}</p> // Body field
<span>{{ fields.created.content }}</span> // Node authored date field
<a href="{{ fields.path.content }}" class="readmore"> read more </a> // Link to actual page
</li>

嗨,我已经在views-view-foobar.html.twig中尝试了上述方法,但是无法打印单个字段。我使用kint()调试字段,它在顶部显示“ nothing”数组。
Shakil Ahmad

0

根据我的经验,没有简单的方法可以在views-views-unformatted --view-.html.twig中引入不属于实体结构一部分的字段中的值。

非常要打印一个text (plain)字段。如此痛苦地打印flag_fieldentity_reference依此类推。

在没有遍历整个视图核心代码的情况下必须实现这一点,我不得不构建此hack:

  1. 添加一个假的纯文本字段实体
  2. 将视图字段值挂接到自定义模块中:
  3. 最终将模板中的所需值

此处有更多详细信息 /drupal//a/288316/13760

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.