从包含的 Twig 模板中干净地添加 JS 和 CSS

Posted

技术标签:

【中文标题】从包含的 Twig 模板中干净地添加 JS 和 CSS【英文标题】:Adding JS and CSS cleanly from included Twig templates 【发布时间】:2012-09-22 20:59:05 【问题描述】:

我正在寻找是否有一种干净的方法可以从包含的模板中添加 JS 和 CSS。

例如,如果 layout.html.twig 有:

% include 'GenericBundle:Generic:page.html.twig' with 'data': data %
...
% block javascript %

    % javascripts
        '@GenericBundle/Resources/public/js/app/jquery/jquery.min.js'
        '@GenericBundle/Resources/public/js/lib/bootstrap/bootstrap.min.js'
    %
        <script src=" asset_url "></script>
    % endjavascripts %

% endblock %

在通用捆绑页面中,我想包含更多 Javascript,但将其添加到已建立的 Javascript 块中以保持 HTML 和 JS 最佳实践。

有没有一种干净的方法可以做到这一点?我正在使用 Symfony2,可能会使用 Singletons 之类的解决方案组合在一起,但如果有可用的方法,我宁愿使用更清洁的方法。

【问题讨论】:

【参考方案1】:

我知道我参加聚会有点晚了,但是在 Twig 1.2 中,您可以使用 use 标签和 block 函数:

GenericBundle:Generic:page.html.twig

% block javascripts %
    <script src="..."></script>
% endblock %
% block included_content %
   Bar
% endblock %

layout.html.twig

% use 'GenericBundle:Generic:page.html.twig' with javascripts as page_javascripts %

% block javascript %

    % javascripts
        '@GenericBundle/Resources/public/js/app/jquery/jquery.min.js'
        '@GenericBundle/Resources/public/js/lib/bootstrap/bootstrap.min.js'
    %
        <script src=" asset_url "></script>
    % endjavascripts %
     block('page_javascript')  // Don't forget the 'braces'

% endblock %

...
 block('included_content')  // Don't forget the 'braces'

【讨论】:

您必须在 block('page_javascript') 中加上引号才能使其正常工作,否则您会收到“变量...不存在...”错误消息 % include ... with javascripts: block('javascripts') % 对我来说很好。

以上是关于从包含的 Twig 模板中干净地添加 JS 和 CSS的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 Assetic + Twig 模板 JavaScript 继承

从 Symfony 请求中获取路由并将其传递给包含的 twig 文件?

Twig:包含另一个模板的块

在Javascript / Jquery的Twig模板中添加翻译

您可以将包含 html 的变量从模块文件发送到模板吗

如何在 Twig 中将变量从父模板传递到子模板?