隨著現(xiàn)代互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,網(wǎng)站的訪問(wèn)量越來(lái)越大,為了方便用戶訪問(wèn)數(shù)據(jù),分頁(yè)功能成為了現(xiàn)代網(wǎng)站必不可少的功能之一。在thinkphp3.2框架中,分頁(yè)功能也十分靈活,可以自定義分頁(yè)樣式和頁(yè)碼跳轉(zhuǎn)功能。本文將介紹thinkphp3.2中分頁(yè)頁(yè)碼跳轉(zhuǎn)功能的實(shí)現(xiàn)方法和注意事項(xiàng)。
一、ThinkPHP3.2的分頁(yè)功能
在ThinkPHP3.2框架中,可以通過(guò)以下方法實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能:
// 查詢數(shù)據(jù) $list = M('User')->where($where)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select(); // 實(shí)例化分頁(yè)類(lèi) $Page = new ThinkPage($count,$pageSize); // 輸出分頁(yè)html $this->assign('page',$Page->show());
其中,$list為查詢到的數(shù)據(jù),$where為查詢條件,$count為查詢數(shù)據(jù)總數(shù),$pageSize為每一頁(yè)顯示的數(shù)據(jù)量。實(shí)例化ThinkPage類(lèi)后,即可通過(guò)$Page->show()方法輸出分頁(yè)html。
二、自定義分頁(yè)樣式
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
在ThinkPHP3.2框架中,可以通過(guò)以下方法自定義分頁(yè)樣式:
- 定義分頁(yè)樣式
在當(dāng)前項(xiàng)目中創(chuàng)建一個(gè)名為Page.class.php的文件,將以下代碼復(fù)制到該文件中:
<?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è)類(lèi) import("Think.Page"); // 查詢數(shù)據(jù)總數(shù) $count = M('User')->where($where)->count(); // 實(shí)例化分頁(yè)類(lèi) $Page = new ThinkPage($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è)樣式中添加輸入框和按鈕實(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í)現(xiàn)頁(yè)碼跳轉(zhuǎn)功能:
<div class="pagination"> <?php echo $page;?> </div>
其中,在自定義分頁(yè)樣式中,使用 “__PAGE__” 和 “__HREF__” 分別表示當(dāng)前頁(yè)碼和跳轉(zhuǎn)鏈接。在輸入框中輸入跳轉(zhuǎn)頁(yè)碼,點(diǎn)擊按鈕即可進(jìn)行頁(yè)碼跳轉(zhuǎn)。
總結(jié)
在ThinkPHP3.2框架中,分頁(yè)頁(yè)碼跳轉(zhuǎn)功能可以通過(guò)在分頁(yè)樣式中添加輸入框和按鈕實(shí)現(xiàn)。使用自定義分頁(yè)樣式可以使分頁(yè)樣式更加美觀,同時(shí)也可以實(shí)現(xiàn)更多特定的分頁(yè)需求。