2013-02-06 9 views
17

まず、私は私が使用しようとしているコードから始めましょう:私が達成しようとしている何条件付きでTWIGレイアウトブロックを上書きする方法はありますか?

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

はモーダルという変数がtrueの場合にのみ、私のヘッダーとフッターのブロックを表示しないようにです。ここでは何が起こる

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

は、ヘッダーとフッターのブロックを空にするための私のオーバーライドは関係なく、常にモーダルの値がtrueであるか、そうでない場合の動作することです:私はまた、if文の下にこれを持っています。だから、私はfalseとして渡されたモーダルでこれを実行し、結果はヘッダとフッタがまだ表示されないということです。 dumpコマンドの出力は真または偽を正確に示しますが、条件は常にifステートメントで真と評価されるようです。

ブロックは条件文でラップすることはできませんか、またはこれを行うために何か追加が必要ですか?

ご協力いただきありがとうございます。 the documentationに言ったように

答えて

21

ブロックは、その周りに任意のロジックを気にしないでください:

をブロックは、テンプレートの特定の部分をレンダリングする方法を変更する方法を提供しますが、それはどのような方法で干渉しませんその周りの論理と。

この記事の最後の例でわかるように、ロジックはブロックの内側ではなく、外側に配置する必要があります。

+0

ありがとうございます。私はちょうど同じ事を提案した同僚と話していた。モーダルが真でない場合、親ブロックをレンダリングしようとしました。 – slave2zeros

42

は、親小枝テンプレートの

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

を定義します。 は、その後、あなたが行うことができますフッタの表示内容かどうかを判断するテンプレートで:モーダルがtrueの場合

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

- いない場合はフッターには、空になります - フッターに「いくつかの標準的な内容を」印刷されます

+5

受け入れられた回答は正しいものの、この回答はそのアプローチをとり、その解決策を実際に実装する方法を示しています。 +1 {{parent()}} –

+0

これはデフォルトに戻るときの最良の答えです – numediaweb

関連する問題