Pracuję nad projektem, który ma wiele elementów współużytkowanych, np. stopka, nagłówek, nawigacja itp. Mam kilka układów, które rozszerzam w moich widokach. Na razie ładuję elementy wspólne w widoku, ale muszę dostarczyć wszystkie zasoby (zależności) wymagane dla każdego elementu współużytkowanego w widoku, do którego go ładuję. Chciałbym móc pominąć ten krok i załadować element, który byłby gotowy do użycia od razu (więc nie musiałbym pamiętać wszystkich zależnych plików javascript i css, ponieważ niektóre z nich mogą mieć kilka) .Tworzenie gotowych do użycia elementów współużytkowanych za pomocą twig
Zastanawiam się nad określeniem wszystkich zasobów potrzebnych dla elementu współdzielonego w widoku elementu, więc gdy uwzględnię element, którego potrzebuję, załaduje on zasoby "automatycznie", bez podawania wszystkich w moim widoku. Tak więc moje pytanie brzmi: czy można to zrobić, czy też jest to właściwy sposób, aby to osiągnąć?
nadzieję, że będzie jeszcze lepiej wyjaśnione za pomocą kodu:
strukturę:
views/
- /layout/
-> layout.twig
- /homepage/
-> index.twig
- /shared/
-> navigation.twig
układ:
<!-- HTML headers, etc. -->
{% block assets %}
<link rel="stylesheet" href="xxx" />
{% endblock %}
{% block content %}
{% endblock %}
Widok:
{% extends "layout/layout.twig" %}
{% block assets %}
{{ parent() }}
<!-- some assets for view -->
{% endblock %}
{% block content %}
{% include "shared/navigation.twig" %}
<!-- content -->
{% endblock %}
udostępnionego elementu navigation.twig :
// It's not working, of course - just for better explanation of what I'm trying to approach
{% block assets %}
{{ parent() }}
<!-- assets needed for shared element -->
{% endblock %}
<!-- rest of shared element -->
Chyba, normalnie, nie ładować wszystkich aktywów w widokach niektóre wspólne elementy mogą mieć wiele z nich, szczególnie w większym projekcie. Uważam też, że miło jest zauważyć, że naprawdę nie chcę renderować stylów dla nich wewnątrz <body>
, więc utworzenie wewnątrz widoku <links>
nie jest dla mnie dobrym pomysłem. Ma to działać jak element współdzielony, z którego możesz kontrolować, gdzie zostaną załadowane zasoby i jakie zasoby zostaną załadowane, nawet nie wiedząc, jakie zasoby są wymagane dla każdego elementu współużytkowanego. Z góry dziękuję.
Witam, czy próbowałeś używać bloków stylów i javascripts osobno? –
Nie jestem pewien, co przez to rozumiesz. Rozdzielam je, jeśli chodzi o element współdzielony, skrypty są najczęściej na końcu widoku tego elementu współdzielonego (co jest w porządku, ale wolę je mieć na końcu ciała), a arkusze stylów są ładowane z widoku samo w sobie (co jest dla mnie problemem, ponieważ chcę je zapisać w ich widoku i załadować je do wnętrza głowy). –
Najlepsza praktyka jest wyjaśniona w dokumentacji symfony: https://symfony.com/doc /3.4/templating.html#including-stylesheets-and-javascripts-in-twig –