それを実現することは可能ですか?コントロールの結果であるビューでは、ビューヘルパーは正常に機能します。しかし、たとえば、現在の状態に応じてjqueryメニューをレンダリングするために、いくつかの動的なレイアウトが必要です。
レイアウトからヘルパーを呼び出すと、headScriptがヘルパー内で行ったappendScriptコマンドをエコーすることはありません。
ありがとう!
それを実現することは可能ですか?コントロールの結果であるビューでは、ビューヘルパーは正常に機能します。しかし、たとえば、現在の状態に応じてjqueryメニューをレンダリングするために、いくつかの動的なレイアウトが必要です。
レイアウトからヘルパーを呼び出すと、headScriptがヘルパー内で行ったappendScriptコマンドをエコーすることはありません。
ありがとう!
ここにはいくつかのオプションがあります。
必要なことを行う最も簡単な方法は、inlineScript()ビューヘルパーを使用して、ブートストラップのビューに追加するか、レイアウトスクリプトに直接追加することです。inlneScript()ヘルパーは、headScript()ヘルパーと同じように機能しますが、コードをマークアップに配置します。inlineScript()ヘルパーを使用して、構成データをオーディオおよびビデオプレーヤーに渡すことがあります。
または、ビューヘルパーを使用して独自のプレースホルダーを作成し、ブートストラップで初期化することもできます。
メニューをレンダリングするカスタムプレースホルダーの簡単な例を次に示します。
ブートストラップ:
protected function _initMenus() {
//get view object
$view = $this->getResource('view');
//assign the id for the menus...
$view->mainMenuId = 4;
$view->adminMenuId = 5;
}
レイアウト:
<?php
$this->layout()->adminMenu = $this->action(
'render', 'menu', null, array('menu' => $this->adminMenuId))
?>
<div id="adminMenu">
<!-- Render the placeholder -->
<?php echo $this->layout()->adminMenu ?>
</div>
このプレースホルダーは、action()ヘルパーを使用してrenderAction()を呼び出すだけですが、プレースホルダーで実行できることは、想像力によってかなり制限されます。
レイアウトでヘルパーが呼び出された場合、headScriptヘルパーの実行後にheadScriptが呼び出される可能性があるため、これは不可能だと思います。それを機能させる唯一の方法は、headScriptを呼び出す前に、ヘルパーがレイアウトの上部近くで呼び出されるようにすることです。