1

複数持つことは可能ですか

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

1つのビューで?

好き

<?php $this->headScript()->appendFile('foo.js'); ?>
<?php echo $this->headScript(); ?>

some other html here

<?php $this->headScript()->appendFile('bar.js'); ?>
<?php echo $this->headScript(); ?>

現在は重複していますが、コンテナfoo.jsをクリーンアップする方法はありますか?headScript

UPD

正確な問題は、私がどのように機能するかに満足していないということです<?php $this->headScript()->captureStart(); ?>。そこで指定できない<script type="...">ため、IDEはとの間のコードをJavaScriptとして扱いませcaptureStartcaptureEnd

だから私は出力を2つの部分に分割したいと思い<script type="text/javascript">ます

PS:jsを別のファイルに移動する方が良いことは知っていますが、この特定の場所では、インラインで指定する必要があります

4

3 に答える 3

2

smthが足りないのかもしれませんが、setFile 代わりに使用できないのはなぜappendFileですか?

于 2012-04-24T12:51:50.633 に答える
1

問題は、複数の.jsセクションの分離です。ヘッドリンク、ヘッドスクリプトなどのビューヘルパーがArrayAccessインターフェイスを実装しているため、これは完全に実行可能です。

これが私がそれを行う方法です-ZF2ブートストラップを使用して(一貫性を保つためにSkeletonから):

<!-- allows for comments as well, within diff. .js script tag outputs -->
<?php
$this->headScript()
    ->prependFile($this->basePath() . '/js/bootstrap.min.js')
    ->prependFile($this->basePath() . '/js/jquery.min.js')
    ->prependFile($this->basePath() . '/js/respond.min.js', 'text/javascript', array('conditional' => 'lt IE 9',))
    ->prependFile($this->basePath() . '/js/html5shiv.js',   'text/javascript', array('conditional' => 'lt IE 9',));

// Notice! below we'll echo out what we have in the headScript placeholder object
echo $this->headScript();

// Now, since it implements ArrayAccess interface, we can use exchangeArray() method
// to clear out (if you will) the stored array of .js files we've previously assigned
$this->headScript()->exchangeArray(array());
?>

<!-- Some other js file(s) I have to include -->
<?php 
$this->headScript()
     ->appendFile($this->basePath() . '/js/scripts.js', 'text/javascript');

// same as above for consistency
echo $this->headScript();
$this->headScript()->exchangeArray(array());
?>

これは非常に役立つはずです。

于 2013-11-14T14:50:46.813 に答える
0

これが通常機能する方法<?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が必要な場合に使用するヘルパーです。

于 2012-04-24T04:49:36.193 に答える