2012-10-02 4 views
10

Я ищу, чтобы узнать, есть ли способ добавить JS и CSS из включенных шаблонов.Простое добавление JS и CSS из включенных шаблонов Twig

Так, например, если layout.html.twig имеет:

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

И в общей странице расслоения Я хотел бы включить еще несколько Javascript, но добавить его в установленном блок Javascript, чтобы держать в HTML и JS лучшие практики.

Есть ли чистый способ сделать это? Я использую Symfony2 и, вероятно, могу объединить решение с помощью Singletons и т. Д., Но я бы предпочел бы более чистый метод, если бы он был доступен.

ответ

16

Я знаю, что я немного опоздал на вечеринку, но с Twig 1.2, вы можете использовать тег use и 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' 
+1

Вы должны поставить кавычки в {{Бло ck ('page_javascript')}}, чтобы это работало, иначе вы получите сообщение об ошибке «Variable ... does not exist ...» –

+0

@VincentPazeller вы правы, исправили его –

+0

{% include ... with {javascripts : block ('javascripts')}%} работал отлично для меня. – webDEVILopers