работая над проектом 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 %}
Других решений пока нет …