Как встроить таблицы стилей в Assetic на основе значения в сеансе - PullRequest
6 голосов
/ 21 июля 2011

Я хочу встроить различные файлы таблиц стилей со сборкой в ​​шаблон веточки проекта Symfony2. Используемая таблица стилей зависит от настроек темы пользователя.

Я использовал

{% stylesheets 
        '@CuteFlowCoreBundle/Resources/public/css/application.css'
        '@CuteFlowCoreBundle/Resources/public/css/theme/'~app.session.get('cuteflow_theme')~'/application.css'
%}
    <link rel="stylesheet" href="{{ asset_url }}" type="text/css" media="all" />
{% endstylesheets %}

Но это выдает ошибку:

Unexpected token "operator" of value "~" in "CoreBundle::layout.html.twig"

Я тоже попробовал следующее. Но это тоже не помогло.

{% set theme = '@CuteFlowCoreBundle/Resources/public/css/theme/'~app.session.get('cuteflow_theme')~'/application.css' %}
{% stylesheets 
        '@CuteFlowCoreBundle/Resources/public/css/application.css'
        theme
%}
    <link rel="stylesheet" href="{{ asset_url }}" type="text/css" media="all" />
{% endstylesheets %}

Есть идеи, как это можно сделать?

1 Ответ

10 голосов
/ 27 июля 2011

Ответ прост: вы не можете сделать это.

Assetic будет повторять ваши шаблоны и генерировать все файлы из {% stylesheets %} блоков.

Если вы используете переменную (например, сеанс), Assetic не сможет «угадать» все возможные значения.

У вас есть 2 варианта:

  • Отдельные 2 вызова CSS (1 для общего вызова, 1 для выделенной темы CSS) - имеет для меня больше смысла
  • Создать 1 CSS на тему

Отдельные 2 вызова CSS

{% stylesheets "A.css" "B.css" %} ... {% endstylesheets %}
<link rel="stylesheet" href="{{ asset("css/" ~ theme ~ ".css") }}" />

Создание 1 CSS на тему

Если вы хотите создать одну тему для каждой доступной темы, для простоты вы должны сделать это вручную:

{% if theme == "XXX" %}
  {%stylesheets "A.css" "XXX.css" %} ... {% endstylesheets %}
{% elseif theme == "YYY" %}
  {%stylesheets "A.css" "YYY.css" %} ... {% endstylesheets %}
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...