TWIG - Использование нескольких шаблонов ребенка в родителях
-
27-10-2019 - |
Вопрос
У меня есть следующие два шаблона
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