CakePHP分页中的SEO友好URL

时间:2014-01-04 07:43:00

标签: cakephp pagination

我正在使用CakePHP v2.42&想在页面分页中拥有SEO友好的URL。

我目前的分页就像

http://www.website.com/ubs/page/page:2

如何更改为

http://www.website.com/ubs/page/2

我的控制器

<?php
  class UbsController extends AppController {

  public $helpers = array('Html', 'Form');

  public function index() {

    $this->paginate = array(
    'limit' => 100,
    );

    $ubs = $this->paginate();

    $this->set('ubs', $ubs);
}}

我的路由器

Router::connect('/ubs', array('controller' => 'ubs', 'action' => 'index'));
Router::connect('/ubs/page/*', array('controller' => 'ubs', 'action' => 'index'));

编辑 - 添加更多问题

@kicaj的回答完全正确的路由器&amp;控制器。但是,导航链接仅在第一页上正确显示。

在第一页导航链接中显示如此正确

http://www.website.com/ubs/
http://www.website.com/ubs/page/2/
http://www.website.com/ubs/page/3/

但导航链接在第二/第三页页面中显示如下

http://www.website.com/ubs/index/2/
http://www.website.com/ubs/index/2/page:3/

我想需要编辑index.ctp文件,但不知道该怎么做。

我在index.ctp中的当前导航链接显示如下

$paginator = $this->Paginator;
$paginator->prev("« Prev");
$paginator->numbers(array('modulus' => 200, 'separator' => ' '));
$paginator->next("Next »");

要更正的内容以纠正此问题

2 个答案:

答案 0 :(得分:0)

试试这个:

Router::connect('/ubs/page/:page', array(
    'controller' => 'ubs',
    'action' => 'index'
), array(
    'pass' => array(
        'page'
    ),
    'page' => '[\d]+'
));

并在ubs控制器的索引操作中添加代码:

public function index($page = 1) {
    // ...
    $this->request->params['named']['page'] = $page;
    // ...
}

答案 1 :(得分:0)

在您的Paginator Helper中,您可以通过设置一些选项来选择合适的友好网址

  • url分页操作的网址。 'url'也有一些子选项:
    • sort记录按顺序排列的键。
    • direction排序的方向。默认为'ASC'。
    • page要显示的页码。

这里有一个例子。

$this->Paginator->options(array(
    'url' => array(
        'sort' => 'email', 'direction' => 'desc', 'page' => 6,
        'lang' => 'en'
    )
));

来源:Modifying the options PaginatorHelper uses