Как динамически сохранить все пути .css, а затем передать их в актив для сжатия? (в Симфонии 2)

Мне трудно иметь дело с таблицами стилей и javascripts.

Все примеры для assets + twig предполагают, что вы заранее знаете все пути к файлам, которые вам понадобятся.

Предположим, я хочу создать страницу «О программе».

Шаблон about.html.twig является продолжением layout.html.twig.

Макет должен иметь пару .css и .js, которые будут использоваться на всем сайте.

Шаблон about должен загружать другие файлы .css и .js, относящиеся к нему.

Итак, блок таблиц стилей выглядит примерно так:

{% block stylesheets %}
{{ parent() }}
<link href='bla'> {# more stylesheets #}
{% endblock %}

Тогда как мне использовать актив в этом случае?

Должен ли я отправлять все активы сайта с самого начала, потому что даже тогда производительность будет повышена?

Проблема в том, что могут быть конфликты между .css, иногда вы загружаете .css только для того, чтобы переопределить свои собственные базовые настройки, поэтому вы не можете просто создать один .css для всего сайта.

Я также попытался настроить массив для хранения всех путей, затем зациклить и передать пути активным. Но похоже, что синтаксис css[] = 'another_path.css' не поддерживается веткой. Вы должны установить весь массив в одном задании


person HappyDeveloper    schedule 30.06.2011    source источник


Ответы (1)


Да, вы правы, синтаксис для расширений активов Twig предполагает, что вы знаете все активы, которые хотите включить. Но это задумано, потому что для производства предполагается, что вы выгружаете объединенный и минимизированный CSS/JS, чтобы он мог обрабатываться веб-сервером без участия PHP.

Мое лучшее предложение для вас — определить все ваши таблицы стилей, которые вы готовы включить на все страницы вашего сайта, и сделать для них активный вызов таблицы стилей.

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

layout.html.twig

// do common styles
{% stylesheets 'css/reset.css'
               'css/960.css'
               'css/foobar.css'
               filter='yui_css' %}
    <link rel="stylesheet" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}

// use an empty block for extra styles
{% block extra_styles %}{% endblock %} 

someview.html.twig

{% block extra_styles %}
    {% stylesheets 'css/about1.css'
                   'css/about2.css'
                   filter='yui_css' %}
        <link rel="stylesheet" media="screen" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

Другим решением, которое, возможно, проще, является рефакторинг вашего CSS, чтобы вы могли загрузить все стили за один раз.

person markymark    schedule 01.07.2011