web-dev-qa-db-fra.com

Ajouter JS et CSS proprement à partir des modèles inclus Twig

Je cherche à savoir s'il existe un moyen propre d'ajouter JS et CSS à partir des modèles inclus.

Ainsi, par exemple, si layout.html.twig a:

{% include 'GenericBundle:Generic:page.html.twig' with {'data': data} %}
...
{% block javascript %}

    {% javascripts
        '@GenericBundle/Resources/public/js/app/jquery/jquery.min.js'
        '@GenericBundle/Resources/public/js/lib/bootstrap/bootstrap.min.js'
    %}
        <script src="{{ asset_url }}"></script>
    {% endjavascripts %}

{% endblock %}

Et dans la page générique du bundle, j'aimerais inclure un peu plus de Javascript mais l'ajouter au bloc Javascript établi pour respecter les meilleures pratiques HTML et JS.

Existe-t-il un moyen propre de procéder? J'utilise Symfony2, et je pourrais probablement trouver une solution en utilisant Singletons et autres, mais je préfère une méthode plus propre s'il y en a une de disponible.

13
Andrew Stirling

Je sais que je suis un peu en retard à la fête, mais avec Twig 1.2, vous pouvez utiliser la balise se et la fonction block :

GenericBundle: Generic: page.html.twig

{% block javascripts %}
    <script src="..."></script>
{% endblock %}
{% block included_content %}
   Bar
{% endblock %}

layout.html.twig

{% use 'GenericBundle:Generic:page.html.twig' with javascripts as page_javascripts %}

{% block javascript %}

    {% javascripts
        '@GenericBundle/Resources/public/js/app/jquery/jquery.min.js'
        '@GenericBundle/Resources/public/js/lib/bootstrap/bootstrap.min.js'
    %}
        <script src="{{ asset_url }}"></script>
    {% endjavascripts %}
    {{ block('page_javascript') }} // Don't forget the 'braces'

{% endblock %}

...
{{ block('included_content') }} // Don't forget the 'braces'
18
Daniel Hepper