0

それを実現することは可能ですか?コントロールの結果であるビューでは、ビューヘルパーは正常に機能します。しかし、たとえば、現在の状態に応じてjqueryメニューをレンダリングするために、いくつかの動的なレイアウトが必要です。

レイアウトからヘルパーを呼び出すと、headScriptがヘルパー内で行ったappendScriptコマンドをエコーすることはありません。

ありがとう!

4

2 に答える 2

1

ここにはいくつかのオプションがあります。
必要なことを行う最も簡単な方法は、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 ?>&nbsp;
</div>

このプレースホルダーは、action()ヘルパーを使用してrenderAction()を呼び出すだけですが、プレースホルダーで実行できることは、想像力によってかなり制限されます。

于 2012-05-11T09:39:11.597 に答える
0

レイアウトでヘルパーが呼び出された場合、headScriptヘルパーの実行後にheadScriptが呼び出される可能性があるため、これは不可能だと思います。それを機能させる唯一の方法は、headScriptを呼び出す前に、ヘルパーがレイアウトの上部近くで呼び出されるようにすることです。

于 2012-05-11T09:11:11.693 に答える