Zend_Navigation со скрытыми страницами - PullRequest
1 голос
/ 02 июля 2010

У меня Zend_Navigation загружен из массива PHP (но это не имеет значения ...), и я использую помощник меню навигации для создания меню на основе загруженной навигации.Некоторые пункты меню не должны появляться в выводимом меню, поэтому я просто устанавливаю «visible» => false в своем массиве для этой страницы, и все!Но если осуществляется доступ к URL-адресу «скрытого» меню, вспомогательный метод представления findActive ($ container) возвращает пустой массив, поэтому страница из контейнера не возвращается, даже если она должна (например, если страница не существует));оставляя заголовок браузера пустым и т. д.

Поскольку и помощник по навигации по меню, и помощник по просмотру навигации используют опцию 'visible' для удаления страницы (через метод accept ($ page)), этот параметр бесполезенв моем случае.

Какой самый лучший путь отсюда?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Я на самом деле только что нашел гораздо более элегантное решение. Просто добавьте следующую строку перед вызовом 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, чтобы убедиться, что это не вызовет проблем в будущем.

0 голосов
/ 02 июля 2010

ну, после некоторой переделки я наконец выбрал эту опцию:

  1. У меня есть дополнительная опция для страницы, которую я не хочу показывать в моем меню: "menuItem". (эта опция не обязательна и может быть нулевой / неустановленной)
  2. в сценарии моего макета я рекурсивно перебираю все страницы и устанавливаю $page->visible = false; на всех страницах, что false === $page->menuItem истинно
  3. я вызываю помощника по навигации по меню

Поскольку, когда помощник по навигации по меню вызывается только после вызова скрипта вида (установлен headTitle), и проверка выполняется в моем макете, я могу смело устанавливать свойство visible любой страницы на false без отрицательных недостатков.

...