在布局的head部分中放置条件脚本

时间:2014-04-22 06:07:08

标签: php zend-framework zend-view zend-layout

在我的布局中,我使用了大量的JavaScripts。其中两个脚本是有条件的,它们只应为IE9加载。应该为所有浏览器加载剩余的一个。

为了达到这个目的,我在Bootstrap类中完成了以下操作。

$this->_view->headScript ()->appendFile ( '//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js', 'text/javascript', array('conditional' => 'lt IE 9'));
$this->_view->headScript ()->appendFile ( '//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js', 'text/javascript', array('conditional' => 'lt IE 9') );
$this->_view->headScript ()->appendFile ( $this->_view->baseUrl ( '/assets/js/scripts.min.js?ver=1.0.0' ) );

这很有效,我在布局中得到了以下输出。

<!--[if lt IE 9]> <script type="text/javascript" src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script><![endif]-->
<!--[if lt IE 9]> <script type="text/javascript" src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script><![endif]-->
<script type="text/javascript" src="http://om.localhost.com/assets/js/scripts.min.js?ver=1.0.0"></script>

上面的输出很好。但它建议我将条件脚本放在布局的head部分,剩下的脚本放在body的末尾。

有没有办法在ZF1中实现这个目标?

P.S。我尝试过使用占位符,但它没有用。而且我不想在布局中对这些脚本进行硬编码。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在头部,您可以像代码一样使用headScript()方法 在身体的末尾,您可以使用InlineScript()这样的方法:

$this->view->InlineScript()->appendFile($this->view->baseUrl() .'/js/myfile.js');

并在布局结束时添加:

<?php
    echo $this->InlineScript(); 
?>

要在引导程序中添加脚本,您可以像这样进行处理:

protected function _initView()
{
    $options = $this->getOptions();
    if (isset($options['resources']['view'])){
        $view = new Zend_View($options['resources']['view']);
    }
    else{
        $view = new Zend_View;
    }
    $view->InlineScript()->appendFile(...);
}