ThinkPHP3.2中分頁(yè)頁(yè)碼跳轉(zhuǎn)功能的實(shí)現(xiàn)和注意事項(xiàng)

隨著現(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è)樣式:

  1. 定義分頁(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>';         }     } }
  1. 使用自定義分頁(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)功能的步驟如下:

  1. 修改分頁(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>');
  1. 使用分頁(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è)需求。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享