【问题标题】:Array treatment of multiple twig template blocks多个树枝模板块的阵列处理
【发布时间】:2012-04-13 14:22:14
【问题描述】:

我有一个奇怪的情况,我的 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 等块,然后只定义子模板中使用的块。虽然它会起作用,但它感觉错了。

我在这里误用了模板继承吗?我应该研究条件包含吗?非常欢迎对此的指点。

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

【问题讨论】:

    标签: php twig


    【解决方案1】:

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

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

    Say box 是一个如下所示的数组: $boxes = 数组( 大批( 'title' => '第一个标题', 'content' => '一个人的内容', ), 大批( 'title' => '第二个标题', 'content' => '两个的内容', ), );

    你会在 twig 中使用它:

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

    现在 render_box.html 将在这个 for 循环上下文中运行,所以 box 变量出现在这个模板中。你的 render_box.html 应该是这样的:

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

    【讨论】:

    • 这行得通,但我担心数组的 content 部分将成为 html 的负载,其中大部分使用 twig 变量和函数。
    • 如果我理解正确,你的做法是填写box.content twig代码?这对我来说是你架构中的一个错误。如果你想使用模板,你不想把模板代码放在一些数据中......我的例子过于简单,你当然可以用一百万个字段来增强它。
    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2015-09-12
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多