在 CakePHP 中保留父 slug

Posted

技术标签:

【中文标题】在 CakePHP 中保留父 slug【英文标题】:Retaining parent slugs in CakePHP 【发布时间】:2011-11-29 16:04:36 【问题描述】:

我正在尽可能高效地在 Cakephp 中尝试对 SEO 友好的 URL,我已经设法使用当前格式,每个示例都使用函数 view($slug),除了第一个使用函数 index() 的示例。

/类别/

/类别/书籍/

/categories/books/it-and-computing/

但是,如果 IT 和计算有一个子类别“Web 开发”呢?我希望 URL 变为:

/categories/books/it-and-computing/web-development/

如果不创建太多路线,我不确定如何做到这一点。到目前为止,这是我的路线代码:

Router::connect('/categories/', array('controller' => 'categories', 'action' => 'index'));

Router::connect('/categories/:slug', 数组('控制器' => '类别','动作' => '视图'), 数组('pass' => 数组('slug')) );

Router::connect('/categories/:parent/:slug', 数组('控制器' => '类别','动作' => '视图'), 数组('通过' => 数组('父','slug')) );

任何帮助将不胜感激

亲切的问候

斯蒂芬

【问题讨论】:

【参考方案1】:
// in routes.php
Router::connect('/categories/:row:lastslash',array('controller' => 'settings', 'action' => 'show',),array(
      'pass'=>array('row'),
      'row'=>'.*?',
      'lastslash'=>'\/?'
));

//in controller
function show($row = "")
  if($row)
    $categories = split('/',$row);

    ?><pre><? print_r($categories);?></pre><?die();
  else
    die('do something else');
  

/categories/books/computing/web-development/cakephp/

结果:

Array
(
    [0] => books
    [1] => computing
    [2] => web-development
    [3] => cakephp
)

/类别/

结果:

do something else

/类别/书籍

结果:

Array
(
    [0] => books
)

【讨论】:

我也希望这个问题能得到更多的答案。适用于 n 级子类别的东西。 以上行不通,我想你误解了这个问题。网站需要保留 URL 中的完整历史记录,有点像面包屑。 /categories/books/computing/web-development/cakephp/等 这看起来正是我要找的东西,我现在不能尝试,但我稍后会尝试。非常感谢 sukinsan :) 我会“投票”你,但我对这个网站太陌生了。干杯

以上是关于在 CakePHP 中保留父 slug的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp 的 beforeSave() 不使用 $model::save() 保留新数据

在 CakePHP 中 301 重定向页面的最佳方法是啥?

如何在 cakephp 中获取 $_SESSION 值

想要在cakephp 3中获得子类别产品

cakephp重写配置

如何在管理员中删除对象并保留父级?