Zend_Navigation несовместима с Zend_Router при написании контроллера / действий?

Начинающий разработчик Zend Framework пытается найти простое решение проблемы Zend Routing. Я уверен, что один из профессионалов сможет помочь.

У меня есть веб-сайт (построенный в Zend Framework с использованием Zend_Navigation), который содержит 75% статического содержимого HTML-страницы и несколько контроллеров. Навигация верхнего уровня построена в Zend_Navigation, циклически перебирая части.

Из-за своей работы я создаю множество сайтов по этим направлениям (содержащих множество статических страниц), поэтому я хочу понять это правильно. Я не хочу настраивать контроллеры и действия для каждой из этих статических страниц (их много), и я хотел создать решение, в котором я использовал Zend_Controller_Router_Route для автоматической маршрутизации всего статического контента через StaticController, чья работа включать или отображать .phtml-страницы на основе пары контроллер / действие в URL-адресе из какого-то каталога, такого как /layouts/staticpages

Из-за SEO и различных причин я не хочу, чтобы пары контроллеров в URL-адресе для этих статических страниц отображались как _4 _... Это должны быть «описания реального мира» /section/page (например, advantages/someadvantage)

Вот проблема: использование Zend_Controller_Router_Route может выполнить работу, когда я настрою правильные маршруты, НО это испортит что-то ужасное с Zend Navigation ... Я предполагаю, потому что Zend_Navigaion не очень хорошо работает с переключением контроллера / действий на лету.

Пример кода:

$router = Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route('advantages/:page/*',
  array('controller' => 'static', 'action' => 'display', 'mode' => 'advantages',
    'page' => 'index'));
$router->addRoute('advantages', $route);

Это достаточно хорошо справляется с работой по переключению страниц в разделе «преимущества», но автоматическая запись контроллера / действий Zend_Navigation И выделение «активных» узлов в конечном итоге оказывается испорченным, потому что теперь он думает, что его контроллер «статичен» и действует это «дисплей».

Zend_Navigation принципиально несовместима с Zend_Controller_Router_Route? Есть ли лучший способ сделать этот единственный контроллер статической страницы или обработать статический контент по всем направлениям?


person Mark    schedule 10.02.2011    source источник
comment
Не могли бы вы отредактировать свой вопрос, включив в него пример того, как вы добавляете свои страницы в Zend_Navigation?   -  person Tim Fountain    schedule 10.02.2011


Ответы (1)


Поскольку вы используете один контроллер / действие для всех статических страниц, вы должны настроить Zend Navigation перед ее отображением.

См. Пример 4 в документации Zend.

// the following route is added to the ZF router
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // route name
    new Zend_Controller_Router_Route(
        'a/:id',
        array(
            'module'     => 'news',
            'controller' => 'article',
            'action'     => 'view',
            'id'         => null
        )
    )
);

// a page is created with a 'route' option
$page = new Zend_Navigation_Page_Mvc(array(
    'label'      => 'A news article',
    'route'      => 'article_view',
    'module'     => 'news',    // required for isActive(), see note above
    'controller' => 'article', // required for isActive(), see note above
    'action'     => 'view',    // required for isActive(), see note above
    'params'     => array('id' => 42)
));

// returns: /a/42
$page->getHref();
person Lenin Raj Rajasekaran    schedule 23.12.2011