我想在Symfony2项目的twig模板中嵌入带有资产的不同样式表文件.使用的样式表取决于用户的主题设置.
我用了
{% 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 %}
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:
Unexpected token "operator" of value "~" in "CoreBundle::layout.html.twig"
Run Code Online (Sandbox Code Playgroud)
我也试过以下.但这也没有帮助.
{% 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 %}
Run Code Online (Sandbox Code Playgroud)
有什么想法可以做到这一点?
Ale*_*omé 10
答案很简单:你做不到.
Assetic将迭代您的模板并从{% stylesheets %}块生成每个文件.
如果您使用变量(例如会话),则Assetic无法"猜测"所有可能的值.
你有两种可能性:
分开2个CSS调用
{% stylesheets "A.css" "B.css" %} ... {% endstylesheets %}
<link rel="stylesheet" href="{{ asset("css/" ~ theme ~ ".css") }}" />
Run Code Online (Sandbox Code Playgroud)
每个主题创建1个CSS
如果要为每个可用主题创建一个主题,为了保持简单,您必须手动执行:
{% if theme == "XXX" %}
{%stylesheets "A.css" "XXX.css" %} ... {% endstylesheets %}
{% elseif theme == "YYY" %}
{%stylesheets "A.css" "YYY.css" %} ... {% endstylesheets %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2730 次 |
| 最近记录: |