我正在使用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格式?
谢谢!
答案 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)
我认为这就是你要找的东西