これが通常機能する方法<?php echo $this->headScript(); ?>
は、レイアウトにあります。headScript()を1回呼び出すことで、割り当てたすべてのスクリプトをエコーアウトします。私は通常、jqueryやmodernizerなどのいくつかのスクリプトをBoostrapに持っています。
//BootStrap.php
protected function _initView() {
//Initialize view
$view = new Zend_View();
$view->doctype(Zend_Registry::get('config')->resources->view->doctype);
$view->headMeta()->appendHttpEquiv('Content-Type', Zend_Registry::get(
'config')->resources->view->contentType);
$view->headLink()->setStylesheet('/css/normalize.css');
$view->headLink()->appendStylesheet('/css/blueprint/src/liquid.css');
$view->headLink()->appendStylesheet('/css/blueprint/src/typography.css');
$view->headLink()->appendStylesheet(
'/javascript/mediaelement/build/mediaelementplayer.css');
$view->headLink()->appendStylesheet('/css/main.css');
$view->headLink()->appendStylesheet('/css/nav.css');
$view->headLink()->appendStylesheet('/css/table.css');
//add javascript files
$view->headScript()->setFile('/javascript/mediaelement/build/jquery.js');
$view->headScript()->appendFile('/javascript/modernizr.js');
//add it to the view renderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer');
$viewRenderer->setView($view);
//Return it, so that it can be stored by the bootstrap
return $view;
}
後でスクリプトを追加する必要がある場合は、通常preDispatch()でコントローラーにスクリプトを渡すだけです。
public function preDispatch() {
if ($this->getRequest()->getActionName() == 'play') {
$this->_helper->layout->setLayout('play');
$this->view->headScript()->appendFile(
'http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'
);
$this->view->headScript()->appendFile(
'/javascript/mediaplayer/jwplayer.js'
);
}
}
を1回呼び出すと<?php echo $this->headScript(); ?>
、これら4つのスクリプトファイルすべてがエコーアウトされます。
inlineScript()ヘルパーを使用して、インラインスクリプトでも同じようなことができます。inlineScript()ヘルパーは、ファイルの先頭以外の場所でjavascriptが必要な場合に使用するヘルパーです。