2011-07-21 9 views
6

symfony2プロジェクトの小枝テンプレートに異なるスタイルシートファイルをasseticで埋め込みたいと思います。使用されるスタイルシートは、ユーザーのテーマ設定によって異なります。セッションの値に基づいてAsseticにスタイルシートを埋め込む方法

私は

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

どのようにこれを行うことができますか?

+0

をそれは小枝で動作するように、私はあなたのコントローラからコードの資産を登録しようとします。それほど美しいものではありませんが、うまくいくはずです。 – Problematic

答えて

10

答えは簡単です:あなたはできません。

Asseticはテンプレートを繰り返し、すべてのファイルを{% stylesheets %}ブロックから生成します。

変数(セッションなど)を使用する場合、Asseticはすべての可能な値を「推測」できません。

あなたは2つの可能性があります。

  • セパレート2つのCSSコール(共通の呼び出しのための1、専用のテーマのCSSのための1) - は私に多くの意味を成して
  • テーマ
につき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 %} 
関連する問題