0

CakePHP 2.1の場合:
Javascriptのスニペットをレイアウト(つまりブロック)に 一度だけ
View->addScript()追加するのに最適な方法は何ですか

編集:
$this->Html->script() (JSファイルへのリンク)は重複したスクリプトを追跡しているようです
が、$this->Html->scriptBlock()(インラインJS)は追跡していません。:-(

4

2 に答える 2

2
$this->Html->script('scriptname');

そして、スクリプトがwebrootのjsフォルダーにあることを確認してください

于 2012-06-03T23:28:00.833 に答える
2

あなたができることがいくつかあります:

1.宣言された変数を探します(汚い回避策)

コードを本当に入れたい場合は$this->Html->scriptBlock()、グローバル変数を定義/チェックして、コードがすでに定義されているかどうかを確認できます。例えば:

if (!DEFINED('someVarName')) {
    // define the variable from now on
    DEFINE('someVarName', true);
    // add your block
    $this->Html->scriptBlock(...);
}

2.カスタムJSルートとファイルを作成します(ケーキの方法)

最善の方法は、ビューに含めることができる実際のJSファイルを作成すること$this->Html->script()ですが、PHPコードをJSに統合する場合は、煩わしくなります。Cakeには、ビュー固有のJSスクリプトを作成するための優れた方法がありますが、あまり話されていないようです(理由はわかりません)。

Config/routes.phpこれをファイルに追加するだけです。

Router::parseExtensions('js');

これにより、URLの末尾に「.js」を追加するだけで、CakeはコントローラーアクションのJSビューを自動的に検索します。例えば:

$this->Html->script('/users/profile.js')探すView/Users/js/profile.ctp

次に、JSレイアウトでそれを提供します。コントローラに設定されたすべての変数とデータに引き続きアクセスできるため、これはすばらしいことです。

さて...ただ一つの問題。デフォルトのJSレイアウトは、コンテンツをタグでラップします。次のように、スクリプトを外部に含めようとしている場合、これは適切ではありません<script type="text/javascript" src="/users/profile.js"></script>

私はこの方法でJSレイアウトをあまり使用していませんが、ある時点で可能性があるので、レイアウトファイルを編集して適応可能にしました。

// app/View/Layouts/js/default.ctp
<? 
if (isset($this->request->params['ext']) && $this->request->params['ext']=='js') {
    echo $this->fetch('content'); 
} else {
?>
    <? echo $scripts_for_layout; ?>
    <script type="text/javascript"><?php echo $this->fetch('content'); ?></script>
<? } ?>

詳細については(ただし、それほど多くはありません):http: //book.cakephp.org/2.0/en/development/routing.html#file-extensions

于 2013-10-10T21:52:54.140 に答える