12

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メソッドを使用する場合に、これが機能することを期待する方法ではありません。このファイルを他のファイルの後に追加するにはどうすればよい ですか?ありがとう。

4

6 に答える 6

21

答えはheadScript()->prependFile、layout.phtmlとheadScript()->appendFileビューで使用することです。

于 2010-12-07T13:46:12.093 に答える
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') );
?>

これが将来のグーグルに役立つことを願っています

于 2012-06-13T15:11:01.880 に答える
1

レイアウト内のすべてのファイルを「追加」すると、コントローラーでappendFileを使用できるようになり、ファイルの後に表示されることに気付きました。残念ながら、すべてのJSファイルをレイアウト内で逆の順序でリストする必要があります(それらは自分自身の前に追加されるため)。私は本当に物事を整理し、レイアウトスタックに追加できるようにしたいと思っています。

于 2010-03-12T17:28:46.560 に答える
0

http://zendframework.com/issues/browse/ZF-3282?focusedCommentId=23552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-23552

最後のコメントは優れた解決策を提供します。最初に上部のレイアウトに含め、次に必要なときに印刷します。このように機能します。

于 2011-05-04T10:19:04.103 に答える
0

実際には、baseUrlを取得する必要はありません。ZFがすでにそれを行っているからです。あなたはただあなたの道に注意を払う必要があります。最初のスラッシュは使用しないでください。それ以外の場合、ZFはリモートアドレスを返します。

'$this->_view->headLink()->appendStylesheet('css/main.css');'を使用するだけです

于 2010-05-14T18:46:26.577 に答える
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');
        }
    }
}
于 2010-03-12T17:47:11.453 に答える