在同一控制器的几个地方,我的代码如下:
$publications = $this->paginate('Publication', $conditions);
...其中$ conditions是条件数组,要选择哪些字段以及如何(在mysql中使用LIKE)。
他们每个人都有不同的“排序依据”声明。
我如何实现这一点,并定义sql的不同“order by”部分?
UPDATE(2011-03-11):这是我定义分页的一部分:
$this->paginate = array(
'limit' => 1,
'fields' => array('`Publication`.*, PublicationNumeration.*, Collection.*, Publisher.*, Publication.title as PublicationTitle'),
'joins' => array( array('table' => 'publication_numerations', 'alias' => 'PublicationNumeration', 'type' => 'LEFT', 'conditions' => array( 'Publication.id = PublicationNumeration.publication_id' ) ) )
, 'order' => array('PublicationTitle desc')
);
$publications = $this->paginate('Publication', $conditions);
$this->set(compact('publications', 'urlArgs'));
部分带'限制'有效,但'顺序'不起作用,根本不会在调试模式下显示。
答案 0 :(得分:2)
每次在每个不同的操作中实现分页功能时,都可以覆盖分页功能。例如:
function list_recipes() {
$this->paginate = array(
'limit' => 10,
'order' => array(
'Recipe.title' => 'asc'
)
);
$data = $this->paginate('Recipe');
$this->set(compact('data'));
}
在您的情况下,您可能希望重用$conditions
数组,但为每个不同的实现更改'order'
的值。
进一步参考:Pagination doc
答案 1 :(得分:1)
我使用这个想法每页创建一个自定义的项目选择 我的默认分页:
var $paginate = array( 'order' => array('User.id' => 'asc') );
我将此添加到我的控制器中以将限制更改为25(也为5和10添加1只是为了查看它将如何进行并相应地更改限制值):
function list25() {
//fetches with different limit than default
$this->paginate = array(
'limit' => 25,
'order' => array(
'User.id' => 'asc'
)
);
$data = $this->paginate('User');
$this->set('users', $data);
}
然后,在我的主视图(index.ctp)中,我在数据列表的底部添加了这个:
<span style="float:right;">
<?php echo " <span style='vertical-align:top;font-size:12px;'>Show:</span>";
echo $html->link(' 5', array('controller'=>'users', 'action' => 'list5'));
echo $html->link(' 10', array('controller'=>'users', 'action' => 'list10'));
echo $html->link(' 25', array('controller'=>'users', 'action' => 'list25'));
?>
</span>
<span style="float:right;margin-right:10px;"><?php echo $paginator->numbers(); ?></span>
...在显示屏底部显示以下文字:显示:5 10 25
单击时,数字将链接到控制器操作,从而重置限制(并使用新的限制集刷新页面)。
也许有更好的方法来实现与为每个选项创建视图相同的功能:list5.ctp,list10.ctp和list25.ctp。无论如何,它为用户提供了选择他们想要在页面上看到多少数据的机会。评论
.... noob cakePHP用户......
答案 2 :(得分:1)
试试这个:
echo $ this-&gt; Paginator-&gt; link(&#39; 5&#39;,array(&#39; limit&#39; =&gt;&#39; 5&#39;))
echo $ this-&gt; Paginator-&gt; link(&#39; 10&#39;,array(&#39; limit&#39; =&gt;&#39; 10&#39;));
echo $ this-&gt; Paginator-&gt; link(&#39; 10&#39;,array(&#39; limit&#39; =&gt;&#39; 25&#39;));