0

おそらく、この質問は次の 2 つの質問に変換できます。

.html.twig にテンプレートを含めた場合、含まれる小枝の一部のブロックを表示または非表示にできますか?

複数の小枝レイアウトから小枝を拡張できますか?

4

4 に答える 4

5

私と 1 人の同僚が、この質問に何らかの形で関連する 1 つのクールなことを発見しました。

たとえばrenderBlock、テンプレートを拡張するときではなく、(Twig メソッド) メソッドを呼び出すときだけブロックをレンダリングする場合は、このトリックを使用できます。

{% if false %} {% block subject %} subject_message {% endblock %} {% endif %}

呼び出すとrenderBlock(ここのように -> https://stackoverflow.com/a/7580461/922165 )、メソッドは他のステートメントを気にしないため、このブロックがレンダリングされます。

ただし、拡張すると、このブロックは表示されません。

これは、たとえば、他の電子メール テンプレートが拡張している基本的な既定の電子メール テンプレートがある場合に役立ちます。ブロック内に既定の電子メールの件名をラップできます。このブロックは、他のテンプレートに表示する必要はありません。

于 2015-05-06T14:42:07.967 に答える
4

これがあなたが探しているものかどうかわかりません。あなたの説明は少しあいまいなので、質問に固執します.

この問題は、テンプレートを中間に配置することで解決できます。

テンプレートを直接含めてそのブロックを変更することはできませんが、最初のテンプレートを拡張してブロックを削除する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) を含めることができます。最初のテンプレートのコンテンツを取得しますが、記事ブロックのコンテンツは取得しません。これは、任意の数のブロックで行うことができます。

于 2012-05-22T00:25:58.153 に答える
0

インクルードで変数を渡すことができます

{% 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

于 2013-02-02T12:42:55.647 に答える