Twig - Использование нескольких дочерних шаблонов в родительском - PullRequest
1 голос
/ 20 октября 2011

У меня есть следующие два шаблона

parent.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>

Теперь я хотел бы иметь несколько экземпляров child.HTML в parent.html.В моем php-коде я должен пройти через потомки и передать объект ссылки, чтобы можно было заполнить переменную link.title.

Мой текущий код включает в себя загрузку в parent.html, а затем рендеринг каждого потомка исоздание массива php, рендеринг parent.html и передача всех сгенерированных html дочерних элементов в виде записей массива (см. ниже).Есть ли простой способ сделать это, не создавая массив php HTML-фрагментов, возможно, используя блоки Twig.

$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));

Заранее спасибо

1 Ответ

3 голосов
/ 20 октября 2011

попробуйте это:

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

Здесь, в руководстве: http://twig.sensiolabs.org/doc/templates.html

А для PHP Part:

$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

...