2

虽然我很清楚这个话题可能已经出现了很多次,但我仍然认为我看待它的角度是不同的。

我有一个 ZF 1.10.8 项目,主要ContentController用于管理我所谓的静态页面(无论如何都不是那么静态),例如,about us和文章、教程和所有文章。contact usproductsNewsController

我发现拥有一个动态菜单可以解决客户的很多抱怨,并提供更多更改网站内容的自由。

目前我只有一个主菜单栏,它是一个部分的(在 layouts/scripts/partials/_mainmenu.phtml 文件夹下),我在系统中存在的每个布局中调用它。

现在,如果我进入动态状态,并创建了一个新链接,假设category如何将类别页面映射到路由(路由在 /application/configs/routes.ini 中),因为 url 将是 in 中链接的menu table值数据库?

第一个想法是将所有内容更改resource为由 处理,在这种NewsController情况下甚至about us将是一篇文章。由于我作为静态页面引用的那些需要不同的视图,所以我不知道如何处理它们。

我对我的思维方式有点不舒服。

谁能指出我正确的方向吗?如果你会怎么做?joomla 伙计们是如何做到的?

谢谢阅读.....

4

2 回答 2

0

我的方法是使用一个插件来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()完成后新的正确路由可用于调度操作。

于 2011-03-12T11:51:42.110 回答
0

我正在使用命名路由在菜单中建立链接

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

由模块引导程序中定义的模块特定路由处理的确切模块/控制器/操作映射。

我不能给你更多关于这方面的信息,因为我目前的路线实施太棘手和脆弱。必须首先对其进行大量重构。

于 2011-03-12T08:11:01.257 回答