ZendのheadScript()とappendfileはは期待通りに動作しません
-
19-09-2019 - |
質問
私は、ZendとheadScript()->appendFile('file name')
を使用した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法を用いた場合は特に、私は、これが動作するように期待する方法ではありません。どのように私はこのファイルの後にの他のファイルを追加することができますか?おかげます。
解決
答えはビューでlayout.phtmlとheadScript()->prependFile
でheadScript()->appendFile
を使用することです。
他のヒント
私はそれが後半の答えを知っているけど!
その場合は、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') );
?>
私は、これが今後のGoogle社員
役に立てば幸い私は、レイアウト内のすべてのファイル「を先頭に追加」ならば、私はその後、私のコントローラでappendfileはを使用することができますし、それが彼らの後に表示されることに気付きました。残念ながら、私は(彼らは自分たちの前に付けるため)レイアウトに逆の順序ですべての私のJSファイルを一覧表示する必要があります。私は本当に順序で物事を維持し、ちょうど私のレイアウトスタックに追加できるようにしたいと思います。
レイアウトファイルに前置する場合は、あなたのビューを設定するか、あなたが読み込まれているものをモジュールに基づいて前に付加する必要がある場合は、コントローラプラグインを設定することができたときに、あなたのブートストラップのファイルを含めることも、十分ではありません。
// 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');
}
}
}
実際には、あなたはZFは、すでにあなたのためにそれをしbaseUrlに」原因を取得する必要はありません。あなたは自分のパスに注意を払わなければなりません。最初のスラッシュを使用しないでください!そうでない場合はZFは、リモートアドレスを返します。
ただ、'$this->_view->headLink()->appendStylesheet('css/main.css');
を使用する '
<のhref = "http://zendframework.com/issues/browse/ZF-3282?focusedCommentId=23552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-23552" のrel = "nofollowを"> http://zendframework.com/issues/browse/ZF-3282?focusedCommentId=23552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-23552 の
最後のコメントはまず、あなたがそれを必要とするとき、そして、それが動作します。この方法を印刷上部のレイアウトに含める、優れたソリューションを提供します。