【问题标题】:$sf_response->addStyleSheet() dosen't work in SF 1.4?$sf_response->addStyleSheet() 在 SF 1.4 中不起作用?
【发布时间】:2010-01-20 00:31:27
【问题描述】:

有谁知道如何使用 Symfony 1.4 在模板中添加样式表?

我已经尝试了我能想到的一切,从修改 frontend/config/view.yml 到修改模板本身 - 两者都有效。

我从我的搜索中看到,其他人也遇到了同样的问题。使用 include_stylesheets 和 use_stylesheets 之间似乎存在某种冲突——但是这在任何地方都没有记录在 AFAIK 中。

【问题讨论】:

    标签: symfony1 stylesheet symfony-1.4


    【解决方案1】:

    编辑:

    好的,我想我现在明白了。您应该将 include_stylesheets() 添加到 layout 文件的 head 部分:

    <html>
       <head>
           <title>This is the title</title>
           <?php include_stylesheets() ?>
       </head>
       <body>
       <!-- ... -->
    

    然后在您的 模板 文件中,您使用 use_stylesheet() 为该模板添加特定样式表:

    <?php use_stylesheet('/path/to/stylesheet.css') ?>
    

    来自API documentation

    include_stylesheets()
    为 view.yml 中配置或添加到响应对象的所有样式表打印 &lt;link&gt; 标签。

    use_stylesheet()
    向响应对象添加样式表。

    对于 Javascript 也是如此。


    根据API documentation 应该在 1.4 中仍然可以工作,sfWebResponse 仍然有这个方法:

    addStylesheet ($file, $position, $options)   
      $file   The stylesheet file  
      $position   Position   
      $options    Stylesheet options  
    Adds a stylesheet to the current web response.
    

    至少方法存在。
    究竟是什么问题?如果您想调用该方法,或者只是没有添加样式表,您会收到错误消息吗?

    【讨论】:

    • 看来poster不知道如何在1.4的模板中动态添加样式表
    • 您好 Felix - 很高兴再次收到您的来信(很久了!)。该问题与 1.4 中从 filters.yml 中删除的通用过滤器有关。尽管我只询问了样式表,但有两个与此问题相关的问题。此问题还会影响将 javascript 添加到页面的方式(就在结束 body 标记结束之前) - 这意味着如果您使用 jQuery(例如),您会收到诸如 jQuery 未定义之类的错误(因为 jQuery 逻辑在在加载 jQuery 库之前遇到模板 - 但这是另一天的另一个问题)...
    • 新更改破坏了我现有的页面(对于 javascript 相关问题,这只影响使用 jQuery 的页面)。回到这个问题,(关于样式表),正如我所提到的,我尝试了文档中提到的所有内容(顺便说一句自相矛盾) - 在一个文档(都与 1.4 版本相关)中,它建议使用 view.yml 和 include_stylesheets () 并且在另一个建议中使用 use_stylesheet() - 我很惊讶没有人发现这一点。无论如何,我尝试了这两种方法(是的,并且也清除了缓存) - 没有工作。然后我尝试了 $sf_response->addStyleSheet()
    • $sf_response->addStyleSheet() 也没有工作,在我的厌恶中(在这浪费了两天之后),我降级到 1.3。除非我错了(我会很高兴被证明是错的),我认为 1.4 还不是真的适合生产——因为它似乎是“功能”而不是“常识”。我不会在很长一段时间内为 1.4 烦恼,直到它已经解决,所有这些“问题”都已经解决了。
    • Felix:为上面的(轻微?)咆哮道歉。为了直接回答您的问题,当我说“它不起作用”时,我的意思是 CSS 文件未添加到生成的视图(输出)中
    【解决方案2】:

    http://www.symfony-project.org/tutorial/1_4/en/upgrade#removal_of_the_common_filter

    从 1.4 开始,您的 javascript 和样式表不再自动注入到您的 head 标记中。相反,您需要在您希望放置它们的布局中包含以下内容:

    <?php include_javascripts() ?>
    <?php include_stylesheets() ?>
    

    如果您的帖子标题不是错字,您可以在回复中使用 addStylesheet('...') :

    $sf_response->addStylesheet('main');
    

    【讨论】:

    • 实际上这些方法可以从任何模板文件中调用,而不仅仅是布局。
    • Darmen:这并不完全正确,因为include_stylesheets() 命令打印出link 标签,而body 标签中不允许使用这些标签。实际上,正文中的 link 标记仅在使用完整 URL 时才有效。当然,如果您在 head 部分中定义一个插槽并在模板中使用此输出填充该插槽,它就可以工作。另见:archivist.incutio.com/viewlist/css-discuss/74331
    【解决方案3】:

    $sf_context-&gt;getResponse()-&gt;addStylesheet('style.css')

    $sf_context-&gt;getResponse()-&gt;addJavascript('script.js')

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 2015-10-16
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2013-10-26
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多