【问题标题】:Custom scripts and styles for widgets in Symfony: positionSymfony 中小部件的自定义脚本和样式:位置
【发布时间】:2010-01-18 06:49:39
【问题描述】:

我的示例小部件:

class myWidget extends sfWidgetFormTextarea{
    public function getJavascripts(){
        return array('my_widget.js');
    }

    public function getStylesheets(){
        return array('my_widget.css');
    }
}

表单模板:

<?php include_javascripts_for_form($form) ?>
<?php include_stylesheets_for_form($form) ?>
<?php echo $form;?>

问题是这两个函数在呈现表单之前会产生linkscript 标签。 如何将它们移至head 部分?

【问题讨论】:

    标签: javascript css symfony1 widget


    【解决方案1】:

    在模板中你应该使用

    <?php use_javascripts_for_form($form) ?>
    <?php use_stylesheets_for_form($form) ?>
    

    请注意,它是 use 而不是 include

    另请参阅 this questiondocumentation

    在这种情况下,这是一种比直接访问响应对象更好的方法。

    【讨论】:

    • 这实际上是正确的答案,问题是 如何将它们移到头部? 以及标准解决方案(即使在内部这个助手调用 $context-&gt;getResponse()-&gt;addStylesheet('style'); .
    【解决方案2】:

    尝试将 .css 和 .js 添加到模块的 view.yml 而不是模板中:

    formSuccess:
      stylesheets: [my_widget]
      javascripts: [my_widget]
    

    这将被解析并转储到您的 head 标签中。

    如果您有权访问当前上下文的响应,则可以在响应上调用 addJavascript 或 addStylesheet 以将它们注入头部。从一个动作:

    $this->getContext()->getResponse()->addStylesheet('style');
    

    来自模板:

    $sf_response->addJavascript('script');
    

    【讨论】:

    • 谢谢,Cryo,但我想让小部件更易于重用,而无需触及它们在其中使用的模块的任何 view.yml 文件
    • 明白了。您可以将 include_javascripts_... 和 include_stylesheets_... 函数包含在一个插槽中,然后在您的布局中使用该插槽。如果您有权访问当前上下文的响应,则可以在响应上调用 addJavascript 或 addStylesheet 以将它们注入头部。
    • 太好了,很高兴听到。您介意将我的回答标记为正确吗?这会让其他人知道这个问题已经解决(并且也给我一点代表奖金)。
    • 获得奖金,感谢您的帮助 =) 请更新您的答案
    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 2013-11-15
    • 2012-12-27
    • 2017-10-31
    • 2023-03-25
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多