Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use grandparent block

Tags:

twig

I have the following twig templates:

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

I can call parent() inside the content block in mypage.twig, but how to use a grandparent instead?

like image 856
Med Avatar asked Sep 14 '25 23:09

Med


1 Answers

There are situations, in which you can achieve this. Unfortunately not in your case. However, it works if only "horizontal re-use" is used (use keyword), but not with inheritance (extends). This for instance applies to form themes.

In my case I defined a form theme which inherits from the bootstrap 3 form theme. The bootstrap theme itself inherits from "form_div_layout". I wanted to override the choice widget and include the grand parent's (form_div_layout) block content, because the bootstrap version of the block didn't fit for me in this single case. So, basically a very similar problem.

This can be solved by inheriting from both, the parent (bootstrap_3_layout) and grand parent layout (form_div_layout), while declaring an alias for the grand parent block to be overridden:

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

I'm writing this answer, although it doesn't answer the actual question. But other people will probably also find this question when googling for such a "grandparent"-feature and maybe they'll give up unnecessarily, when they read that it's impossible here.

like image 146
fishbone Avatar answered Sep 17 '25 18:09

fishbone