Heim  >  Fragen und Antworten  >  Hauptteil

Erweitern Sie den übergeordneten Block aus der eingebetteten Vorlage

Ich möchte neue Werte in die Stil- und Skriptblöcke im Layout einfügen, aber aus dem eingebetteten Block. Natürlich wird ein Fehler ausgegeben 在块之外调用“parent”是禁止的.. Gibt es eine Lösung?

layout.html.twig:

<!DOCTYPE html>
<html>
    <head>
        {% block style %}
            <link rel="stylesheet" href="foo.css">
        {% endblock %}
    </head>
    <body>

        {% block content "" %}

        {% block scripts %}
            <script src="foo.js"></script>
        {% endblock %}

    </body>
</html>

list.html.twig:

{% extends 'layout.html.twig' %}

{% block content %}
    {% embed datatable.html.twig %}
        {% block tbody %}
            <tr>
                <td>my awesome table</td>
            </tr>
        {% endblock %}
    {% endembed %}
{% endblock %}

datatable.html.twig:

<table id="myDatatable">
    <tbody>
        {% block tbody "" %}
    </tbody>
</table>

{% block styles %}
    {{ parent() }}
    <link rel="stylesheet" href="dataTables.css">
{% endblock %}

{% block scripts %}
    {{ parent() }}
    <script src="dataTables.js"></script>
{% endblock %}

(Ich kann/will scriptsstyles 内的 list.html.twig 块。它们是数据表模板的一部分,在 list.html.twig nicht verwenden.). Leider kann ich use nicht verwenden, da diese Funktion keine dynamischen Eigenschaften unterstützt, sondern nur Zeichenfolgen.

Aus der Dokumentation:

Da Use-Anweisungen unabhängig vom an die Vorlage übergebenen Kontext analysiert werden, können Vorlagenreferenzen keine Ausdrücke sein.

P粉033429162P粉033429162327 Tage vor514

Antworte allen(1)Ich werde antworten

  • P粉333395496

    P粉3333954962023-12-21 11:48:45

    正如评论中所述,包含/嵌入不能更改其包含器中的块。 也就是说,有一个可用的扩展可以解决您的问题。

    这个延迟的Twig扩展可以在这里找到

    基本上,节点推迟了所述块的执行。 通过这种方式,您可以创建一个变量来保存所有 javascript 链接并输出它们。这可以在高级示例中看到github。

    感谢 Eugene Leonovich 制作此扩展

    Antwort
    0
  • StornierenAntwort