2012-09-16 9 views
7

Obecnie tworzę aplikację internetową przy użyciu Symfony 2.1.0.Symfony2: Jak prawidłowo uwzględnić zasoby w połączeniu z dziedziczeniem szablonów Twig?

Przeczytałem w książce Templating chapter i próbuję uwzględnić zasoby (obecnie, to tylko jeden arkusz stylów) na moich stronach internetowych.

Używam Three-level inheritance system opisany w książce, a moja struktura aplikacji aktualnie wygląda tak:

  • app/Resources/widoki/
    • base.html.twig : szablon podstawowy, zawierający title, arkusze stylów i bryły bloki.
  • src/moje/PageBundle/Resources/widoki
    • layout.html.twig: szablon układ (rozszerzenie szablonu bazowego), dołączając głównego arkusza stylów do stylesheet bloku i zastąpieniem ciała bloku, włączając navigation.html.twig i definiując zawartość blok
    • layout-admin.html.twig: samo jak powyżej, ale w tym nawigacyjnym-admin.html.twig
    • src/moje/PageBundle/Resources/widoki/Main
      • standardowe szablony, rozszerzając szablon układ i zastąpieniem jej treść blok
    • src/My/PageBundle/Resources/views/Administracja
      • szablony administracyjne. To samo, co powyżej, ale rozszerzenie szablonu układu administracyjnego.
  • src/My/PageBundle/Resources/public/css
    • main.css: główny stylów

Jak widać, mam umieść arkusz stylów w moim pakiecie. Nie wiem, czy to dobra praktyka, czy nie.

Teraz chodzi o układ.html dodałem to:

{% block stylesheets %} 
    {{ parent() }} 

    <link rel="stylesheet" type="text/css" href="{{ asset('css/main.css)' }}" /> 
{% endblock %} 

Ale asset('css/main.css') jest tylko z linkami do /css/main.css, natomiast ./app/console assets:install instaluje aktywa web/bundles/mypagebundle/. Nie podoba mi się, że w ten sposób nazwa mojego pakietu będzie publicznie widoczna (co może sprawić, że użytkownicy będą podejrzewać, że używam Symfony, a ja lubię przechowywać wewnętrzne strony mojej strony, no, wewnętrznie). Czy istnieje możliwość zmiany katalogu, w którym assets:install instalowałaby zasoby? Wydaje mi się żmudne ręczne instalowanie zasobów w internecie /.

Zastanawiam się również nad wykorzystaniem Assetic do zarządzania aktywami, ponieważ osobiście podoba mi się możliwość automatycznej minimalizacji moich skryptów/arkuszy stylów i przechowywania ich wszystkich razem w jednym pliku. Jednak słyszę, że nie jest to możliwe, jeśli umieścisz arkusze stylów na różnych poziomach, tzn. Nie będzie działać z trzystopniowym systemem dziedziczenia. Czy można to obejść? Czy użycie Assetic pozwoli mi ukryć nazwę mojego pakietu przed opinią publiczną?

Odpowiedz

4

Korzystanie z assetit rozwiąże wszystkie problemy.

słyszę, że nie jest to możliwe, jeśli zawierają arkusze stylów na różnych poziomach, czyli nie będzie działać z systemem spadków trójstopniowy

Można, ale będzie to wygenerowanie pliku css dla każdego poziomu (tak jak w przypadku asset()).

przykład:

układ:

{% block stylesheets %} 
    {{ parent() }} 
    {% stylesheets 'main.css' %} 
     <link rel="stylesheet" type="text/css" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

ramach matrycy:

{% block stylesheets %} 
    {{ parent() }} 
    {% stylesheets 'sub.css' %} 
     <link rel="stylesheet" type="text/css" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Wynik:

<link rel="stylesheet" type="text/css" href="..." /> 
<link rel="stylesheet" type="text/css" href="..." /> 

Alternatywnie sub-szablonu może całkowicie zastąpić te stylów blo ck, tak, że tylko jeden arkusz stylów jest generowany (ale mniej na sucho):

{% block stylesheets %} 
    {% stylesheets 'main.css' 'sub.css' %} 
     <link rel="stylesheet" type="text/css" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

wynik (w produkcji/non debugowania):

<link rel="stylesheet" type="text/css" href="..." /> 
+0

Więc to nie jest w żaden sposób możliwe, aby Assetic kleju wszystko arkusze stylów na wszystkich poziomach razem? Ponieważ w przypadku drugiej metody musiałbym zmienić WSZYSTKIE pod-szablony, jeśli zdecyduję się dodać kolejny arkusz stylów na najwyższym poziomie, prawda? –

+0

Dobrze. Można również zdefiniować "główny" zasób w pliku config.yml (patrz dokumentacja) i odwoływać się do tego zasobu, zamiast bezpośrednio odwoływać się do pliku main.css. W ten sposób możesz zmienić główny zasób bez konieczności zmiany wszystkich szablonów. – arnaud576875

+0

Dziękuję. Na marginesie, czy reszta mojej struktury aplikacji wygląda dla ciebie jak dobra praktyka czy jest coś, czego mi brakuje? –

Powiązane problemy