Наилучшая практика сопоставления страниц и маршрутов при построении динамического меню в Zend Framework - PullRequest
2 голосов
/ 08 марта 2011

, хотя я хорошо осведомлён, что эта тема могла появиться много раз, я всё ещё думаю, что перспектива, с которой я смотрю на это, другая.

У меня есть проект ZF 1.10.8, по сути ContentController для управления тем, что я называю статическими страницами (в любом случае, не такими статичными), как about us, contact us, products и NewsController для статей, учебных пособий, все записи.

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

В настоящее время я являюсь только основной строкой меню, которая является частичной (в папке layouts / scripts / partials / _mainmenu.phtml), которую я вызываю в каждом макете, существующем в системе.

Теперь, если я пойду динамически, и будет создана новая ссылка, скажем category, как сопоставить страницу категории с маршрутом (маршруты находятся в /application/configs/routes.ini), поскольку URL-адрес будет значением ссылки в menu table в базе данных?

первая мысль состоит в том, чтобы изменить все на resource, обработанное NewsController на четное about us, и будет стать статьей в этом случае. Поскольку те, на которые я ссылаюсь как на статические страницы, требуют другого представления, я не знаю, как обращаться с ними.

Мне немного не по себе из-за моего мышления.

Может кто-нибудь указать мне правильное направление, пожалуйста? Как бы вы сделали, если? Как Joomla парни делают это?

спасибо за чтение .....

Ответы [ 2 ]

0 голосов
/ 12 марта 2011

Мой подход заключается в том, чтобы иметь плагин, который в routeStartup() проверяет наличие текущего URI в базе данных. Если URI найден, то с помощью этой функции добавляется правильный маршрут:

protected function _createRoute($route, $name, $action = "index", $controller = "index", $module = "default", $params)
{
    $router = Zend_Controller_Front::getInstance()->getRouter();

    $defaults = array('controller' => $controller,
                      'action' => $action,
                      "module" => $module);

    $route = new Zend_Controller_Router_Route($route, array_merge($defaults, $params));

            $router->addRoute("region", $route);    
}

У меня нет неограниченного количества контроллеров и модулей, поэтому параметры для этой функции жестко запрограммированы в плагине, но их можно легко сохранить в динамической строке в БД.

Добавлениеплагин делает это означает, что после завершения routeStartup() новый правильный маршрут доступен для операции отправки.

0 голосов
/ 12 марта 2011

Я использую именованные маршруты для построения ссылок в меню

new Zend_Navigation_Page_Mvc(array(
    'label'      => $category->getTitle(),
    'route'      => 'catalog-category',
    'params'     => array('id' => $category->getId()),
));

Точное отображение модуля / контроллера / действия, выполняемое маршрутами, определенными для конкретного модуля, определенными в загрузочном модуле модуля.

Я не могу дать вам больше об этом, поскольку моя текущая реализация маршрутов слишком сложна и хрупка.сначала я должен серьезно его переработать.

...