Maison  >  Questions et réponses  >  le corps du texte

Étendre le bloc parent à partir du modèle intégré

Je souhaite injecter de nouvelles valeurs à l'intérieur des blocs de style et de script dans la mise en page, mais à partir du bloc intégré. Bien sûr, cela génère une erreur 在块之外调用“parent”是禁止的.. y-a-t'il une solution?

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

(Je ne peux/ne veux pas utiliser scriptsstyles 内的 list.html.twig 块。它们是数据表模板的一部分,在 list.html.twig.). Malheureusement, je ne peux pas utiliser use car cette fonction ne prend pas en charge les propriétés dynamiques, uniquement les chaînes.

D'après la documentation :

Étant donné que les instructions d'utilisation sont analysées indépendamment du contexte transmis au modèle, les références de modèle ne peuvent pas être des expressions.

P粉033429162P粉033429162278 Il y a quelques jours468

répondre à tous(1)je répondrai

  • P粉333395496

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

    Comme mentionné dans les commentaires, les inclusions/intégrations ne peuvent pas modifier les blocs dans leurs inclueurs. Cela dit, une extension est disponible qui peut résoudre votre problème.

    Ce延迟的Twig扩展peut être trouvéici

    Fondamentalement, le nœud retarde l'exécution dudit bloc. De cette façon, vous pouvez créer une variable pour contenir tous les liens javascript et les afficher. Cela peut être vu dans les

    AdvancedExamples sur github.

    Merci à Eugene Leonovich pour avoir réalisé cette extension

    répondre
    0
  • Annulerrépondre