からカスタムプレースホルダをクリア、のは、私はサイドバーを作成するコントローラプラグインを持っているとしましょう:Zend Frameworkの - 私はviewscriptからカスタムプレースホルダをクリアしようとしているviewscript
$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());
を使用してクリア/私のプレースホルダをリセットできると思っていたが、私がviewscriptから私のプレースホルダにアクセスすることはできませんようだ:
// 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) {
}
}
そのようなことを行うにはどのように任意のアイデア?
ありがとうございました。
編集:私のプラグインは、その後、私のviewscriptがプラグインの前を実行して、レイアウトを後を実行して、postDispatch()メソッドで登録され、実行されて以来
私の問題は、実際には非常に簡単でしたプラグイン。
今後のオプションは何ですか? preDispatchメソッドで私のサイドバーを宣言することは実際にはできません。なぜなら、スクリプトディレクトリが設定されていないため、このステップで実行するビュースクリプトを特定することができないからです。
また、action()
ヘルパーを使用することもできます。どう思いますか?質問はalready asked about itです。私はまだこれが適切なやり方ではないと感じています。
また、私のプラグインを私のコントローラのpreDispatch()メソッドに移動することも考えられますが、それは私のサイドバーにあるすべてのコントローラのコピー/ペーストやbaseControllerの作成につながりますが、このアイデアのように、私はそれが間違っているように感じる。
ひとつのアイデアは、サイドバーをレンダリングする前に '$表示 - > isSidebarRenderable'のようにフラグを設定し、レイアウトで、それをチェックすることです。面白いですが、うまくいくはずです。 –
私はこれについて考えましたが、あなたが言ったように、それは優しくないようです。とにかくあなたの考えを共有してくれてありがとう:) –
確かに。私は誰かが何かクリーナーを思いついているかどうかを見たいと思っています。乾杯! –