2

私の小枝テンプレートがいくつかの「ボックス」に収まるようにコンテンツを構築し、含まれるボックスの数が異なる場合があるという奇妙な状況があります。子テンプレートで n ブロックを定義する一般的な方法を探しています。親は正しい数をレンダリングします。これは、私の子テンプレートが現在どのように見えるかの例です:

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

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

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

これらのペアのタイトル/コンテンツ セクションが 1 つ、2 つ、場合によっては 5 つある可能性があると考えてください。私が想像しているのはbox_left_title、最初の配列スロットとして定義する何らかの方法であり、親テンプレート ( layout.participant.html.twig) は各ブロックを繰り返し、必要な数の「ボックス」を構築します。

私が現在検討している回避策は、親テンプレートで 、 などのブロックを定義してから、子で使用されるものだけを定義することですbox_left_content_1box_left_content_2それはうまくいきますが、それは間違っていると感じます。

ここでテンプレートの継承を誤用していますか? 代わりに条件付きインクルードを調べる必要がありますか? これに関するポインタは大歓迎です。

更新:私の質問では、親テンプレートに動的ブロックを含めることができると想定していましたが、これは不可能であることが判明しました。block1親でなどを定義しblock2(合理的な上限を考慮して)、子でコンテンツを含むブロックを提供する必要があると思います。これはすべて、インクルードが推奨されるアプローチではないことを前提としています。

4

1 に答える 1

2

複数のアプローチがあります。最も簡単なのは、おそらくインクルージョンでしょう。

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

ボックスが次のような配列であるとします: $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 ループ コンテキスト内で実行されるため、ボックス変数がこのテンプレートに存在します。render_box.html は次のようになります。

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

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