CPagination
鍖 | system.web |
---|---|
缁ф壙 | class CPagination » CComponent |
婧愯嚜 | 1.0 |
鐗堟湰 | $Id: CPagination.php 3515 2011-12-28 12:29:24Z mdomba $ |
婧愮爜 | framework/web/CPagination.php |
褰撴暟鎹渶瑕佹覆鏌撳埌澶氶〉鏃讹紝鎴戜滑鍙兘浣跨敤CPagination鍘诲憟鐜颁俊鎭紝 璇稿total item count锛 page size锛current page绛夈 杩欎簺淇℃伅琚紶閫掑埌pagers娓叉煋 鍒嗛〉鎸夐挳鎴栭摼鎺ャ
渚嬪锛
鎺у埗鍣ㄥ姩浣滐細
function actionIndex(){ $criteria = new CDbCriteria(); $count=Article::model()->count($criteria); $pages=new CPagination($count); // 杩斿洖鍓嶄竴椤 $pages->pageSize=10; $pages->applyLimit($criteria); $models = Post::model()->findAll($criteria); $this->render('index', array( 'models' => $models, 'pages' => $pages )); }
瑙嗗浘锛
<?php foreach($models as $model): ?> // 鏄剧ず涓涓ā鍨 <?php endforeach; ?> // 鏄剧ず鍒嗛〉 <?php $this->widget('CLinkPager', array( 'pages' => $pages, )) ?>
鍏叡灞炴
灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|---|
currentPage | integer | 褰撳墠椤电殑浠庨浂寮濮嬬殑绱㈠紩銆傞粯璁ゆ槸0銆 | CPagination |
itemCount | integer | 椤圭洰鎬绘暟銆傞粯璁ゆ槸0銆 | CPagination |
limit | integer | 鏁版嵁鐨勯檺鍒躲 杩欎釜鍙兘鐢ㄤ綔璁剧疆LIMIT鍊间负涓鏉QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆 杩欎釜杩斿洖鍜pageSize鍚屾牱鐨勫笺 | CPagination |
offset | integer | 鏁版嵁鐨勫亸绉婚噺銆 杩欎釜鍙兘鐢ㄤ簬璁剧疆OFFSET鍊间负涓涓猄QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆 | CPagination |
pageCount | integer | 椤电殑鏁扮洰 | CPagination |
pageSize | integer | 姣忎竴椤电殑椤圭洰鏁伴噺銆傞粯璁ゆ槸10銆 | CPagination |
pageVar | string | 瀛樺偍褰撳墠椤电储寮曠殑GET鍙橀噺鍚嶇О銆傞粯璁ゆ槸鈥榩age鈥欍 | CPagination |
params | array | 褰撶敓鎴愬垎椤礥RL鏃剁敤浜庢浛鎹ET鐨勫弬鏁帮紙name=>value锛夈 榛樿鏄痭ull锛屾剰鍛崇潃浣跨敤褰撳墠鍙橀噺GET鍙傛暟銆 | CPagination |
route | string | 鏄剧ず椤靛唴瀹圭殑璺敱锛坈ontroller ID鍜宎ction ID锛夈 榛樿涓虹┖瀛楃涓诧紝鎰忓懗鐫浣跨敤褰撳墠璺敱銆 | CPagination |
validateCurrentPage | boolean | 鏄惁纭繚currentPage杩斿洖涓涓湁鏁堢殑椤电爜銆 褰撹繖涓睘鎬т负true鏃讹紝鍊奸氳繃currentPage杩斿洖锛屽皢鎬绘槸鍦 0鍜(pageCount-1)涔嬮棿銆傚洜涓pageCount渚濊禆姝g‘鐨itemCount鍊硷紝 杩欐剰鍛崇潃浣犲繀椤荤煡閬撴暟鎹」鐩绘暟锛屽綋浣犳兂璁块棶currentPage鏃躲 杩欎釜鍩轰簬SQL鏌ヨ鏄甯哥殑锛屼絾鏄湪鍏跺畠绉嶇被鐨勬煡璇㈡槸涓嶅彲琛岀殑锛堜緥濡侻ongoDB锛夈 鍦ㄩ偅绉嶆儏鍐典笅锛屼綘鍙互璁剧疆杩欎釜灞炴т负false鍘昏烦杩囬獙璇侊紙鐒跺悗浣犲彲鑳介渶瑕佽嚜宸遍獙璇侊級銆 榛樿涓簍rue銆 | CPagination |
鍏叡鏂规硶
鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|
__call() | 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 | CComponent |
__construct() | 鏋勯犳柟娉曘 | CPagination |
__get() | 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 | CComponent |
__isset() | 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 | CComponent |
__set() | 璁剧疆涓涓粍浠剁殑灞炴у笺 | CComponent |
__unset() | 璁剧疆涓涓粍浠剁殑灞炴т负null銆 | CComponent |
applyLimit() | 涓烘寚瀹氱殑鏌ヨ鏉′欢搴旂敤LIMIT鍜孫FFSET銆 | CPagination |
asa() | 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° | CComponent |
attachBehavior() | 闄勫姞涓涓涓哄埌缁勪欢銆 | CComponent |
attachBehaviors() | 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 | CComponent |
attachEventHandler() | 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 | CComponent |
canGetProperty() | 纭畾灞炴ф槸鍚﹀彲璇汇 | CComponent |
canSetProperty() | 纭畾灞炴ф槸鍚﹀彲鍐欍 | CComponent |
createPageUrl() | 鍒涘缓閫傚悎鐢ㄤ簬鍒嗛〉鐨刄RL銆 | CPagination |
detachBehavior() | 浠庣粍浠朵腑鍒嗙涓涓涓恒 | CComponent |
detachBehaviors() | 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 | CComponent |
detachEventHandler() | 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 | CComponent |
disableBehavior() | 绂佺敤涓涓檮鍔犺涓恒 | CComponent |
disableBehaviors() | 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
enableBehavior() | 鍚敤涓涓檮鍔犺涓恒 | CComponent |
enableBehaviors() | 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
evaluateExpression() | 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 | CComponent |
getCurrentPage() | 杩斿洖褰撳墠椤电殑浠庨浂寮濮嬬殑绱㈠紩銆傞粯璁ゆ槸0銆 | CPagination |
getEventHandlers() | 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 | CComponent |
getItemCount() | 杩斿洖椤圭洰鎬绘暟銆傞粯璁ゆ槸0銆 | CPagination |
getLimit() | 杩斿洖鏁版嵁鐨勯檺鍒躲 杩欎釜鍙兘鐢ㄤ綔璁剧疆LIMIT鍊间负涓鏉QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆 杩欎釜杩斿洖鍜pageSize鍚屾牱鐨勫笺 | CPagination |
getOffset() | 杩斿洖鏁版嵁鐨勫亸绉婚噺銆 杩欎釜鍙兘鐢ㄤ簬璁剧疆OFFSET鍊间负涓涓猄QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆 | CPagination |
getPageCount() | 杩斿洖椤电殑鏁扮洰 | CPagination |
getPageSize() | 杩斿洖姣忎竴椤电殑椤圭洰鏁伴噺銆傞粯璁ゆ槸10銆 | CPagination |
hasEvent() | 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 | CComponent |
hasEventHandler() | 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 | CComponent |
hasProperty() | 纭畾灞炴ф槸鍚﹁瀹氫箟銆 | CComponent |
raiseEvent() | 鍙戣捣涓涓簨浠躲 | CComponent |
setCurrentPage() | 璁剧疆褰撳墠椤电殑浠庨浂寮濮嬬殑绱㈠紩銆 | CPagination |
setItemCount() | 璁剧疆椤圭洰鎬绘暟銆 | CPagination |
setPageSize() | 璁剧疆姣忎竴椤电殑椤圭洰鏁伴噺 | CPagination |
灞炴ц缁
褰撳墠椤电殑浠庨浂寮濮嬬殑绱㈠紩銆傞粯璁ゆ槸0銆
椤圭洰鎬绘暟銆傞粯璁ゆ槸0銆
鏁版嵁鐨勯檺鍒躲 杩欎釜鍙兘鐢ㄤ綔璁剧疆LIMIT鍊间负涓鏉QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆 杩欎釜杩斿洖鍜pageSize鍚屾牱鐨勫笺
鏁版嵁鐨勫亸绉婚噺銆 杩欎釜鍙兘鐢ㄤ簬璁剧疆OFFSET鍊间负涓涓猄QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆
椤电殑鏁扮洰
姣忎竴椤电殑椤圭洰鏁伴噺銆傞粯璁ゆ槸10銆
瀛樺偍褰撳墠椤电储寮曠殑GET鍙橀噺鍚嶇О銆傞粯璁ゆ槸鈥榩age鈥欍
褰撶敓鎴愬垎椤礥RL鏃剁敤浜庢浛鎹ET鐨勫弬鏁帮紙name=>value锛夈 榛樿鏄痭ull锛屾剰鍛崇潃浣跨敤褰撳墠鍙橀噺GET鍙傛暟銆
鏄剧ず椤靛唴瀹圭殑璺敱锛坈ontroller ID鍜宎ction ID锛夈 榛樿涓虹┖瀛楃涓诧紝鎰忓懗鐫浣跨敤褰撳墠璺敱銆
鏄惁纭繚currentPage杩斿洖涓涓湁鏁堢殑椤电爜銆 褰撹繖涓睘鎬т负true鏃讹紝鍊奸氳繃currentPage杩斿洖锛屽皢鎬绘槸鍦 0鍜(pageCount-1)涔嬮棿銆傚洜涓pageCount渚濊禆姝g‘鐨itemCount鍊硷紝 杩欐剰鍛崇潃浣犲繀椤荤煡閬撴暟鎹」鐩绘暟锛屽綋浣犳兂璁块棶currentPage鏃躲 杩欎釜鍩轰簬SQL鏌ヨ鏄甯哥殑锛屼絾鏄湪鍏跺畠绉嶇被鐨勬煡璇㈡槸涓嶅彲琛岀殑锛堜緥濡侻ongoDB锛夈 鍦ㄩ偅绉嶆儏鍐典笅锛屼綘鍙互璁剧疆杩欎釜灞炴т负false鍘昏烦杩囬獙璇侊紙鐒跺悗浣犲彲鑳介渶瑕佽嚜宸遍獙璇侊級銆 榛樿涓簍rue銆
鏂规硶璇︾粏
public void __construct(integer $itemCount=0)
| ||
$itemCount | integer | 椤圭洰鎬绘暟銆 |
public function __construct($itemCount=0)
{
$this->setItemCount($itemCount);
}
鏋勯犳柟娉曘
public void applyLimit(CDbCriteria $criteria)
| ||
$criteria | CDbCriteria | 灏嗚鍜宭imit涓璧峰簲鐢ㄧ殑鏌ヨ鏉′欢 |
public function applyLimit($criteria)
{
$criteria->limit=$this->getLimit();
$criteria->offset=$this->getOffset();
}
涓烘寚瀹氱殑鏌ヨ鏉′欢搴旂敤LIMIT鍜孫FFSET銆
public string createPageUrl(CController $controller, integer $page)
| ||
$controller | CController | the controller that will create the actual URL |
$page | integer | the page that the URL should point to. This is a zero-based index. |
{return} | string | the created URL |
public function createPageUrl($controller,$page)
{
$params=$this->params===null ? $_GET : $this->params;
if($page>0) // page 0 is the default
$params[$this->pageVar]=$page+1;
else
unset($params[$this->pageVar]);
return $controller->createUrl($this->route,$params);
}
鍒涘缓閫傚悎鐢ㄤ簬鍒嗛〉鐨刄RL銆 杩欎釜鏂规硶涓昏鏄綋鍒涘缓URL鐢ㄤ簬澶勭悊鍒嗛〉鏃惰鍒嗛〉鍣ㄨ皟鐢ㄣ 榛樿鐨勫疄鐜版槸 璋冪敤鎺у埗鍣ㄧ殑甯︽湁鍒嗛〉淇℃伅鐨刢reateUrl鏂规硶銆 浣犲彲浠ヨ鐩栬繖涓柟娉曪紝 濡傛灉浣犵殑URL鏂规涓嶅悓浜庢帶鍒跺櫒鐨刢reateUrl鎵鏀寔鐨勬柟娉曘
public integer getCurrentPage(boolean $recalculate=true)
| ||
$recalculate | boolean | 鏄惁閲嶆柊褰撳墠椤靛熀浜庨〉澶у皬鍜岄」鐩暟閲忋 |
{return} | integer | 褰撳墠椤电殑浠庨浂寮濮嬬殑绱㈠紩銆傞粯璁ゆ槸0銆 |
public function getCurrentPage($recalculate=true)
{
if($this->_currentPage===null || $recalculate)
{
if(isset($_GET[$this->pageVar]))
{
$this->_currentPage=(int)$_GET[$this->pageVar]-1;
if($this->validateCurrentPage)
{
$pageCount=$this->getPageCount();
if($this->_currentPage>=$pageCount)
$this->_currentPage=$pageCount-1;
}
if($this->_currentPage<0)
$this->_currentPage=0;
}
else
$this->_currentPage=0;
}
return $this->_currentPage;
}
public integer getItemCount()
| ||
{return} | integer | 椤圭洰鎬绘暟銆傞粯璁ゆ槸0銆 |
public function getItemCount()
{
return $this->_itemCount;
}
public integer getLimit()
| ||
{return} | integer | 鏁版嵁鐨勯檺鍒躲 杩欎釜鍙兘鐢ㄤ綔璁剧疆LIMIT鍊间负涓鏉QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆 杩欎釜杩斿洖鍜pageSize鍚屾牱鐨勫笺 |
public function getLimit()
{
return $this->getPageSize();
}
public integer getOffset()
| ||
{return} | integer | 鏁版嵁鐨勫亸绉婚噺銆 杩欎釜鍙兘鐢ㄤ簬璁剧疆OFFSET鍊间负涓涓猄QL璇彞鍘昏幏鍙栧綋鍓嶉〉鏁版嵁銆 |
public function getOffset()
{
return $this->getCurrentPage()*$this->getPageSize();
}
public integer getPageCount()
| ||
{return} | integer | 椤电殑鏁扮洰 |
public function getPageCount()
{
return (int)(($this->_itemCount+$this->_pageSize-1)/$this->_pageSize);
}
public integer getPageSize()
| ||
{return} | integer | 姣忎竴椤电殑椤圭洰鏁伴噺銆傞粯璁ゆ槸10銆 |
public function getPageSize()
{
return $this->_pageSize;
}
public void setCurrentPage(integer $value)
| ||
$value | integer | 褰撳墠椤电殑浠庨浂寮濮嬬殑绱㈠紩銆 |
public function setCurrentPage($value)
{
$this->_currentPage=$value;
$_GET[$this->pageVar]=$value+1;
}
public void setItemCount(integer $value)
| ||
$value | integer | 椤圭洰鎬绘暟銆 |
public function setItemCount($value)
{
if(($this->_itemCount=$value)<0)
$this->_itemCount=0;
}
public void setPageSize(integer $value)
| ||
$value | integer | 姣忎竴椤电殑椤圭洰鏁伴噺 |
public function setPageSize($value)
{
if(($this->_pageSize=$value)<=0)
$this->_pageSize=self::DEFAULT_PAGE_SIZE;
}