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>

Вы нашли какое-нибудь решение?

Alexey Kosov 19.02.2020 14:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
391
1

Ответы 1

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

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

Замечательно связывать активы с каждым типом виджета! Как я могу загрузить их в конце моей страницы? Я имею в виду, что с вашим решением блоки ресурсов будут отображаться в теле страницы при отображении каждого шаблона виджета. Я бы хотел, чтобы эти активы были загружены в конец страницы.

Franck 16.03.2018 11:39

Другие вопросы по теме