2016-04-25 4 views
2

I持って、次の小枝テンプレート:使用祖父母ブロック

{# layout.twig #} 

{% block content %} 
    THIS IS LAYOUT 
{% endblock %} 

{# secondary_layout.twig #} 

{% extends layout.twig %} 
{% block content %} 
    THIS IS SECONDARY_LAYOUT 
{% endblock %} 

{# mypage.twig #} 
{% extends secondary_layout.twig %} 

{% block content %} 
    {# I WOULD LIKE TO USE layout content block here #} 
{% endblock %} 

私は親を(呼び出すことができます)mypage.twig内のコンテンツブロック内が、代わりに祖父母を使う方法?

答えて

2

ちょうどそれが誰かを助けるかもしれない

{# secondary_layout.twig #} 

{% extends layout.twig %} 
{% block content %} 
    {% if use_layout_block %} 
     {{ parent() }} 
    {% else %} 
     THIS IS SECONDARY_LAYOUT 
    {% endif %} 
{% endblock %} 

{# mypage.twig #} 
{% extends secondary_layout.twig %} 

{% block content %} 
    {% set use_layout_block = true %} 
{% endblock %} 

secondary_layout修正し、私は1つのソリューションを持って問題を書き込むことにより、[OK]をクリックします。

誰かが別の解決策を見つけたら、お気軽にお答えください。

+0

私はこれを行う唯一の方法だと推測しています – DarkBee

+0

中間の小枝が拡張しているバンドルファイルであり、直接編集したくない場合は、残念ながらこれは役に立ちません。 – caponica

+0

@caponicaこれはまさに私の問題でした。しかし、Medのソリューションは私に良いアイデアを与えました。ブロック内にuseステートメントを追加して解決しました。内部{#mypage.twig#} {%ブロックコンテンツ%} add {% "layout.twig"%} – Martin

4

これを達成できる状況があります。残念ながら、あなたのケースではありません。ただし、「水平再利用」(useキーワード)のみが使用され、継承(extends)では使用されない場合には機能します。たとえば、これはフォームテーマに適用されます。

私のケースでは、ブートストラップ3フォームテーマから継承したフォームテーマを定義しました。ブートストラップテーマ自体は "form_div_layout"から継承しています。ブロックのブートストラップバージョンがこの1つのケースで私に合っていなかったので、私は選択ウィジェットをオーバーライドして、祖父母の(form_div_layout)ブロックコンテンツを追加したかったのです。だから、基本的には非常によく似た問題です。

上書きする壮大な親ブロックのエイリアスを宣言しながら、これは、両方から継承することによって解決した親(bootstrap_3_layout)と壮大な親レイアウト(form_div_layout)することができます。

{# my_form_theme.html.twig #} 

{% use 'form_div_layout.html.twig' with choice_widget_collapsed as base_choice_widget_collapsed %} 
{% use 'bootstrap_3_layout.html.twig' %} 

{% block choice_widget_collapsed -%} 
    {# There is no "grandparent()" function, so instead we can do this: #} 
    {{- block('base_choice_widget_collapsed') -}} 
{%- endblock %} 

私が書いていますこの答えは、実際の質問には答えません。しかし、他の人々はおそらく、このような「祖父母」のためにグーグル・グーグルを探すときにこの質問を見つけるでしょう。そして、おそらく彼らはここでは不可能だと読んだとき、不必要にあきらめるでしょう。

関連する問題