免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
PEAR_Pager

PEAR_Pager

1. 前言

本文中,Hick 先介紹一下 PEAR 的 Pager 包。然后談?wù)劮猪摰乃悸罚俳Y(jié)合實際運用,最后對它的部分方法和屬性作一下介紹。

順便提一下, Smarty 也有分頁插件,比如 Smarty Pager ,不過 Hick 看了一下,初步感覺在把問題搞復(fù)雜化。

[聲明] 轉(zhuǎn)載請保留原文信息:

作者: hick<hick@163.com>出處: http://www.hickwu.com/doc/pearPager.htm

2. 安裝

如果已經(jīng)安裝好 PEAR 環(huán)境,常規(guī)的安裝 PEAR 包的方法就可以安裝最新版本:

php5>pear install Pager

之所以單獨說一下安裝,其實是想說 Pager 包可以單獨使用,直接到官方下載到壓縮包,解壓縮到某目錄, 并把目錄名修改為 Pager, 最后把其父目錄添加到 inlcude_path 中即可。

注意:由于 linux 等環(huán)境下區(qū)分大小寫,不要修改目錄以及文件名等。

3. 簡單實例

通常以靜態(tài)方法 factory 創(chuàng)建 Pager 類的實例。創(chuàng)建實例時,需要以數(shù)組的形式傳遞參數(shù),每個數(shù)組的元素是一個參數(shù)。默認情況下必須有一個參數(shù): itemData 或者 totalItems,參見下面的實例::

require_once("Pager/Pager.php");// 參數(shù)數(shù)組$params = array(// 分頁模式,有兩種顯示模式,Jumping 和 Sliding‘mode‘       => ‘Jumping‘,// 每頁記錄數(shù)‘perPage‘    => 3,// Jumping 模式下為可選頁數(shù),Sliding 模式下為當(dāng)前頁前后可選頁數(shù)‘delta‘      => 5,‘itemData‘   => array(‘record01‘,‘record02‘,‘record03‘,‘record04‘,‘record05‘,‘record06‘,‘record07‘,‘record08‘,‘record09‘,‘record10‘,‘record11‘,‘record12‘,‘record13‘,‘record14‘,‘record15‘,‘record15‘,‘record15‘,‘record16‘));// 創(chuàng)建 Pager 對象$pager = Pager::factory($params);// 獲得當(dāng)前頁(默認為第一頁)的各種相關(guān)頁鏈接: 前一頁;后一頁;所有頁等等$links = $pager->getLinks();echo $links[‘a(chǎn)ll‘];

其中 itemData 元素是要分頁的數(shù)據(jù),通常它也是一個多元數(shù)組。其他參數(shù)請參考 官方參考文檔

4. 應(yīng)用案例

通過上面的 簡單實例 的學(xué)習(xí),會有這么一個想法:使用 PEAR Pager 來對一個新聞列表分頁,可以把所有新聞的基本信息保存成一個二維數(shù)組作為 itemData ,其實還可以把新聞總數(shù)作為 totalItems 傳遞??紤]到當(dāng)前頁一般只需要顯示若干條新聞,而不是全部,所以能夠只查詢出當(dāng)前頁需要顯示的若干條當(dāng)然更高效率。

這里順便說一下兩種分頁的思路,一種是從數(shù)據(jù)庫查詢出所有記錄,然后選擇當(dāng)前需要顯示的若干記錄;另外一種就是先算出當(dāng)前頁需要顯示的記錄范圍,結(jié)合 mysql 的 limit 或者其他數(shù)據(jù)庫的類似語法,查詢出當(dāng)前需要顯示的若干記錄??瓷先ズ笳弑容^快,但是從數(shù)據(jù)庫查詢的角度來說,實現(xiàn)后一種方法往往需要進行兩次查詢數(shù)據(jù)庫,第一次查詢總的記錄數(shù),第二次查詢需要的若干條記錄。第一種查詢方法在處理記錄數(shù)多時,會比較耗資源。一般來說,考慮到數(shù)據(jù)量的增加,用第二種方法會比較好。對查詢兩次數(shù)據(jù)庫的劣勢,可以通過在 URL 傳遞記錄總數(shù)進行一定程度上的彌補(數(shù)據(jù)庫記錄變動快時不太好)。

下面介紹一下應(yīng)用 PEAR Pager 于使用了 Smarty (其實跟 Smarty 也沒什么關(guān)系,嘿嘿)的系統(tǒng)中的方法:

  1. 在獲得新聞記錄時,使用類封裝,通過方法 getList 的參數(shù)中 $limit 參數(shù)取得當(dāng)前頁需要的新聞記錄的范圍。
  2. 如果當(dāng)前 URL 中沒有傳遞總記錄數(shù)這個參數(shù),則從數(shù)據(jù)庫查詢出總記錄數(shù)。由于獲得總記錄數(shù)的查詢條件(SQL 語句的 where 部分)跟 get_list 方法的查詢條件是一樣的,因此 Hick 的做法是在這個方法增加一個功能(參數(shù)),最后一個參數(shù)為引用傳遞,傳遞符合當(dāng)前新聞列表條件的新聞總數(shù)。
  3. 根據(jù)新聞總數(shù)以及 URL 傳遞過來的當(dāng)前頁等確定分頁器的相關(guān)參數(shù)。

