Frage Symfony2 Assetic + Twig Vorlage JavaScript-Vererbung


Mein Problem:

Ich habe 3 Vorlagen:

  • main.html.twig (Hauptlayout-Datei)
  • layout.html.twig (eine bündelspezifische Layout-Überschreibung, die einige bundle-spezifische JS-Tags enthält)
  • create.html.twig (eine seitenspezifische Vorlagendatei, die auch einige seitenspezifische JS-Tags enthält)

Ich definiere einen Block namens 'Javascript' in meinem Basislayout (main.html.twig), dann überschreibe es (aber anrufend {{ parent() }} im layout.html.twig. Dies funktioniert einwandfrei, und die JS - Tags aus der Hauptvorlagendatei sind immer noch über denen in der layout.html.twig Vorlage.

Ich mache dann das gleiche in der create.html.twig Datei und überschreibt den Block wie folgt:

{% block javascripts %}
    {{ parent() }}
    {% javascripts '@BundleName/Resources/public/js/application.album.uploader.js'
                   '@BundleName/Resources/public/js/jquery.uploadify.js'
                   '@BundleName/Resources/public/js/swfuploadify.js' filter='?yui_js' %}
         <script src='{{ asset_url }}' type='text/javascript'></script>
    {% endjavascripts %}
{% endblock %}

An dieser Stelle, anstatt nur den JavaScript-Block in der Eltern (layout.html.twig) und einschließlich alle Die Skripte, die in den Vorlagen darüber definiert sind, machen folgendes:

  • Dumps die <script> Tags in der Mitte der Ausgabe (was einen Fehler verursacht, weil in meinem main.html.twig Datei Ich schließe nur die jQuery-Bibliothek am Ende des HTML-Markups ein
  • Dann werden die Skripts zusammen mit dem Rest der anderen Dumps (so wie ich es erwarte)

Ich bin mir nicht sicher, was die Skripte in der Mitte der create.html.twig Vorlage, und ich bin auch verwirrt, warum sie zweimal auf den Bildschirm geworfen werden (einmal in der Mitte des Erstellens und dann einmal ganz unten zusammen mit all den anderen meiner Skripte aus main.html.twig und layout.html.twig.

Hat jemand irgendwelche Ideen? Lassen Sie mich wissen, wenn etwas unklar ist oder ich Ihnen weitere Informationen geben kann.

BEARBEITEN:

Dateiinhalte sind unter ...

main.html.twig: https://gist.github.com/7f29353eaca0947528ce

layout.html.twig: https://gist.github.com/734947e9118b7765715e

create.html.twig: https://gist.github.com/c60c8d5c61e00ff86912

EDIT 2:

Ich habe mir das Problem heute morgen noch einmal angeschaut und es sieht so aus, als würde es dasselbe für Stylesheets tun. Ich habe versucht, einen neuen Block namens pagescripts in meinem layout.html.twig und dann benutze den Block in meinem create.html.twig aber das hatte das gleiche Ergebnis, es scheint nur die Skripte und Stylesheets auszugeben, wo immer ich das verwende

{% block pagescripts %} 
   (scripts here) 
{% endblock}

10
2018-01-07 11:20


Ursprung


Antworten:


Ich habe das Problem gefunden. Im create.html.twig Ich habe meine definiert {% block javascripts %} Inhalt in meinem Inneren {% block content %}, also nehme ich an, dass Twig die Ausgabe der javascripts blockieren innerhalb der content Block.

Bewegen der {% block javascripts %} Inhalt außerhalb der {% block content %} Block behebt das Problem.


2
2018-01-14 11:08



Hier ist ein Beispiel für main.html.twig:

<body>
    {% block stylesheets %}
    {% endblock %}

    {% block jsscript %}
    {% endblock %}

    {% block content %}
    {% endblock %}
</body>

in Ihre create.html.twig

{% extends '::base.html.twig' %}

{% block jsscript %}
    my javascript files...
{% endblock %}

{% block content %}
<h1>Create</h1>

<form action="{{ path('entity_create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <p>
        <button type="submit">Create</button>
    </p>
</form>

 {% endblock %}

Wenn das Problem weiterhin besteht, können Sie eine Dokumentbereitstellungsfunktion hinzufügen:

$(document).ready(function() {
   // put all your jQuery goodness in here.
 });

0
2018-01-10 13:17