2

我很难处理样式表和 javascripts。

所有assetic + twig 的例子都假设你事先知道你需要的文件的所有路径。

假设我想创建一个“关于”页面。

“about.html.twig”模板从“layout.html.twig”扩展而来。

布局必须有几个 .css 和 .js 将在整个站点中使用。

about 模板必须加载特定于它的其他 .css 和 .js 文件。

所以样式表块看起来像这样:

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

那么在这种情况下我该如何使用资产呢?

我是否应该从一开始就发送网站的所有资产,因为即使那样,性能也会得到提升?

问题是 .css 之间可能存在冲突,有时您加载 .css 只是为了覆盖您自己的基本设置,因此您不能只为整个站点创建单个 .css。

我还尝试设置一个数组来存储所有路径,然后循环并将路径传递给资产。但似乎 twig 不支持语法 css[] = 'another_path.css' 。您必须在一个作业中设置整个数组

4

1 回答 1

2

是的,您是正确的,资产 Twig 扩展的语法确实希望您知道要包含的所有资产。但这是设计使然,因为在生产环境中,您需要转储合并和缩小的 CSS/JS,以便它可以由 Web 服务器处理,而无需涉及 PHP。

我对您的最佳建议是确定您乐于包含在您网站的所有页面上的所有样式表,并为它们进行资产样式表调用。

然后对于需要额外样式表的特定页面,您可以在需要时进行第二次资产调用。

布局.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,以便您可以一次性下载所有样式。

于 2011-07-01T11:57:55.357 回答