ビュースクリプトからカスタム プレースホルダーをクリアしようとしています。たとえば、サイドバーを作成するコントローラー プラグインがあるとします。
$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
$view = $bootstrap->getResource('view');
$partial = $view->render('partials/_sidebar.phtml');
$view->placeholder('sidebar')->append($partial);
私のパーシャルにはサブメニューが含まれています (Zend_Navigation ビュー ヘルパーを介してレンダリングされます)。
そのサイドバーをレンダリングするために、私はこれを私のレイアウトに持っています:
<?= $this->placeholder('sidebar'); ?>
しかし、一部のページ(ログイン ページなど) でサイドバーを表示したくない場合はどうすればよいでしょうか? これらのケースをどのように処理できますか?
を使用してプレースホルダーをリセット/クリアできると思って$this->placeholder('sidebar')->exchangeArray(array());
いましたが、ビュースクリプトからプレースホルダーにアクセスできないようです:
// in /application/modules/default/views/account/login.phtml
<?php $placeholder = $this->placeholder('sidebar');
Zend_Debug::dump($placeholder); ?>
// output:
object(Zend_View_Helper_Placeholder_Container)#217 (8) {
["_prefix":protected] => string(0) ""
["_postfix":protected] => string(0) ""
["_separator":protected] => string(0) ""
["_indent":protected] => string(0) ""
["_captureLock":protected] => bool(false)
["_captureType":protected] => NULL
["_captureKey":protected] => NULL
["storage":"ArrayObject":private] => array(0) {
}
}
そのようなことを行う方法はありますか?
ありがとう。
編集:
私のプラグインは postDispatch() メソッドで登録および実行され、プラグインの前にビュースクリプトが実行され、プラグインの後にレイアウトが実行されたため、私の問題は実際には非常に単純でした。
これから、私の選択肢は何ですか?スクリプト ディレクトリが設定されていないため、preDispatch メソッドでサイドバーを実際に宣言することはできません。したがって、このステップで実行するビュー スクリプトを決定することはできません。
ヘルパーを使うこともできaction()
ますが、どう思いますか? それについてはすでに質問されています。これは適切な方法ではないと今でも感じており、やり過ぎに思えます。
また、別のアイデアは、プラグインをコントローラーの preDispatch() メソッドに移動することですが、それにより、すべてのコントローラーでサイドバーをコピー/貼り付けするか、baseController を作成することになりますが、それでもこのアイデアは好きではありません、私はそれを間違っているように感じます。
何か案が?