2011-08-05 15 views
25

Budujemy nową witrynę za pomocą Symfony2, a Assetic wygląda bardzo obiecująco na zarządzanie zasobami, w szczególności do automatycznego łączenia i przetwarzania wszystkich plików js/css.Łączenie zasobów zasobów z odziedziczonymi szablonami

Mamy pewne zasoby, które są używane na stronie, a niektóre są specyficzne dla poszczególnych stron. Będziemy również stosować trójwarstwowe dziedziczone podejście do szablonów.

Czy istnieje sposób połączenia obu koncepcji, tj. Automatycznego dodawania dodatkowych zasobów w odziedziczonych szablonach, tak aby wszystkie były wyświetlane jako pojedynczy zasób?

Odpowiedz

17

Niestety, nie można :(

Nie można zastąpić assetic tagów dodać więcej aktywów Można jednak wykonać następujące czynności:.

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Wtedy, kiedy rozszerzenie szablonu :

{% block stylesheets %} 
    {% stylesheets 'your_old_assets_here' 'your_new_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

W zastąpionej bloku, można użyć parent() zawierać blok nadrzędny, ale trzeba wtedy 2 linki: nie można połączyć stare z tag assetic nowy.

Można jednak utworzyć makro gałązkowe, które wyświetli znacznik aktywów {% stylesheets%} przy użyciu starych zasobów, a jako dane wejściowe będzie zawierać nowe lokalizacje zasobów.

Więcej informacji here.

+0

Drat, I podejrzenie tak samo. Dzięki za wskaźnik do makr gałązkowych. –

+0

Ale czy najpierw nie działa Assetic? –

+0

Myślę, że to jest prawidłowe zachowanie: łączenie aktywów, które muszą znajdować się na jednej stronie/trasie, które uważam za nienajlepsze. Właśnie takie zachowanie pragnę. Tak więc, dziękuję za rozwiązanie dotyczące wstawiania plików tylko dla jednej trasy! :) – Aerendir

23

Rzeczywiście można wykonać następujące czynności:

W layout.html.twig (lub bez względu na układ jest)

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

A w każdym szablonie, który rozciąga się, że układ:

{% block stylesheets %} 
    {{ parent() }} 
    {% stylesheets 'additional_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Następnie nie trzeba ponownie wpisywać wszystkich starych aktywów zgodnie z sugestią Nemanja Niljkovica

+0

Tak, ale (cytat z Nemana Niljkovic): "ale masz 2 linki, ponieważ nie możesz połączyć starego tagu aktywów z nowym" –

+28

Nie ma większego sensu łączenie nowych plików w zestaw arkuszy stylów/skryptów od rodzica, ponieważ to by złamało cel buforowania, ponieważ możesz mieć wiele takich stron z własnym zestawem dodatkowych plików ... połączenie ich oznaczałoby nowy zestaw połączonych plików dla * każdej strony * ! Powiedz cześć pamięci podręcznej przeglądarki. Dlatego lepiej jest mieć oddzielny zestaw połączonych plików dla stron z dodatkowymi plikami warstwy, więc przynajmniej bardziej ogólny zestaw arkuszy stylów/skryptów będzie zawsze przechowywany w pamięci podręcznej – Populus