11

現在、レイアウトと多くのビューを備えた大きな CakePHP アプリケーションがあります。レイアウトでは、ほとんどのビューで必要な Javascript ファイルを head にロードします。ビュー自体で、追加の Javascript ファイルをロードする (たとえば、そこでのみ必要なライブラリ ファイルをロードする) か、このビューにのみ関連する Javascript コードをスクリプト タグに追加します (たとえば、クリックが必要な場合)。ハンドラ。

HTML のヘッドブロックに Javascript ファイルをロードするとページのロードがブロックされることは既知の事実なので、body タグを閉じる前にそれらを下部に配置したいと考えました。しかし、そうすると、コンテンツをロードするビューの Javascript が壊れてしまいます。ファイルが読み込まれる前に、読み込まれたビューの Javascript コードが実行されることを理解しています。しかし、どうすればそれを防ぐことができますか?

現在、レイアウト (および他のすべての場所) で HTML ヘルパーを使用して、次のように JS ファイルをロードしています。

<?php echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'); ?>

そして、JS Helper を使用して、ページの最後に JS を「出力」します。

<?php echo $this->Js->writeBuffer(); ?>

writeBuffer を呼び出したときに実行されるように、ビューに JS コードを追加する方法はありますか? それは私を助けることができますか?

4

2 に答える 2

20

CakePHP バージョン 2.1 以降、スクリプト ブロックを使用できます。

// in your view
$this->Html->script('filename', array('block' => 'scriptBottom'));

// in your layout
echo $this->fetch('scriptBottom');

このアプローチにより、上部にスクリプトが必要な場合に備えて、レイアウトecho $this->fetch('script')を維持できます。<head>

于 2013-01-01T00:09:28.583 に答える
13

これは私が私の見解で行うことです:

echo $this->Html->script('filename', array('inline' => false));

そして、これは私のレイアウトの一番下で私がしていることです:

echo $this->fetch('script');
于 2012-12-29T19:00:46.427 に答える