使用CakePHP 2.3.1自定义分页路线

时间:2013-04-05 10:09:23

标签: php cakephp cakephp-2.0

我正在使用cakephp 2.3.1,我对Paginator组件有疑问。

我的目标是:

example.com/abruzzo
example.com/abruzzo/2
example.com/abruzzo/3

我创建了以下路线:

Router::connect('/:regione/:page', array('controller'=>'regions','action'=>'home'), array('page' =>'[0-9]+'));
Router::connect('/:regione', array('controller' => 'regions', 'action' => 'home'));  

(正如您可以看到第一个路线工作处理页面参数)

现在,为了正确处理页面参数,我将以下行添加到RegionsController' beforeFilter

public function beforeFilter()
{        
    $this->request->params['named']['page'] = (isset($this->request->params['page'])) ? $this->request->params['page'] : 1;
}

因为我读过Paginator组件会直接看广告['名称'] ['页面']而不是['页面']。

第一个问题:

这是对的吗?在beforeFilter()中我真的需要这个hack吗?


然后,我需要显示使用的数字:

<?php echo $this->Paginator->numbers(); ?>

这里的问题是在链接上创建的URL是错误的......他们指向:

example.com/regions/home/page:2
example.com/regions/home/page:3
etc...

需要这样的网址,我需要:

example.com/abruzzo
example.com/abruzzo/2
example.com/abruzzo/3

第二个问题:

如何强制我想要的网址而不是控制器/动作/页面:N格式?

谢谢!

2 个答案:

答案 0 :(得分:1)

这可能是duplicate

但是,回答你的第一个问题:这取决于。如果您确定自己的网址不会获得更多参数,那么您的路由可能更像

Router::connect('/:regione/*', array('controller'=>'regions','action'=>'home'));

并在“家庭”行动中

public function home($pageOption=null) {
    if (is_numeric($option)) {
        $this->passedArgs['page'] = $pageOption;
    }
    $items = $this->paginate('Home');
    ...
}

我认为beforeFilter选项更好,因为它可以重复使用,并且可以让你的params更好地组织。

现在,帮助其他类似问题(以及您的第二个问题)的文章重新开始到此

在home.ctp视图中(或任何你喜欢的)

$prev_link = str_replace('page:', '', $this->Paginator->prev('« Prev'));
$prev_link = preg_replace('/\/1"/', '"', $prev_link);
$next_link = str_replace('page:', '', $this->Paginatornext('Next »'));
echo $prev_link;
echo $next_link;

所以,而不是通常的

echo $this->Paginator->prev('< Prev');
echo $this->Paginator->numbers();
echo $this->Paginator->next('Next >');

您必须手动替换网址的“page:”部分,然后回复它。

当然,您可以随时修改PaginationHelper,但我不建议这样做,因为对于每次蛋糕更新,您都必须检查PaginationHelper是否已更改,然后重新调整它。

阅读另一个问题上发布的文章,以防你不清楚希望它有所帮助。

答案 1 :(得分:0)

我认为这就是你要找的东西

https://github.com/hashmode/Cakephp-Beauty-Paginator