Symfony: как динамически включить ресурсы и отложить их загрузку в конце страницы?

работая над проектом 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>

0

Решение

Я придумал, вы можете использовать Использование именованных активов:

# 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 %}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector