2014-06-24 105 views
1

我有2個TWIG渲染塊在基礎和標準模板上工作。這兩個塊在頁面上呈現,所有在{% extends "base.php" %}之前和{% block body %}{% endblock %}之後的base.htm不會呈現,我明白了爲什麼我使用了renderblock而不是render,它應該呈現整個模板。 1我如何獲得整個模板來渲染,並且除非我使用for循環,否則{% block head %}不會渲染,我相信有更好的方法來做這件事。編輯1:添加$data2TWIG:使用擴展和渲染塊渲染多個塊

API

$template = $twig->loadTemplate('event.htm'); 
echo $template->renderBlock('head', (array('heads' => $data2))); 
echo $template->renderBlock('content', (array('events' => $data))); 

base.htm

<html> 
<head> 
{% block head %} 
{% for head in heads %} 
<title>{{ head.title }}</title> 
<meta charset="UTF-8"> 
</head> 
    <body> 
<h1>{{ head.title2 }}</h1> 
     {% endfor %} 
{% endblock %} 
{% block body %}{% endblock %} 
</body> 
</html> 

event.htm

{% extends "base.php" %} 
{% block content %} 
     {% for event in events %} 
{{event.uri}} 
{{event.desc}} 
     {% else %} 
no events! 
     {% endfor %} 
{% endblock %} 

$ DATA 2

Array ([0] => Array ([id] => 1 [uri] => /event1/1 [title] => some title)) 

回答

1

1 /只要你渲染一個塊,你就會得到該塊的內容,僅此而已。

你需要使用渲染整個模板:

$template = $twig->loadTemplate('event.htm'); 

echo $template->render(array(
    'heads' => $data2, 
    'events' => $data, 
)); 

2 /你需要,因爲有很大的機會$data2包含數組或對象,而不是預期的頭部使用一個循環。您應該使用字符串,或者知道您可以在哪個索引中訪問標題。這是很難幫助你,因爲我不知道該怎麼做包含您$data2變量,而是一個醜陋的解決方案可能是使用reset功能是這樣的:

echo $template->render(array(
    'heads' => reset($data2), 
    'events' => $data, 
)); 
+0

1/Works。我認爲這是行不通的,因爲塊名稱與數組不同,必須使用「renderblock」。 2 /作品,我傳遞一個數組(第一個TWIG模板,認爲數組是預期的)。 '$ data2' ='Array([0] => Array([id] => 1 [uri] =>/event1/1 [title] =>一些標題)' – Jus

0

2 /如果你知道哪些指標(在此情況0)如Alain所建議

echo $template->render(array(
    'heads' => $data2[0], 
    'events' => $data, 
));