У меня есть Zend_Navigation, загруженный из массива PHP (но это неуместно …), и я использую вспомогательный меню навигации для создания меню на основе загруженной навигации. Некоторые пункты меню не должны появляться в выведенном меню, поэтому я просто устанавливаю «visible» => false »в моем массиве для этой страницы, и вы идете! Но если доступ к URL-адресу «скрытого» меню доступен, вспомогательный метод представления findActive ($ container) возвращает пустой массив, поэтому страница из контейнера не возвращается, даже если она должна (например, если страница не существует ); оставляя заголовок браузера пустым и т. д.
Поскольку помощник навигации меню и помощник навигационного вида используют «видимый» вариант для удаления страницы (через метод accept ($ page)), этот параметр бесполезен в моем случае.
Каким будет лучший путь отсюда?
На самом деле я нашел гораздо более элегантное решение. Просто добавьте следующую строку перед вызовом 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, чтобы убедиться, что это не вызовет проблем в будущем.
ну, после некоторого возиться, я, наконец, выбрал этот вариант:
$page->visible = false;
на всех страницах, что false === $page->menuItem
true Поскольку, когда вспомогательный помощник меню вызывается только после вызова сценария вида (headTitle установлен), а проверка выполняется в моем макете, я могу безопасно установить видимое свойство любой страницы на false без отрицательных недостатков.