2011-07-21 50 views
6

我想要将不同样式表文件嵌入到Symfony2项目的树枝模板中。使用过的样式表取决于用户的主题设置。如何使用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共同的呼声,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 %} 
相关问题