TWIG - Использование нескольких шаблонов ребенка в родителях

StackOverflow https://stackoverflow.com/questions/7836913

Вопрос

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

Parent.html

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

Ребенок.html

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

Теперь я хотел бы иметь несколько экземпляров ребенка. Html в Parent.html. В моем PHP -коде я должен пройти через детей и передать объект Link, чтобы переменная Link.title могла быть заполнена.

Мой текущий код включает в себя загрузку в parent.html, затем воспроизводит каждого ребенка и создаю массив PHP, а затем делает родитель. 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));

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

Это было полезно?

Решение

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

{% 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top