下面的使用比較原始,還可以進一步對 Pager 進行封裝::

// 獲得總的新聞數(shù)$totalItems = $_GET[‘totalItems‘];// 每頁顯示的新聞數(shù)$pageSize = 10;// 當(dāng)前頁編號$pageID = empty($_GET[‘pageID‘]) ? 1 : $_GET[‘pageID‘];// limit 子句$limit = ($pageID - 1) * $pageSize . ", $pageSize";// 獲得新聞列表$newsList = $news->get_list(‘latest‘, $limit, $totalItems);// 再對$_GET[‘totalItems‘]賦值,也是Pager自定義URL GET參數(shù)的方法$_GET[‘totalItems‘] = $totalItems;// 創(chuàng)建 Pager 對象$params = array(‘mode‘ => ‘Sliding‘,‘perPage‘ => $pageSize,‘delta‘ => 2,‘totalItems‘ => $totalItems,);$pager = Pager::factory($params);// 獲得當(dāng)前頁(默認為第一頁)的各種相關(guān)頁鏈接$links = $pager->getLinks();// 模板賦值$tpl->assign("pager", $links);

注意:以上代碼修改自 Hick 在項目中實際應(yīng)用的代碼,跟 Hick 在實際運用中有些不同。

5. 參數(shù)摘要

這里說的參數(shù)主要是 Pager::factory 的參數(shù),該函數(shù)的參數(shù)至少是 itemData 和 totalItem 中的一個。append 參數(shù)( 默認為 true)為 false 時,還需要指定 fileName 參數(shù)。

itemData
用來分頁的數(shù)據(jù)記錄數(shù)組
totalItems
用來分頁的記錄總數(shù)
perPage
每頁顯示的記錄數(shù)
delta
分頁器當(dāng)前頁的前后顯示的分頁鏈接數(shù)
mode
Jumping 和 Sliding 兩中分頁樣式
httpMethod
允許 GET 和 POST 方式傳遞分頁相關(guān)信息
currentPage
默認載入的頁
linkClass
分頁鏈接的 css 樣式
separator
分頁器之間的分隔符
spacesBeforeSeparator 和 spacesAfterSeparator
分隔符號前后的空格數(shù)
curPageLinkClassName
當(dāng)前頁的 css 樣式名
useSessions
如果設(shè)置為 true ,則在 session 中保存每頁顯示的記錄數(shù)

6. 方法摘要

Pager::factory()
創(chuàng)建一個分頁器實例
Pager::getCurrentPageID()
當(dāng)前頁編號
Pager::getLinks
獲得當(dāng)前頁(默認為第一頁)的各種相關(guān)頁鏈接: 前一頁;后一頁;所有頁等等的數(shù)組
Pager::getNextPageID
下一頁編號
Pager::getOffsetByPageId()
Returns offsets for given pageID.
Pager::getPageData()
以數(shù)組形式返回當(dāng)前頁的記錄
Pager::getPageIdByOffset()
Returns the page number for the given offset
Pager::getPageRangeByPageId()
Returns offsets for given pageID.
Pager::getPreviousPageID()
返回前一頁編號
Pager::getperpageselectbox()
Returns a string with a XHTML SELECT menu, to choose how many items per page should be displayed.
Pager::isFirstPage()
當(dāng)前頁是否第一頁
Pager::isLastPage()
當(dāng)前頁是否最后一頁
Pager::isLastPageComplete()
最后一頁是否完整(complete)
Pager::numItems()
總共的記錄數(shù)
Pager::numPages()
返回總共的頁數(shù)
Pager::Pager()
同 factory

7. 后記

我喜歡總結(jié)自己的學(xué)習(xí)并整理成文檔. 開始也只是想把自己學(xué)習(xí) PEAR Pager 的經(jīng)驗總結(jié)一下, 留作以后備用. 弄完了, 感覺應(yīng)該分享出來. 既然要弄出來給別人看, 讀者就不一樣了, 需要考慮的就多了, 要分享出個東西來也不容易啊, 嘿嘿. 差不多是第一次比較正式的寫這樣的東西, 感覺有點點麻煩, 以后要少考慮一點.

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PEAR探奇之PEAR::Pager [一] - Haohappy的專欄--PHP5研究中...
什么是PEAR?什么是PECL?PHP中兩個容易混淆的概念解釋
php中如何分頁顯示查詢數(shù)據(jù)結(jié)果
最好的PHP分頁類
分頁標(biāo)簽:pager
GridView支持分頁的自動編號代碼
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服