2011-10-20 478 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