Cakephp高级路由和分页

时间:2014-03-21 09:17:12

标签: php routing pagination seo cakephp-2.0

对于SEO目的,我必须将所有表单数据放入URL。这是路由:

Router::connect('/liste-voitures/:marque/:modele/:categorie/:energie',
                array(
                    'controller' => 'vehicules',
                    'action' => 'index',
                ),
                array(
                    'pass' => array(
                                  'marque',
                                  'modele',
                                  'categorie',
                                  'energie'
                              )
                )
);

因此,在我的索引操作中,我已经使用值构建了一个数组,并将其传递给重定向函数以与路径匹配:

$urlbuilding = array(
    'action' => 'index',
    'marque' => 'volvo-3', 
    'modele' => 'C30-2',
    'categorie' => 'citadine',
    'energie' => 'diesel'
);
$this->redirect($urlbuilding);

当我到达URL时,这工作正常:

/liste-voitures/volvo-3/C30-2/citadine/diesel/

除了分页。页码指向URL:

/vehicules/index/volvo-3/C30-2/citadine/diesel/page:2/sort:Vehicule.recommande/direction:desc

它应该是

/liste-voitures/volvo-3/C30-2/citadine/diesel/page:2/sort:Vehicule.recommande/direction:desc

我尝试通过设置分页选项来更改网址:

$this->Paginator->options = array(
             'url' => array(
            'action' => 'index',
            'marque' => $this->request->params['marque'],
            'modele' => $this->request->params['modele'],
            'categorie' => $this->request->params['categorie'],
            'energie' => $this->request->params['energie']
                     )
);

但它没有更好的效果。

然后我尝试添加带通配符的路由:

Router::connect('/liste-voitures/:marque/:modele/:categorie/:energie/*',
                    array(
                        'controller' => 'vehicules',
                        'action' => 'index',
                    ),
                    array(
                        'pass' => array(
                                'marque',
                                'modele',
                                'categorie',
                                'energie',
                                'page',
                                'sort',
                                'direction'
                        )
                    )
);

但它没有用。我还没有尝试让页面,排序和方向值更漂亮,如

/liste-voitures/volvo-3/C30-2/citadine/diesel/2/Vehicule.recommande/desc

......但这将是我的下一步;)

有人会介意我说我做错了什么吗?自从我上次感受到这个项目的进展以来已经好几天了。如果有人能以正确的方式驾驶我,我将非常感激! :)

1 个答案:

答案 0 :(得分:0)

SEO网址和Cakephp分页网址是硬币的两个不同方面!

对于网址使用您自己的逻辑并将参数传递给分页设置,您可以在视图中创建seo友好网址,并且可以使用cakephp的paginator组件。

Router::connect('/liste-voitures/:marque/:modele/:categorie/:energie/:page/:sort/:direction',
                    array(
                        'controller' => 'vehicules',
                        'action' => 'index',
                    ),
                    array(
                        'pass' => array(
                                'marque',
                                'modele',
                                'categorie',
                                'energie',
                                'page',
                                'sort',
                                'direction'
                        )
                    )
);

这应该是你的路由并使用你自己的逻辑创建分页URL,不要使用paginate helper。