1

次の2つのテンプレートがあります

親.html

<ul class="basketItems">
    {% for item in items %}
        {{ item | raw }}
    {% endfor %}
</ul>

child.html

<li>
    <a href="/go/to/my/page">{{ link.title}}</a>
</li>

ここで、parent.html 内に child.html の複数のインスタンスが必要です。私のphpコードでは、子をループしてリンクオブジェクトを渡して、link.title変数を設定できるようにする必要があります。

現在のコードでは、parent.html をロードし、各子をレンダリングして php 配列を作成し、parent.html をレンダリングして、生成されたすべての子の html を配列エントリとして渡します (以下を参照)。おそらくTwigブロックを使用して、htmlスニペットのphp配列を構築する必要なく、これを行う簡単な方法はありますか?

$parent = $twig->loadTemplate("parent.html");
foreach ($items as $item) {
    $child = $twig->loadTemplate("child.html");
    var $link = link::get($item->id));
    /* do some other database retreival / data processing work */

    $childHtml[] = $child->render(array('item' => $link));
}
$parent->render(array('items' => $childHtml));

前もって感謝します

4

1 に答える 1

3

これを試して:

{% for item in items %}
    {% include "child.html" %}
{% endfor %}

ここのマニュアル: http://twig.sensiolabs.org/doc/templates.html

そしてPHP部分の場合:

$parent = $twig->loadTemplate("parent.html");


for ($i =0; $i < count($items); $i++) {

    /* do some other database retreival / data processing work */

    /* add additional information to array */
    $items[i]['link'] = link::get($item->id));      
}
$parent->render(array('items' => $childHtml));

コントローラーの処理を行い、そのクリーンな配列をテンプレート エンジンに渡します。それを混ぜないでください。

「関心の分離」の原則に従うことは常に良いことです: http://en.wikipedia.org/wiki/Separation_of_concerns

于 2011-10-20T13:51:11.873 に答える