page.class.php在哪,ThinkPHP數據分頁Page.class.php

本文详细介绍了ThinkPHP框架中如何进行数据库分页查询,包括使用Page类库导入、实例化、设置参数以及模板输出。通过两次查询获取总记录数和当前页数据,展示了limit和page方法的用法,并提供了分页显示的自定义设置,如改变分页变量、每页记录数、链接地址格式等。同时,文章还提到了分页条件传递和分页显示的样式定制,帮助开发者更好地实现分页功能。
摘要由CSDN通过智能技术生成

獲取分頁類

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=newPage($count,5);// 實例化分頁類 傳入總記錄數並且每頁顯示5條記錄

復制代碼

由於查詢方法中我們使用了$Page->listRows屬性,所以無需更改,但如果你是直接在查詢方法中使用數字請記得一起更改。

下面是官方的分頁示例的顯示效果:

29ee2a5e48ac78b9663f4b833a7d4cb9.jpe

傳入分頁條件

默認情況下,分頁類會自動獲取當前頁面的POST(優先)或者GET變量作為分頁跳轉的傳值,如果需要指定傳入當前分頁跳轉的參數,就可以通過設置parameter屬性,parameter屬性支持2種方式傳值:字符串和數組。字符串采用var1=val1&var2=val2...的格式,例如:

foreach($mapas$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設置以上屬性可以完美的定制出你的分頁顯示風格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值