繁体   English   中英

在zend框架中构建动态菜单时的页面和路线最佳实践映射

[英]Best Practice mapping of pages and routes when building dynamic menu in zend framework

尽管我很清楚这个主题可能已经出现很多次,但我仍然认为我所看的观点是不同的。

我有一个ZF 1.10.8项目,实际上是ContentController来管理我所谓的静态页面(无论如何也不是静态的),例如about uscontact usproductsNewsController以获得文章,教程和所有文章。

我发现拥有动态菜单将解决客户的许多抱怨,并为更改网站内容提供更大的自由度。

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

现在,如果我变得动态起来,并创建了一个新链接,我们说category ,那么如何将类别页面映射到路由(路由位于/application/configs/routes.ini中),因为url将是链接中的值数据库中的menu table

在这种情况下,首先想到的是将NewsController处理的所有resource都更改为about us的内容。由于我引用为静态页面的那些页面需要不同的视图,因此我不知道如何处理它们。

我对自己的思考方式感到不舒服。

谁能指出我正确的方向? 如果要怎么办? joomla家伙怎么做?

谢谢阅读.....

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

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

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

由于目前的路线实施过于棘手和脆弱,因此我无法提供更多信息。 必须首先对其进行大量重构。

我的方法是有一个插件,该插件在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()之后,新的正确路由可用于调度操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM