2012-04-13 8 views
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などのブロックを定義して、子で使用されているものだけを定義することです。それは動作しますがが間違って感じる。

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

更新:私の質問では、親テンプレートで動的ブロックを持つことができると思われましたが、これはnot be possibleです。私はblock1block2などを親に定義して(合理的な上限を許して)、子供の中身にブロックを提供する必要があると考えています。これは、包含が好ましいアプローチではないと仮定している。

答えて

2

複数のアプローチがあります。最も簡単な方法はおそらく含まれるでしょう。 1の $箱=配列( 配列( 'タイトル' => '最初のタイトル'、 のコンテンツ '=>「内容:

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

セイボックスは次のようになります配列です)、 アレイ( 'タイトル' => '第2のタイトル'、 'コンテンツ' => '2の内容'、 )、 );

あなたは小枝でこれを使用します。

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

今render_box.htmlがループコンテキストのために、この内部で実行しますので、箱vairableは、このテンプレートに存在しています。あなたのrender_box.htmlは次のようになります。

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

<p>{{ box.content }}</p> 
+0

これは動作しますが、私の懸念は、アレイの 'content'部分は、それが小枝の変数と関数を使用しての多くのhtmlの負荷、になるだろうということです。 –

+0

私が正しくあなたを理解している場合、あなたのアプローチはbox.content twigコードを記入することですか?それは私のあなたのアーキテクチャのエラーを指摘します。テンプレートを使用したい場合は、テンプレートコードをいくつかのデータに入れたくありません。私の例は単純化されています。 –