2011-10-20 63 views
1

中的多个子模板,我有以下两个模板嫩枝 - 使用父

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> 

现在我想有多个实例parent.html中的child.html。在我的PHP代码中,我必须遍历子元素并传入链接对象,以便link.title变量可以填充。

我目前的代码涉及到我在parent.html中加载,然后呈现每个孩子并创建一个php数组,然后渲染parent.html并将所有生成的孩子的html作为数组条目传入(参见下文)。有没有什么简单的方法来做到这一点,而不必建立一个可能使用Twig块的PHP片段的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)); 

在此先感谢

回答

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

执行控制器ST将这个干净的数组传递给模板引擎。不要混合。

它始终是更好地遵循原则“的关注点分离”: http://en.wikipedia.org/wiki/Separation_of_concerns

+0

嗨,我刚刚更新了我的代码片断就可以在每个项目循环时一样,我想要做一些处理,比如获得记录数据库等 – phpNutt

+0

添加了更好的答案 – mblaettermann