Размещение условного скрипта в заголовке раздела макета
В моем макете я использую кучу 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>
Вывод выше в порядке. Но рекомендуется размещать условные сценарии в разделе заголовка макета, а остальные сценарии - в конце тела.
Есть ли способ добиться этого в ZF1?
PS Я пытался использовать заполнители, но это не сработало. И я не хочу жестко кодировать эти скрипты в макете.
Спасибо за вашу помощь.
1 ответ
В головной раздел, вы можете использовать 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(...);
}