работая над проектом на основе Symfony PHP CMS, у меня возникают вопросы по загрузке ресурсов.
Мы создали несколько типов виджетов, доступных в управлении контентом. Это позволяет участникам добавлять один или несколько виджетов на свои страницы. У каждого типа виджета есть свои стили и скрипты.
В фактическом состоянии мы загружаем все активы виджетов в конце страницы даже если страница не содержит виджетов всех типов.
Чтобы оптимизировать вес и загрузку страницы, мы хотели бы иметь механизм, который добавлял бы вызов одного актива виджета (во время рендеринга виджета) и откладывал бы их загрузку в конце страницы.
Вы знаете инструмент, который мог бы сделать эту работу?
Невозможно показать весь код, но, вкратце, вот что я хотел бы сделать:
<body>
<article>
<widget_one>// I need @widget_one assets</widget_one>
<widget_two>// I need @widget_two assets</widget_one>
.....
.....
</article>
<assets>// now I load all needed assets</assets>
</body>






Я придумал, что вы можете использовать Использование именованных активов:
# app/config/config.yml
assetic:
assets:
widget_one:
inputs:
- '@AppBundle/Resources/public/js/widget_one_first_js.js'
- '@AppBundle/Resources/public/js/widget_one_second_js.js'
widget_two:
inputs:
- '@AppBundle/Resources/public/js/widget_two_first_js.js'
- '@AppBundle/Resources/public/js/widget_two_second_js.js'
После этого в вашем шаблоне вы его используете -> если у вас есть widget_one
{% javascripts
'@widget_one'
<script src = "{{ asset_url }}"></script>
{% endjavascripts %}
если у вас есть widget_one
{% javascripts
'@widget_two'
<script src = "{{ asset_url }}"></script>
{% endjavascripts %}
Вы должны использовать наследование шаблонов: например base.html.twig
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8" />
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>
После этого:
{% extends '::base.html.twig' %}
{% block javascripts %}
{% for widget in widgets %}
INCLUDE ASSETS
{% endfor %}
{% endblock %}
{% block body %}
{% for widget in widgets %}
SHOW WIDGET!
{% endfor %}
{% endblock %}
Замечательно связывать активы с каждым типом виджета! Как я могу загрузить их в конце моей страницы? Я имею в виду, что с вашим решением блоки ресурсов будут отображаться в теле страницы при отображении каждого шаблона виджета. Я бы хотел, чтобы эти активы были загружены в конец страницы.
Вы нашли какое-нибудь решение?