带有cakePHP的多个slug类型

时间:2013-05-17 20:41:29

标签: cakephp seo slug

我正在从我自己的基地开展CMS写作。 我用Node和NodeType逻辑实现了它的内容部分。 (每个节点都属于NodeType) 在Nodes和NodeTypes表中有Slug字段,我在路由器中写了这两条路线:

Router::connect('/:typeslug',array('controller' => 'nodetypes', 'action' => 'view'),array('pass'=>array('typeslug')));
Router::connect('/:typeslug/:nodeslug',array('controller' => 'nodes', 'action' => 'view'),array('pass'=>array('typeslug','nodeslug')));

它将实现如下内容:http://domain.ext/article/my-custom-article
第一个问题:这是正确的方法吗? 第二个问题:使用像wordpress这样的复杂段塞的解决方案是什么? (例如使用像存档日期这样的slu :: http://mydomain.ext/2013/01/01/article/ ....
更重要的是能够在管理部分中的段塞类型之间切换。

感谢指南

1 个答案:

答案 0 :(得分:1)

问题1

  

这是正确而正常的方法吗?

是的,没关系,看一下使用CakePHP应用程序(documentation)捆绑的PagesController

问题2

  

使用像wordpress这样的复杂段塞有什么解决方案? (例如使用像存档日期这样的slu :: http://mydomain.ext/2013/01/01/article/ ....

在这种特殊情况下,您必须在routes.php文件中设置其他路线。

例如:

Router::connect(
    '/article/:year/:month/:day/*', array('controller' => 'articles')
);

http://mydomain.ext/article/2013/01/01的任何请求都会被路由到文章控制器中的以下操作:

public function index($year, $month, $day){
    ...
}

注意我稍微颠倒了你的URL,因为它避免了对不存在的控制器的模糊请求。

问题3

  

......更重要的是能够在管理部分中的段塞类型之间切换。

在这种情况下,您可以执行的操作是根据其他配置值打开和关闭路由。您必须专门为您的应用程序设置配置文件,但您可以在运行时修改它:

Routing.php:

// load your routing configuration 
Configure::load('application_config', 'default');
// setup your routes
if(empty(Configure::read('routing_1')){
    // default routing
    ...
}else{
    // routing 1
    ...
}

AdministrationController.php:

public function someAction(){
    // persist configuration to file
    Configure::dump('application_config', 'default', array('routing_1' => true));
}

有关详细信息,请查看文档中的Reading and Writing Configuration Files部分。

我希望这能指出你正确的方向。