隨著現(xiàn)代網(wǎng)路技術(shù)的不斷發(fā)展,網(wǎng)站的訪問(wèn)量越來(lái)越大,為了方便用戶存取數(shù)據(jù),分頁(yè)功能成為了現(xiàn)代網(wǎng)站必不可少的功能之一。在ThinkPHP3.2框架中,分頁(yè)功能也十分靈活,可以自訂分頁(yè)樣式和頁(yè)碼跳轉(zhuǎn)功能。本文將介紹ThinkPHP3.2中分頁(yè)頁(yè)碼跳轉(zhuǎn)功能的實(shí)作方法與注意事項(xiàng)。
一、ThinkPHP3.2的分頁(yè)功能
在ThinkPHP3.2框架中,可以透過(guò)以下方法實(shí)作簡(jiǎn)單的分頁(yè)功能:
//?查詢數(shù)據(jù) $list?=?M('User')->where($where)->order('id?desc')->limit($Page->firstRow.','.$Page->listRows)->select(); //?實(shí)例化分頁(yè)類 $Page?=?new?\Think\Page($count,$pageSize); //?輸出分頁(yè)html $this->assign('page',$Page->show());
其中,$list為查詢到的數(shù)據(jù),$where為查詢條件,$count為查詢數(shù)據(jù)總數(shù),$pageSize為每一頁(yè)顯示的數(shù)據(jù)量。實(shí)例化\Think\Page類別後,即可透過(guò)$Page->show()方法輸出分頁(yè)html。
二、自訂分頁(yè)樣式
在ThinkPHP3.2框架中,可以透過(guò)以下方法自訂分頁(yè)樣式:
- #定義分頁(yè)樣式
#在目前專案中建立一個(gè)名為Page.class.php的文件,將下列程式碼複製到該檔案中:
<?php namespace Think; class Page { // 定義分頁(yè)樣式 private $rollPage = 5; // 分頁(yè)欄每頁(yè)顯示的頁(yè)數(shù) private $lastSuffix = true; // 是否顯示最后一頁(yè)的頁(yè)碼后綴 private $config = array( 'header' =>?'<span class="rows">共?%TOTAL_ROW%?條記錄</span>', ????????'prev'???=>?'<<', 'next' =>?'>>', ????????'first'??=>?'1...', ????????'last'???=>?'...%TOTAL_PAGE%', ????????'theme'??=>?'%FIRST%?%UP_PAGE%?%LINK_PAGE%?%DOWN_PAGE%?%END%', ????); ????private?$totalRows??=?0;?//?總行數(shù) ????private?$listRows???=?20;?//?每頁(yè)顯示行數(shù) ????private?$totalPages?=?0;?//?總頁(yè)數(shù) ????private?$nowPage????=?1;?//?當(dāng)前頁(yè)數(shù) ????private?$firstRow???=?1;?//?起始行數(shù) ????private?$varPage????=?'page';?//?分頁(yè)變量名 ????private?$p??????????=?'p';?//?分頁(yè)參數(shù)名 ????private?$url????????=?'';?//?當(dāng)前鏈接URL ????private?$baseUrl????=?'';?//?分頁(yè)基礎(chǔ)URL ????private?$params?????=?array();?//?分頁(yè)跳轉(zhuǎn)時(shí)要帶的參數(shù) ????private?$anchor?????=?'';?//?錨點(diǎn)參數(shù) ????//?構(gòu)造方法 ????public?function?__construct($totalRows,$listRows='',$p='page'){ ????????$this->totalRows?=?$totalRows; ????????$this->varPage?=?$p; ????????if?(!empty($listRows))?{ ????????????$this->listRows?=?$listRows; ????????} ????????$this->totalPages?=?ceil($this->totalRows/$this->listRows);?//總頁(yè)數(shù) ????????$this->nowPage????=?!empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1; ????????if(!empty($this->totalPages)?&&?$this->nowPage>$this->totalPages)?{ ????????????$this->nowPage?=?$this->totalPages; ????????} ????????$this->firstRow???=?$this->listRows*($this->nowPage-1); ????} ????//?顯示分頁(yè) ????public?function?show($url='')?{ ????????if?(0?==?$this->totalRows)?{ ????????????return?''; ????????} ????????//?記錄當(dāng)前URL ????????$this->url?=?empty($url)???U(ACTION_NAME).'/'?:?$url; ????????//?獲取當(dāng)前頁(yè)碼 ????????$this->nowPage????=?!empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1; ????????//?計(jì)算分頁(yè)信息 ????????$this->totalPages?=?ceil($this->totalRows/$this->listRows); ????????//?分頁(yè)處理 ????????if($this->totalPages?>?$this->rollPage){ ????????????$linkPage?=?"<ul class='pagination'>"; ????????????$inum?=?floor($this->rollPage/2); ????????????if($this->nowPage?<= $inum){ $this->lastSuffix=false; ????????????} ????????????if($this->nowPage?>?1){ ????????????????$this->addUrl($linkPage,$this->nowPage-1,'上一頁(yè)','class="prev"'); ????????????} ????????????for($i?=?1;?$i?<= $this->rollPage;?$i++){ ????????????????if(($this->nowPage+$inum)?>=?$this->totalPages?&&?$this->totalPages?>?$this->rollPage){ ????????????????????$page?=?$this->totalPages-$this->rollPage+$i; ????????????????}else{ ????????????????????$page?=?$this->nowPage-$inum+$i; ????????????????} ????????????????if($page?>?0?&&?$page?!=?$this->nowPage){ ????????????????????if($page?<= $this->totalPages){ ????????????????????????$this->addUrl($linkPage,$page,'第'.$page.'頁(yè)',''); ????????????????????}else{ ????????????????????????break; ????????????????????} ????????????????}else{ ????????????????????if($page?>?0?&&?$this->rollPage?< $this->totalPages){ ????????????????????????$this->addUrl($linkPage,$page,'第'.$page.'頁(yè)',''); ????????????????????} ????????????????} ????????????} ????????????if($this->nowPage?< $this->totalPages){ ????????????????$this->addUrl($linkPage,$this->nowPage+1,'下一頁(yè)','class="next"'); ????????????} ????????????if($this->lastSuffix){ ????????????????$this->addUrl($linkPage,$this->totalPages,'最后一頁(yè)'); ????????????} ????????????$linkPage.='</ul>'; ????????}else{ ????????????$linkPage?=?"<ul class='pagination'>"; ????????????for($i=1;$i<=$this->totalPages;$i++){ ????????????????if($this->nowPage==$i)?{ ????????????????????$linkPage.='<li class="active"><span>'.$i.'</span></li>'; ????????????????}?else?{ ????????????????????$this->addUrl($linkPage,$i,'第'.$i.'頁(yè)',''); ????????????????} ????????????} ????????????$linkPage.='</ul>'; ????????} ????????$pageStr??=?str_replace( ????????????array('%HEADER%','%NOW_PAGE%','%TOTAL_PAGE%','%TOTAL_ROW%','%FIRST%','%UP_PAGE%','%LINK_PAGE%','%DOWN_PAGE%','%END%'), ????????????array($this->config['header'],$this->nowPage,$this->totalPages,$this->totalRows,$this->config['first'],$this->config['prev'],$linkPage,$this->config['next'],$this->config['last']),$this->config['theme']); ????????return?$pageStr; ????} ????//?添加分頁(yè)URL ????protected?function?addUrl(&$linkPage,$page,$text,$class=''){ ????????if($page?>?0){ ????????????$url?=?$this->url; ????????????$url?.=?strpos($url,'?')???'&'?:?'?'; ????????????$url?.=?$this->p.'='.$page; ????????????if(!empty($this->params)){ ????????????????foreach($this->params?as?$key=>$val){ ????????????????????$url?.=?'&'.$key.'='.$val; ????????????????} ????????????} ????????????if(!empty($this->anchor)){ ????????????????$url?.=?'#'.$this->anchor; ????????????} ????????????$linkPage.='<li '.$class.'><a href="'.htmlentities($url).'">'.$text.'</a></li>'; ????????} ????} }
- 使用自訂分頁(yè)樣式
在控制器中引入自訂分頁(yè)樣式,並以以下方式使用:
//?引入分頁(yè)類 import("Think.Page"); //?查詢數(shù)據(jù)總數(shù) $count?=?M('User')->where($where)->count(); //?實(shí)例化分頁(yè)類 $Page?=?new?\Think\Page($count,$pageSize); //?自定義分頁(yè)樣式 $Page->setConfig('prev',?'上一頁(yè)'); $Page->setConfig('next',?'下一頁(yè)'); $Page->setConfig('first',?'第一頁(yè)'); $Page->setConfig('last',?'最后一頁(yè)'); $Page->setConfig('theme',?'%FIRST%?%UP_PAGE%?%LINK_PAGE%?%DOWN_PAGE%?%END%'); //?查詢數(shù)據(jù) $list?=?M('User')->where($where)->order('id?desc')->limit($Page->firstRow.','.$Page->listRows)->select(); //?輸出分頁(yè)html $this->assign('page',$Page->show());
三、分頁(yè)頁(yè)碼跳轉(zhuǎn)功能
在ThinkPHP3.2框架中,分頁(yè)頁(yè)碼跳轉(zhuǎn)功能透過(guò)在分頁(yè)樣式中新增輸入框和按鈕來(lái)實(shí)現(xiàn)。新增頁(yè)碼跳轉(zhuǎn)功能的步驟如下:
- 修改分頁(yè)樣式
#在自訂分頁(yè)樣式中新增一個(gè)輸入框和一個(gè)按鈕:
$Page->setConfig('theme',?'%FIRST%?%UP_PAGE%?%LINK_PAGE%?%DOWN_PAGE%?%END%?<div class="input-group input-group-sm" style="width: 150px;display:inline;"><input type="text" class="form-control" value="__PAGE__" onkeydown="javascript:if(event.keyCode==13){var page=(this.value|0);location.href=\'__HREF__\'.replace(\'__PAGE__\',page);return false;}"><span class="input-group-btn"><button class="btn btn-default" onclick="javascript:var page=(this.previousSibling.value|0);location.href=\'__HREF__\'.replace(\'__PAGE__\',page);return false;">GO!</button></span></div>');
- 使用分頁(yè)頁(yè)碼跳轉(zhuǎn)功能
在視圖檔案中,可以直接使用自訂的分頁(yè)樣式,並實(shí)作頁(yè)碼跳轉(zhuǎn)功能:
<div class="pagination"> ????<?php echo $page;?> </div>
其中,在自訂分頁(yè)樣式中,使用"__PAGE__" 和"__HREF__" 分別表示目前頁(yè)碼和跳躍連結(jié)。在輸入框中輸入跳轉(zhuǎn)頁(yè)碼,點(diǎn)選按鈕即可進(jìn)行頁(yè)碼跳轉(zhuǎn)。
總結(jié)
在ThinkPHP3.2框架中,分頁(yè)頁(yè)碼跳轉(zhuǎn)功能可以透過(guò)在分頁(yè)樣式中新增輸入框和按鈕來(lái)實(shí)現(xiàn)。使用自訂分頁(yè)樣式可以讓分頁(yè)樣式更加美觀,同時(shí)也能實(shí)現(xiàn)更多特定的分頁(yè)需求。
以上是ThinkPHP3.2中分頁(yè)頁(yè)碼跳轉(zhuǎn)功能的實(shí)作與注意事項(xiàng)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)