Создайте экземпляр Zend_Navigation_Page_Mvc из Zend_Controller_Request - PullRequest
1 голос
/ 08 декабря 2010

В моем приложении есть страницы, которые составляют дерево навигации.Я хотел бы динамически вставлять страницы в мою навигацию, используя значения запроса.У меня уже есть логика, чтобы найти страницу и затем вызвать метод addPage() на ней.То, что я ищу, - это как легко передать значения Zend_Controller_Request в Zend_Navigation_Page::factory(), чтобы я мог добавить эту страницу.Может быть, даже написано как плагин?


Решение

AngelP получил самое близкое, так что я ему благодарен, но вот мое решение:

$request = $this->getRequest();
if ($page = $this->view->siteNav->findBy('id', $page_id)) {
    $page->addPage(Zend_Navigation_Page::factory($request->getParams())
            ->setParams($request->getParams())
            ->setLabel($this->view->title)
            ->setVisible(false));
}

Этот код выполняется из действия контроллера.$this->view->siteNav - это экземпляр Zend_Navigation, который я имею в виду.getParams() из экземпляра Zend_Controller_Request легко передается в Zend_Navigation_Page::factory(), а затем в метод setParams() экземпляра Zend_Navigation_Page_Mvc.

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

Сейчас у меня ограниченные ресурсы, поэтому я не могу проверить мое предложение, но если вы в контролере, почему бы вам не ...


$controller = $this->_request->getControllerName();
$action = $this->_request->getActionName();

$page = new Zend_Navigation_Page( array(
                   'label' => "Sonny's Page",
                   'controller' => $controller,
                   'action' => $action
));

Может быть, вы могли бы использовать это как плагин, чтобы перегружать ваше представление? А потом добавить в свой навигационный контейнер?

Приветствия
Angel

1 голос
/ 08 декабря 2010

Поскольку мы не знаем код, который вы уже написали, я только догадываюсь ...

Вам необходимо:

  • получение фактического контейнера Zend_Navigation, используемого в navigation() помощнике вида
  • создать новый экземпляр Zend_Navigation_Page из массива данных, извлеченных из запроса
  • добавить страницу в контейнер
  • назначить новый контейнер помощнику по навигации

Это должно быть легко. Остальное нужно знать:

  • как написать плагин контроллера с помощью метода preDispatch и поместить туда выше,
  • как получить доступ к текущему экземпляру представления в этом плагине (из средства визуализации представления или из ресурса приложения / начальной загрузки)

Затем в плагине вы работаете с помощником навигационного вида, как обычно в представлении.

Надеюсь, это прояснило некоторые вещи.

0 голосов
/ 08 декабря 2010

Почему бы не сохранить экземпляр в Zend_Registry, а затем в postDispatch из плагина, модуля начальной загрузки или контроллера действий добавить страницы в исходный nav?

...