我在尝试使用headScript()->appendFile('file name')
与Zend附加javascript文件时遇到问题。我的布局设置如下:
<?= $this->headScript()
->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
->appendFile( $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
->appendFile( $this->baseUrl('js/admin.js') );
?>
然后,在我的控制器中,我试图仅为此页面附加一个额外的js文件,如:
$this->view->headScript()->appendFile( 'another/js/file.js' );
此文件需要附加到布局中已设置的内容。但是,此文件在之前添加其他'appendFile'文件。我也试过了
$this->headScript()->offsetSetFile(999, '/js/myfuncs.js');
但是这仍然会在其他文件之前添加该文件。这不是我期望它的工作方式,特别是在使用offsetSetFile方法时。如何在其他文件后添加此文件?感谢。
答案 0 :(得分:22)
答案是在layout.phtml中使用headScript()->prependFile
,在视图中使用headScript()->appendFile
。
答案 1 :(得分:2)
我知道这是一个迟到的答案,但是!
如果你执行appendFile或者appendScript使用下一个可用的索引。因此
$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->appendFile('file2');
相当于
$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->offsetSetFile(51, 'file2');
另外需要注意的是控制器代码首先在视图/布局代码之前执行。因此,在您的情况下,您的追加实际上使用id的1000和1001.快速修复此问题只是为所有追加显式使用offsetSetFile。因此,布局中的代码如下所示:
<?=
$this->headScript()
->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
->offsetSetFile(500, $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
->offsetSetFile(501, $this->baseUrl('js/admin.js') );
?>
我希望这有助于未来的Google员工
答案 2 :(得分:1)
我注意到如果我在布局中“添加”所有文件,我可以在我的控制器中使用appendFile,它将出现在它们之后。不幸的是,那么我必须在布局中以相反的顺序列出我的所有JS文件(因为它们会自行添加)。我真的很想保持秩序,只是能够附加到我的布局堆栈。
答案 3 :(得分:0)
如果布局文件中的前置不够好,您可以在设置视图时将文件包含在引导程序中,或者如果需要根据正在加载的模块进行前置,则可以设置控制器插件。
// in your bootstrap
protected function _initHeadScript()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->headScript()->appendFile('another/js/file.js');
}
// as a plugin
class My_Plugin_HeadScriptPlugin extends Zend_Controller_Plugin_Abstract
{
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;
if($request->getModuleName() == 'foo')
{
$view->headScript()->appendFile('another/js/file.js');
}
}
}
答案 4 :(得分:0)
实际上,你不需要得到baseUrl,因为ZF已经为你做了。你只需要注意你的道路。不要使用第一个斜线!否则ZF将返回远程地址。
只需使用'$this->_view->headLink()->appendStylesheet('css/main.css');
'
答案 5 :(得分:0)
最后一条评论提供了一个很好的解决方案,首先包括在顶部的布局中,然后在需要时进行打印,这样就可以了。