【问题标题】:SEO Friendly URL in CakePHP paginationCakePHP 分页中的 SEO 友好 URL
【发布时间】:2014-01-04 07:43:00
【问题描述】:

我正在使用 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 的回答对于路由器和控制器来说是完全正确的。但是,导航链接只能在首页正确显示。

在首页导航链接显示这样是正确的

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 »");

修改什么来解决这个问题

【问题讨论】:

    标签: cakephp pagination


    【解决方案1】:

    试试这个:

    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;
        // ...
    }
    

    【讨论】:

    • TQVM... 该代码非常适合路由器和控制器。但是,导航链接仅在第一页上正确显示。第二页和后续页面导航显示不正确。我编辑问题以描述问题。请看一看..
    • 尝试在视图中添加 $paginator->prev(): $paginator-&gt;options(array('url'=&gt; array('controller' =&gt; 'ubs','action' =&gt; 'index')));
    • 我尝试理解:您的链接未正确生成,但是当您在浏览器中输入地址(例如:website.com/ubs/page/3)时,分页是否有效?
    • 如果我在浏览器中输入 website.com/ubs/page/3 之类的链接,它可以正常工作。只是导航链接有问题。
    • OK 问题解决...在我添加后添加 $paginator->options(array('url'=> array('controller' => 'ubs','action' => 'index' )));在 $paginator->prev() 之前; TQVM
    【解决方案2】:

    在您的 Paginator Helper 中,您可以通过设置一些选项来选择您想要的正确友好 url

    • url 分页动作的 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

    【讨论】:

    • TQ 为您提供帮助。我设法从上面的 kicaj 响应中得到解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2011-08-25
    • 1970-01-01
    • 2011-04-08
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多