2013-02-06 19 views
17

首先,讓我開始,我嘗試使用代碼:如何有條件地覆蓋TWIG佈局塊?

{% if modal == true %} 
    {% block header %}{% endblock %} 
    {% block footer %}{% endblock %} 
{% endif %} 

我試圖做到的是不顯示我的頁眉和頁腳塊只有當所謂的模態變量是真實的。我也有if語句,下面這個樣子:

{% block content %} 
    {{ dump(modal) }} 
{% endblock %} 

這裏會發生什麼事是,我對於清空頁眉和頁腳塊覆蓋始終運行,無論是否模態值爲真真假假。所以,我使用傳入的模式運行這個爲false,結果是頁眉和頁腳仍然不顯示。 dump命令的輸出準確地顯示true或false,但條件似乎總是在if語句中評估爲true。

Can blocks不能被包裝在一個條件語句中,還是有額外的東西需要做,以使其工作?

感謝您提供任何幫助。

回答

21

塊不關心周圍沒有任何邏輯,如the documentation說:

塊提供了一種改變如何模板的某一部分呈現,但它不以任何方式干擾與它周圍的邏輯。

您應該將該邏輯放在塊內,而不是放在外側,就像您在該文章的最後一個示例中看到的那樣。

+0

謝謝。我只是在和同事提出同樣的建議。他說如果模態不正確,嘗試渲染父塊。 – slave2zeros

42

父樹枝模板定義

{% block footer %}Some standard content{% endblock %} 

。 然後在您要決定是否頁腳的顯示內容,你可以做的模板:如果modal爲真

{% block footer %} 
    {% if not modal == true %} 
    {{ parent() }} 
    {% endif %} 
{% endblock %} 

- 頁腳是空的,如果不是 - 在頁腳將印有「一些標準的內容」

+5

雖然接受的答案是正確的,但這個答案採用了這種方法,並展示瞭如何實際實施該解決方案。 +1 {{parent()}} –

+0

這是最好的答案,因爲它回落到默認值 – numediaweb