[英]Best Practice mapping of pages and routes when building dynamic menu in zend framework
尽管我很清楚这个主题可能已经出现很多次,但我仍然认为我所看的观点是不同的。
我有一个ZF 1.10.8项目,实际上是ContentController
来管理我所谓的静态页面(无论如何也不是静态的),例如about us
, contact us
, products
和NewsController
以获得文章,教程和所有文章。
我发现拥有动态菜单将解决客户的许多抱怨,并为更改网站内容提供更大的自由度。
目前,我仅是一个主菜单栏,该菜单栏是系统中存在的每个布局中调用的一部分(在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.