ThinkPHP資料分頁Page.class.php
擷取分頁類
ThinkPHP提供了資料分頁的擴充類庫Page,可以在http://www.thinkphp.cn/extend/241.html下載,或者下載官方的完整擴充包(http://www.thinkphp.cn/down/253.html)裡面也已經包含分頁擴充類了。把解壓後的Page.class.php放入ThinkPHP/Extend/Library/ORG/Util/(如果沒有請手動建立)目錄下面。
當然,擴充類庫的位置其實比較隨意,你也可以放入項目的類庫目錄下面,區別只是在於你匯入路徑的不同而已。
分頁查詢
分頁類需要和查詢相結合,我們可以使用ThinkPHP內建的limit方法或者page方法,目的就是為了擷取當前分頁的資料(也有先擷取完整資料然後前端分頁顯示的方法,不在本文描述內容中,也不建議)。使用limit方法或者page方法是和資料庫類型無關的。
我們首先在資料庫裡面建立一個think_data資料表用於測試:
CREATE TABLE IF NOT EXISTS `think_data` ( `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` varchar(255) NOT NULL, `create_time` int(11) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
複製代碼要使用分頁查詢,一般來說需要進行兩次查詢,即第一次查詢得到滿足條件的總資料量,然後第二次查詢當前分頁的資料,這樣做的作用是告訴分頁類當前的資料總數,以便計算產生的總頁數(如果你的顯示只是需要上下翻頁的話,其實總數查詢可以省略或者進行緩衝)。
一個標準的分頁使用樣本如下:
$Data = M('Data'); // 執行個體化Data資料對象 import('ORG.Util.Page');// 匯入分頁類 $count = $Data->where($map)->count();// 查詢滿足要求的總記錄數 $map表示查詢條件 $Page = new Page($count);// 執行個體化分頁類 傳入總記錄數 $show = $Page->show();// 分頁顯示輸出 // 進行分頁資料查詢 $list = $Data->where($map)->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select(); $this->assign('list',$list);// 賦值資料集 $this->assign('page',$show);// 賦值分頁輸出 $this->display(); // 輸出模板
複製代碼
如果沒有任何資料的話,分頁顯示為空白。所以在進行測試之前,請確保你的資料表裡面有一定的資料,否則可能看不到分頁的效果。如果使用page方法查詢的話,則可以改成
$Data = M('Data'); // 執行個體化Data資料對象 import('ORG.Util.Page');// 匯入分頁類 $count = $Data->where($map)->count();// 查詢滿足要求的總記錄數 $Page = new Page($count);// 執行個體化分頁類 傳入總記錄數 // 進行分頁資料查詢 注意page方法的參數的前面部分是當前的頁數使用 $_GET[p]擷取 $nowPage = isset($_GET['p'])?$_GET['p']:1; $list = $Data->where($map)->order('create_time')->page($nowPage.','.$Page->listRows)->select(); $show = $Page->show();// 分頁顯示輸出 $this->assign('page',$show);// 賦值分頁輸出 $this->assign('list',$list);// 賦值資料集 $this->display(); // 輸出模板
複製代碼
然後,我們在模板中添加分頁輸出變數即可
| [ {$vo.create_time|date='Y-m-d H:i:s',###} ] {$vo.title} |
{$page}
複製代碼可以看到分頁輸出只需要採用{$page}變數在模板中輸出即可。
分頁設定
設定分頁變數
預設情況下,分頁傳值的變數是p,產生的分頁跳轉地址可能類似於:
- http://serverName/index.php/Data/index/p/1
- http://serverName/index.php/Data/index/p/2複製代碼我們可以配置VAR_PAGE配置參數來改變:
- 'VAR_PAGE'=>'page'複製代碼則分頁地址變成:
- http://serverName/index.php/Data/index/page/1
- http://serverName/index.php/Data/index/page/1複製代碼
設定每頁記錄數
預設的情況下,分頁顯示每頁會顯示20條資料,如果你希望改變每頁顯示的資料量的話,執行個體化分頁類的時候可以傳人第二個參數即可:
- $Page = new Page($count,5);// 執行個體化分頁類 傳入總記錄數並且每頁顯示5條記錄複製代碼由於查詢方法中我們使用了$Page->listRows屬性,所以無需更改,但如果你是直接在查詢方法中使用數字請記得一起更改。
下面是官方的分頁樣本的顯示效果:
傳入分頁條件
預設情況下,分頁類會自動擷取當前頁面的POST(優先)或者GET變數作為分頁跳轉的傳值,如果需要指定傳入當前分頁跳轉的參數,就可以通過設定parameter屬性,parameter屬性支援2種方式傳值:字串和數組。字串採用var1=val1&var2=val2...的格式,例如:
- foreach($map as $key=>$val) {
- $Page->parameter .= "$key=".urlencode($val).'&';
- }複製代碼或者直接傳入數組:
- $Page->parameter = array_map('urlencode',$map);複製代碼由於內部調用了U函數,分頁類最終產生的分頁跳轉連結會根據當前的URL設定自動產生和當前URL模式一致的地址,所以無需擔心分頁連結的參數影響URL地址。
分頁路由支援
如果你的分頁跳轉連結地址採用了路由,那麼可以通過設定url參數,例如,假設我們的分頁URL地址格式是:
- http://serverName/data/index/1
- http://serverName/data/index/2
- http://serverName/data/index/3複製代碼這樣的URL路由地址,那麼我們就可以設定
- $Page->url = 'data/index';複製代碼設定後,分頁類的連結地址會自動產生上面的URL格式地址。
注意,url參數和parameter 同時使用的話,後者無效。設定顯示的頁數
可以在執行個體化分頁類之後,進行相關屬性的設定。預設情況下,頁面顯示的頁數是5,我們可以修改:
- $Page->rollPage = 3;複製代碼這樣,頁面上只能同時看到3個分頁
分頁顯示定製
上面講的是分頁的參數設定,下面講下如何對分頁顯示效果(包括樣式)進行設定。預設的分頁效果可能不能滿足所有的要求,分頁類提供了一個setConfig方法來修改預設的一些設定。例如:
- $page->setConfig('header','個會員');複製代碼setConfig方法支援的屬性包括:
| header |
頭部描述資訊,預設值 “條記錄” |
| prev |
上一頁描述資訊,預設值是“上一頁” |
| next |
下一頁描述資訊,預設值是“下一頁” |
| first |
第一頁描述資訊,預設值是“第一頁” |
| last |
最後一頁描述資訊,預設值是“最後一頁” |
| theme |
分頁面主題描述資訊,包括了上面所有元素的組合 ,設定該屬性可以改變分頁的各個單元的顯示位置,預設值是 "%totalRow% %header% %nowPage%/%totalPage% 頁 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%" |
通過setConfig設定以上屬性可以完美的定製出你的分頁顯示風格。http://www.bkjia.com/PHPjc/847866.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/847866.htmlTechArticleThinkPHP資料分頁Page.class.php 擷取分頁類 ThinkPHP提供了資料分頁的擴充類庫Page,可以在http://www.thinkphp.cn/extend/241.html下載,或者下載官方的完...
-