2010-01-18 27 views
1

我的示例小部件:自定义脚本和样式在Symfony的部件:位置

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;?> 

的问题是,那些2个功能正确渲染形式之前产生linkscript标签。 我如何将它们移动到head部分?

回答

1

尝试在模板中添加的.css和.js文件到您的模块的view.yml代替:

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

,将得到解析并倾入你的头标记。

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

​​

从模板:

$sf_response->addJavascript('script'); 
+0

谢谢,Cryo,但我想让小部件更加可重用,而不用触摸任何在 – Darmen

+1

Gotcha中使用的任何view.yml文件。您可以将include_javascripts _...和include_stylesheets _...函数放入插槽中,然后在您的布局中使用该插槽。如果您有权访问当前上下文的响应,则可以在响应中调用addJavascript或addStylesheet将它们注入头部。 – nortron

+0

耶,这就是我需要的,再次感谢! – Darmen

3

在模板中,你应该使用

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

需要注意的是use,而不是include。请参阅this questiondocumentation

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

+0

这实际上是正确的答案,问题是_如何将它们移动到头部?_和那个标准的解决方案(即使这个帮助器调用'$ context-> getResponse() - > addStylesheet('style') ;'。 – Damien