Zend_Navigation со скрытыми страницами

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

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

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

Solutions Collecting From Web of "Zend_Navigation со скрытыми страницами"

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

ну, после некоторого возиться, я, наконец, выбрал этот вариант:

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

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