2010-07-02 2 views
1

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

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

Что было бы лучшим способом отсюда?

ответ

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

+0

да, это любопытно ... Я посмотрел на API ZF и не помню, как видел этот метод. К сожалению, у меня нет возможности проверить, будет ли это работать или нет, если бы у меня была ситуация, так как проект уже давно идет в активном производстве. Спасибо, что поделились, это гораздо более чистый способ сделать что-то. –

0

хорошо, после того, как какой-то мастерить, я, наконец, выбрал этот вариант:

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

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

Смежные вопросы