2

Разработчик Novice Zend Framework пытается найти простое решение проблемы с Zend Routing. Я уверен, что один из вас, профессионалы, может протянуть руку.Zend_Navigation несовместим с Zend_Router при написании контроллера/действий?

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

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

Из-за SEO и по различным причинам я не хочу, статические страницы будут видны как /static/page/page1 ... Это должно быть «реальный мир» описанием этого /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? Есть ли лучший способ сделать этот единственный статический контроллер страниц или обработать статический контент по всем направлениям?

+0

Не могли бы вы изменить свой вопрос, чтобы включить пример того, как вы добавляете свои страницы в Zend_Navigation? –

ответ

0

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

Проверить Example 4 in the Zend Documentation.

// 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();