1

Zend_Navigation を PHP 配列からロードしました (しかし、それは関係ありません...)。ナビゲーション メニュー ヘルパーを使用して、ロードされたナビゲーションに基づいてメニューを生成しています。一部のメニュー項目は、出力されたメニューに表示してはならないので、そのページの配列に「'visible' => false」を設定するだけです。しかし、「非表示」メニューの URL にアクセスすると、findActive($container) ビュー ヘルパー メソッドは空の配列を返します。 ); ブラウザのタイトルを空のままにするなど。

メニュー ナビゲーション ヘルパーとナビゲーション ビュー ヘルパーの両方が 'visible' オプションを使用して (accept($page) メソッドを介して) ページを破棄するため、この設定は私の場合は役に立ちません。

ここからどのように行くのが最善でしょうか?

4

2 に答える 2

2

私は実際、はるかにエレガントな解決策を見つけました。findActive()呼び出しの前に次の行を追加するだけで、選択した場合は非表示のページが返されます。

$this->navigation()->setRenderInvisible(true);

たとえば、次のコードです。

Zend_Debug::dump($this->navigation()
                      ->findActive($this->navigation()->getContainer()));
$this->navigation()->setRenderInvisible(true);
Zend_Debug::dump($this->navigation()
                      ->findActive($this->navigation()->getContainer()));

生産:

array(0) {
}
array(2) {
  ["page"] => object(Zend_Navigation_Page_Mvc)#33 (24) {
    ... PAGE INFORMATION ...
  }
  ["depth"] => int(0)
}

興味深いのは、メニューのレンダリングに影響を与えないことです。つまり、非表示のページはまだ非表示になっています。ただし、それはあまり意味がないので、将来問題が発生しないように、もう一度falseに設定することをお勧めします。

于 2011-04-16T03:15:49.420 に答える
0

まあ、いくつかいじくり回した後、私は最終的にこのオプションを選択しました:

  1. メニューに表示したくないページの追加オプション「menuItem」があります。(このオプションは必須ではなく、null /未設定の場合があります)
  2. レイアウトのスクリプトでは、すべてのページを再帰的に繰り返し、すべてのページにtrueを設定$page->visible = false;します。false === $page->menuItem
  3. メニューナビゲーションヘルパーを呼び出します

ビュースクリプトが呼び出された後(headTitleが設定されている)にのみメニューナビゲーションヘルパーが呼び出され、レイアウトでチェックが行われると、負の欠点なしに、任意のページの表示プロパティをfalseに安全に設定できます。

于 2010-07-02T04:45:49.973 に答える