2

我有一个奇怪的情况,我的 twig 模板构建内容以适合多个“框”,这样包含框的数量可能会有所不同。我正在寻找一种在子模板中定义 n 块的通用方法,并且父模板将呈现正确的数字。这是我的子模板现在的示例:

{% extends "layout.participant.html.twig" %}

{% block box_left_title %}Personal Information{% endblock %}

{% block box_left_content %}
content here
{% endblock %}

考虑到这些配对的标题/内容部分可能有一个、两个或可能有 5 个。我想象的是某种方式来定义box_left_title为第一个数组槽,然后父模板 ( layout.participant.html.twig) 将迭代每个块并根据需要构建尽可能多的“盒子”。

我现在正在考虑的解决方法是在父模板中定义 、 等块box_left_content_1box_left_content_2然后只定义子模板中使用的块。虽然它会起作用,但感觉不对。

我在这里误用了模板继承吗?我应该研究条件包含吗?最受欢迎的指针。

更新:我的问题假设我可以在父模板中有动态块,但事实证明这是不可能的。我相信我需要在父级中定义block1block2(允许合理的上限),然后在子级中提供包含内容的块。这一切都假设包含不是首选方法。

4

1 回答 1

2

你有多种方法。最简单的可能是包容。

http://twig.sensiolabs.org/doc/templates.html#include-other-templates

说 box 是一个如下所示的数组: $boxes = array( array( 'title' => 'First Title', 'content' => 'the content of one', ), array( 'title' => 'Second Title', 'content' => '两个的内容', ), );

你会在树枝中使用它:

{% for box in boxes %}
    {% include "render_box.html" %}
{% endfor %}

现在 render_box.html 将在这个 for 循环上下文中运行,所以 box vairable 出现在这个模板中。你的 render_box.html 看起来像这样:

<h1>{{ box.title }}</h1>

<p>{{ box.content }}</p>
于 2012-04-13T17:19:19.770 回答