おそらく、この質問は次の 2 つの質問に変換できます。
.html.twig にテンプレートを含めた場合、含まれる小枝の一部のブロックを表示または非表示にできますか?
複数の小枝レイアウトから小枝を拡張できますか?
おそらく、この質問は次の 2 つの質問に変換できます。
.html.twig にテンプレートを含めた場合、含まれる小枝の一部のブロックを表示または非表示にできますか?
複数の小枝レイアウトから小枝を拡張できますか?
私と 1 人の同僚が、この質問に何らかの形で関連する 1 つのクールなことを発見しました。
たとえばrenderBlock
、テンプレートを拡張するときではなく、(Twig メソッド) メソッドを呼び出すときだけブロックをレンダリングする場合は、このトリックを使用できます。
{% if false %}
{% block subject %}
subject_message
{% endblock %}
{% endif %}
呼び出すとrenderBlock
(ここのように -> https://stackoverflow.com/a/7580461/922165 )、メソッドは他のステートメントを気にしないため、このブロックがレンダリングされます。
ただし、拡張すると、このブロックは表示されません。
これは、たとえば、他の電子メール テンプレートが拡張している基本的な既定の電子メール テンプレートがある場合に役立ちます。ブロック内に既定の電子メールの件名をラップできます。このブロックは、他のテンプレートに表示する必要はありません。
これがあなたが探しているものかどうかわかりません。あなたの説明は少しあいまいなので、質問に固執します.
この問題は、テンプレートを中間に配置することで解決できます。
テンプレートを直接含めてそのブロックを変更することはできませんが、最初のテンプレートを拡張してブロックを削除する2 番目のテンプレートを作成し、必要な場所に 2 番目のテンプレートを含めることができます。
これが最初に含めたいテンプレートであるとします。
<div>
This is the template you want to include (articleDetails.html.twig)
{% block article %}
This is some content you want to delete
{% endblock article %}
</div>
次のように拡張する 2 番目のテンプレートを作成してみることができます。
{% extends 'articleDetails.html.twig' %}
{# This is template emptyArticle.html.twig, it deletes the article block #}
{% block article %}
{% endblock article %}
次に、articleDetails を含める代わりに、この 2 番目のテンプレート(emptyArticle) を含めることができます。最初のテンプレートのコンテンツを取得しますが、記事ブロックのコンテンツは取得しません。これは、任意の数のブロックで行うことができます。
インクルードで変数を渡すことができます
{% include 'template.html' with {'foo': 'bar'} %}
そして、template.html では、「foo」の値を確認し、値に応じてブロックを表示/非表示にします。
または、より複雑なテンプレートがある場合は、それらを分割してコントローラーで呼び出すことができます。
{% render url('latest_articles', { 'view': 2 }) %}
public function recentArticlesAction($view = 1) {
// make a database call or other logic
// to get the "$max" most recent articles
$articles = ...;
if($view == 2) {
return $this->render(
'AcmeArticleBundle:Article:recentList.html.twig',
array('articles' => $articles)
);
}
return $this->render(
'AcmeArticleBundle:Article:recentList2.html.twig',
array('articles' => $articles)
);
}
http://symfony.com/doc/current/book/templating.html#embedding-controllers