CakePHP開發之controller設置之paginate

CakePHP中paginate是一個處理分頁數據的函數.
配合helper(有關信息請關注後續文章)裏的Paginator方法,可以很容易的做出分頁列表頁面.

[b]首先:[/b]覆蓋paginate變量,paginate變量的紹介請看前一篇([url=http://lesorb.iteye.com/blog/746229]CakePHP開發之控制器-Controller[/url]).
它包含了條件,排序,分組,限制,表間關係等等...
如:

$this->paginate  = array('conditions'=>array('`Blog`.`user_id`'=>$user_id,'`Blog`.`status`'=>1),
'order' =>array('`Blog`.`modified`' => 'DESC'),
'limit' => 10
);


它將顯示user_id爲$user_id,狀態爲1,的所有blog記錄,且每頁顯示10條.

[b]接下來,[/b]我們應該注意一些細節:如,您可能想讓Blog的某些關聯Model在此刻取消,那麼,Model如何解除關聯(unbind)呢?

我注意到,通常的在find方法裏很有用的unbind方法並不起作用,

$this->Blog->unbind(array('belongsTo'=>array('BlogClass')));


原因是在find裏在得到數據後,find會用model->resetAssociations();
把所有關聯(Association)還原.
而paginate函數使用了兩次find:一次是得到總數count,另一次纔是得到分頁顯示的相關數據.
因此,給unbind的第二個參數裏賦上'假'值.
如果unbind的第二個參數是true,cakephp會把需要解除關聯的數據庫保存到 model->__backAssociation裏,當運行model->resetAssociations();會從 model->__backAssociation把相關的關聯的數據還原.

解決:

$this->Blog->unbind(array('belongsTo'=>array('BlogClass')),false);



[b]最後,[/b]在對應的view文件內,採用默認加載的helper變量和方法可以容易的搭建起view框架.
如:


<?php
echo $paginator->first(__('first', true), array(), null);
echo $paginator->prev(__('previous', true), array(), null);
echo $paginator->numbers();
echo $paginator->next(__('next', true), array(), null);
echo $paginator->last(__('last', true), array(), null);?>
[b]注意:[/b]如果,你將條件寫入了函數調用的參數內,那麼,爲了與helper相對應,你必須在view聲明:如:

$paginator->options(array('url' =>$blogs['Blog']['user_id']));

[b]
此段code必須寫在view頁面的首部[/b].

如果忽略了,那麼很遺憾,您的分頁顯示將出現異常.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章