thinkPHPページングと組み合わせて自分のページングクラスに書く
26026 ワード
<?php // +---------------------------------------------------------------------- // | ThinkPHP // +---------------------------------------------------------------------- // | :1、 。 2、 , ( )。 // +---------------------------------------------------------------------- // | Author: zbseoag <[email protected]> // +---------------------------------------------------------------------- // $Id: page.class.php 2013-05-26 00:08:49 session_start(); // , , session class Page{ public $page; // public $nextPage; // public $prevPage; // public $pageMax; // public $startPage; // public $endPage; // public $style; // :$style = mid public $parameter;// public $varPage;// public $url = null; // url protected $config = array( 'header'=>' ','prev'=>' ','next'=>' ','first'=>' ','last'=>' ', 'theme' => '%records% %header% %page%/%pageMax% %firstPage%%prevPage%%linkPage%%nextPage%%lastPage%' ); /** +---------------------------------------------------------- * +---------------------------------------------------------- * @param $records * @param $pageSize * @param $pageVal * @param $parameter +---------------------------------------------------------- */ function __construct($records, $pageSize, $pageVal = 'p', $parameter = null){ $this->records = $records; $this->pageMax = ceil($records/$pageSize); $this->page= max(intval($_GET[$pageVal]), 1); // 1 $this->page = min($this->page, $this->pageMax); // $this->nextPage = $this->page + 1; $this->prevPage = $this->page - 1; $this->varPage = $pageVal; // $this->parameter = $parameter; // url } /** +---------------------------------------------------------- * +---------------------------------------------------------- * @param $name * @param $value +---------------------------------------------------------- */ function setConfig($name, $value){ if(isset($this->config[$name])){ $this->config[$name] = $value; } } /** +---------------------------------------------------------- * +---------------------------------------------------------- * @param $length +---------------------------------------------------------- * @param $hide 、 , : , +---------------------------------------------------------- */ function show($length, $hide = false){ if(0 == $this->records) return ''; empty($this->url)? $this->url = $_SERVER['REQUEST_URI'] : null; $url = $this->url.(strpos($this->url,'?')?'':'?').$this->parameter; $parse = parse_url($url); if(isset($parse['query'])){ parse_str($parse['query'],$params); unset($params[$this->varPage]); $url = $parse['path'].'?'.http_build_query($params); } if('mid' == $this->style){ // if($length % 2 != 0 ){ $midder = ceil($length / 2); $big_repair = $midder - 1 ;// , 1, 1 }else{ $big_repair = $midder = $length / 2; } $sml_repair = $midder- 1; // $this->startPage = ($this->page + $midder) > $this->pageMax ? $this->pageMax - $length : $this->page - $sml_repair; $this->endPage = ($this->page < $midder)? $length : $this->page + $big_repair; }else{ // $this->startPage = ($this->page >= $length)? $_SESSION['startPage'] : 1; $this->endPage = $this->startPage + $length - 1; $this->lastPage = isset($_SESSION['lastPage'])? $_SESSION['lastPage'] : 1; // $_SESSION['lastPage'] = $this->page; // if($this->lastPage < $this->page){ // if($this->page >= $this->endPage){ $this->startPage = $_SESSION['startPage'] = $this->page; $this->endPage = $this->startPage + $length -1; } }elseif($this->lastPage == $this->page){// if($this->page == $this->endPage){ $this->startPage = $_SESSION['startPage'] = $this->page; $this->endPage = $this->startPage + $length -1; }else{ $this->startPage = $_SESSION['startPage'] = $this->page - $length + 1; $this->endPage = $this->startPage + $length -1; } }else{// if($this->page == $this->startPage ){ $this->startPage = $_SESSION['startPage'] = $this->page - $length + 1; $this->endPage = $this->startPage + $length -1; } } //echo ' :'. $this->startPage.'<br/>'; //echo ' :'. $this->lastPage.'<br/>'; } // $this->startPage = min($this->pageMax - $length + 1, $this->startPage); // $this->startPage = max($this->startPage, 1);// ( , ) $this->endPage = $this->startPage + $length -1; $this->endPage = min($this->pageMax, $this->endPage); // $_SESSION['startPage'] = $this->startPage; // , //echo ' :'. $this->startPage.'<br/>'; //echo ' :'. $this->lastPage.'<br/>'; if($this->page <= 1){// $firstPage = '<span>'.$this->config['first'].'</span>'; $prevPage = '<span>'.$this->config['prev'].'</span>'; }else{ $firstPage = "<span><a href='$url&$this->varPage=1'>".$this->config['first'].'</a>'; $prevPage = "<span><a href='$url&$this->varPage=$this->prevPage'>".$this->config['prev'].'</a>'; } if($this->page >= $this->pageMax){ // $nextPage = '<span>'.$this->config['next'].'</span>'; $lastPage = '<span>'.$this->config['last'].'</span>'; }else{ $lastPage = "<a href='$url&$this->varPage=$this->pageMax'>".$this->config['last'].'</a>'; $nextPage = "<a href='$url&$this->varPage=$this->nextPage'>".$this->config['next'].'</a>'; } if($hide){ // ($this->nextPage >= $this->pageMax)? $nextPage = '' : null; ($this->prevPage < 1)? $prevPage = '' : null; } for($i = $this->startPage; $i <= $this->endPage; $i++){ if ($this->page == $i) $linkPage .= "<a class='current' href='$url&$this->varPage=$i'>$i</a>"; else $linkPage .= "<a href='$url&$this->varPage=$i'>$i</a>"; } $search = array('%records%','%header%','%page%','%pageMax%','%firstPage%','%prevPage%','%linkPage%','%nextPage%','%lastPage%'); $replace = array($this->records,$this->config['header'],$this->page,$this->pageMax,$firstPage,$prevPage,$linkPage,$nextPage,$lastPage); $pageStr = str_replace($search, $replace, $this->config['theme']); return $pageStr; } } $page = new Page(340, 10); $theme = '%records% %header% %page%/%pageMax% %firstPage%%prevPage%%linkPage%%nextPage%%lastPage%'; $page->setConfig('theme',$theme); // , : , %lastPage%, $page->setConfig('last',' '); // : 'header'=' ','prev'=' ','next'=' ','first'=' ','last'=' ' $page->url = 'http://localhost/test.php'; echo $page->show(10); ?> <style> a,span{ margin:2px 5px;} .current{ color:red;} </style>