隨著現(xiàn)代互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,網(wǎng)站的訪問量越來越大,為了方便用戶訪問數(shù)據(jù),分頁功能成為了現(xiàn)代網(wǎng)站必不可少的功能之一。在ThinkPHP3.2框架中,分頁功能也十分靈活,可以自定義分頁樣式和頁碼跳轉(zhuǎn)功能。本文將介紹ThinkPHP3.2中分頁頁碼跳轉(zhuǎn)功能的實(shí)現(xiàn)方法和注意事項(xiàng)。
一、ThinkPHP3.2的分頁功能
在ThinkPHP3.2框架中,可以通過以下方法實(shí)現(xiàn)簡單的分頁功能:
//?查詢數(shù)據(jù) $list?=?M('User')->where($where)->order('id?desc')->limit($Page->firstRow.','.$Page->listRows)->select(); //?實(shí)例化分頁類 $Page?=?new?\Think\Page($count,$pageSize); //?輸出分頁html $this->assign('page',$Page->show());
其中,$list為查詢到的數(shù)據(jù),$where為查詢條件,$count為查詢數(shù)據(jù)總數(shù),$pageSize為每一頁顯示的數(shù)據(jù)量。實(shí)例化\Think\Page類后,即可通過$Page->show()方法輸出分頁html。
二、自定義分頁樣式
在ThinkPHP3.2框架中,可以通過以下方法自定義分頁樣式:
- 定義分頁樣式
在當(dāng)前項(xiàng)目中創(chuàng)建一個(gè)名為Page.class.php的文件,將以下代碼復(fù)制到該文件中:
<?php namespace Think; class Page { // 定義分頁樣式 private $rollPage = 5; // 分頁欄每頁顯示的頁數(shù) private $lastSuffix = true; // 是否顯示最后一頁的頁碼后綴 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;?//?每頁顯示行數(shù) ????private?$totalPages?=?0;?//?總頁數(shù) ????private?$nowPage????=?1;?//?當(dāng)前頁數(shù) ????private?$firstRow???=?1;?//?起始行數(shù) ????private?$varPage????=?'page';?//?分頁變量名 ????private?$p??????????=?'p';?//?分頁參數(shù)名 ????private?$url????????=?'';?//?當(dāng)前鏈接URL ????private?$baseUrl????=?'';?//?分頁基礎(chǔ)URL ????private?$params?????=?array();?//?分頁跳轉(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);?//總頁數(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); ????} ????//?顯示分頁 ????public?function?show($url='')?{ ????????if?(0?==?$this->totalRows)?{ ????????????return?''; ????????} ????????//?記錄當(dāng)前URL ????????$this->url?=?empty($url)???U(ACTION_NAME).'/'?:?$url; ????????//?獲取當(dāng)前頁碼 ????????$this->nowPage????=?!empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1; ????????//?計(jì)算分頁信息 ????????$this->totalPages?=?ceil($this->totalRows/$this->listRows); ????????//?分頁處理 ????????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,'上一頁','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.'頁',''); ????????????????????}else{ ????????????????????????break; ????????????????????} ????????????????}else{ ????????????????????if($page?>?0?&&?$this->rollPage?< $this->totalPages){ ????????????????????????$this->addUrl($linkPage,$page,'第'.$page.'頁',''); ????????????????????} ????????????????} ????????????} ????????????if($this->nowPage?< $this->totalPages){ ????????????????$this->addUrl($linkPage,$this->nowPage+1,'下一頁','class="next"'); ????????????} ????????????if($this->lastSuffix){ ????????????????$this->addUrl($linkPage,$this->totalPages,'最后一頁'); ????????????} ????????????$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.'頁',''); ????????????????} ????????????} ????????????$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; ????} ????//?添加分頁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>'; ????????} ????} }
- 使用自定義分頁樣式
在控制器中引入自定義分頁樣式,并以以下方式使用:
//?引入分頁類 import("Think.Page"); //?查詢數(shù)據(jù)總數(shù) $count?=?M('User')->where($where)->count(); //?實(shí)例化分頁類 $Page?=?new?\Think\Page($count,$pageSize); //?自定義分頁樣式 $Page->setConfig('prev',?'上一頁'); $Page->setConfig('next',?'下一頁'); $Page->setConfig('first',?'第一頁'); $Page->setConfig('last',?'最后一頁'); $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(); //?輸出分頁html $this->assign('page',$Page->show());
三、分頁頁碼跳轉(zhuǎn)功能
在ThinkPHP3.2框架中,分頁頁碼跳轉(zhuǎn)功能通過在分頁樣式中添加輸入框和按鈕實(shí)現(xiàn)。添加頁碼跳轉(zhuǎn)功能的步驟如下:
- 修改分頁樣式
在自定義分頁樣式中添加一個(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>');
- 使用分頁頁碼跳轉(zhuǎn)功能
在視圖文件中,可以直接使用自定義的分頁樣式,并實(shí)現(xiàn)頁碼跳轉(zhuǎn)功能:
<div class="pagination"> ????<?php echo $page;?> </div>
其中,在自定義分頁樣式中,使用 "__PAGE__" 和 "__HREF__" 分別表示當(dāng)前頁碼和跳轉(zhuǎn)鏈接。在輸入框中輸入跳轉(zhuǎn)頁碼,點(diǎn)擊按鈕即可進(jìn)行頁碼跳轉(zhuǎn)。
總結(jié)
在ThinkPHP3.2框架中,分頁頁碼跳轉(zhuǎn)功能可以通過在分頁樣式中添加輸入框和按鈕實(shí)現(xiàn)。使用自定義分頁樣式可以使分頁樣式更加美觀,同時(shí)也可以實(shí)現(xiàn)更多特定的分頁需求。
以上是ThinkPHP3.2中分頁頁碼跳轉(zhuǎn)功能的實(shí)現(xiàn)和注意事項(xiàng)的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

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

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

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

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

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

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)