2012-11-05 9 views
5

Używam MopaBootstrapBundle w Symfony 2.1.3 z Gałązka szablonów. Ten pakiet ma base.html.twig szablon, który zawiera blok Skrypty:nie mogą zastąpić rozszerzony blok szablon gałązka opróżnić

{% block foot_script %} 
    {# To only use a subset or add more js overwrite and copy paste this block 
    To speed up page loads save a copy of jQuery in your project and override this block to include the correct path 
    Otherwise the regeneration is done on every load in dev more with use_controller: true 
    #} 
    {% javascripts 
     'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-transition.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-modal.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-dropdown.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-scrollspy.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-tab.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-tooltip.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-popover.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-alert.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-button.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-collapse.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-carousel.js' 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-typeahead.js' 
     '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js' 
     '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js' 
    %} 
<script type="text/javascript" src="{{ asset_url }}"></script> 
{% endjavascripts %} 
{% endblock foot_script %} 

mam rozszerzając go w moim szablonu przy użyciu:

{% extends 'MopaBootstrapBundle::base.html.twig' %} 
{% block foot_script %}{% endblock foot_script %} 

Ale to nadal próbuje załadować Bundle za podstawę .html.twig szablon i otrzymuję:

Wyjątek został zgłoszony podczas kompilacji template ("Nie można znaleźć pliku " @ MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-transition.js ".") w "MopaBootstrapBundle :: base.html.twig".


Co znalazłem się znaczy, że jeśli przedłużyć go tak:

{% extends 'MopaBootstrapBundle::base.html.twig' %} 
{% block foot_script %} 
    {% javascripts 
     '@MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-typeahead.js' 
     '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js' 
     '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js' 
    %} 
<script type="text/javascript" src="{{ asset_url }}"></script> 
{% endjavascripts %} 
{% endblock foot_script %} 

zanotować typeahead.js

uzyskać:

Wyjątek został zgłoszony podczas kompilacji szablonu ("Nie można znaleźć pliku " @ MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-typeahead.js ".") w "MopaBootstrapBundle :: base.html.twig".

Jeśli usunąć tylko jedną linię:

{% extends 'MopaBootstrapBundle::base.html.twig' %} 
{% block foot_script %} 
    {% javascripts 
     '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js' 
     '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js' 
    %} 
<script type="text/javascript" src="{{ asset_url }}"></script> 
{% endjavascripts %} 
{% endblock foot_script %} 

uzyskać:

Wyjątek został wyrzucony podczas kompilacji szablonu ("Nie można znaleźć pliku " @ MopaBootstrapBundle/Resources/bootstrap/js/bootstrap-transition.js ".") w "MopaBootstrapBundle :: base.html.twig".

Nadal próbuje załadować wszystkie skrypty z szablonu podstawowego.

Jakieś sugestie, jak pominąć blok * foot_script *, aby był pusty i nie ładował tych plików JS?

+0

Myślę, że problem polega na tym, że najpierw analizowany jest znacznik '{% javascripts%}', a następnie znaczniki '{% block%}'. Nie wiem, jak to naprawić. [Ten numer przez fabpot] (https://github.com/symfony/symfony-docs/issues/752) może może ci pomóc? –

+0

Nawet nie wiem, czy to rozwiązanie (nie sądzę), ale jeśli pliki znajdują się w katalogu bootstrap, to działa zgodnie z oczekiwaniami. – CRONUS

+0

Jako szybką naprawę, może załadować pusty plik js z Twojego pakietu, taki jak: {% extends 'MopaBootstrapBundle :: base.html.twig'%} {% blok foot_script%} {% javascripts '@ MyBundle/Resources /public/js/dummy-file.js'%} {% endblock foot_script%} – olegkhuss

Odpowiedz

1

Co chcesz jest osadzićMopaBootstrapBundle::base.html.twig zamiast rozszerzenie go.Należy użyć gałązka za embed tag:

{% embed 'MopaBootstrapBundle::base.html.twig' %} 
    {% block foot_script %}{% endblock foot_script %} 
{% endembed %} 

Z dokumentacji gałązka za:

znacznika embed łączy zachowanie include i rozciąga. Pozwala na dołączenie zawartości innego szablonu, podobnie jak to, co zawiera. Ale pozwala również na zastąpienie dowolnego bloku zdefiniowanego w dołączonym szablonie, na przykład podczas rozszerzania szablonu.

+0

To nie działa (przynajmniej w Symfony 2.3) – Matt

+1

Na pewno działa to w Symfony 2.3 – rabudde

+0

Znacznik embed został dodany w Twig 1.8. – tom10271

Powiązane problemy