当前位置:Gxlcms > PHP教程 > 哪位帮忙看下这个分页类怎么调用,我说的是在查询语句下

哪位帮忙看下这个分页类怎么调用,我说的是在查询语句下

时间:2021-07-01 10:21:17 帮助过:8人阅读

网上找到一个比较好看的分页类,尽管作者已经说明怎么调用了,但是对我来说还是不太明白,主要是在sql语句里面怎么调用,下面是分页类代码:
'100', 需要显示的数据的总条数; *  (必填)'pageSize'=>'2', 每页需要显示的代码数量; *  (必填)'currentPage'=>$_GET['p'], 当前页码,默认可以通过$_GET['p']获取,其中名字p可以定制 *  (必填)'baseUrl'=>'/welcome?id=3',你当前页面的链接地址,比如为http://www.xxx.com/test.php(或者/test.php),如果后面带有参数则可以为http://www.xxx.com/test?id=8 *  (选填,默认为3)'offset'=>'3', 当前页码的左右偏移量,比如当前页码为5,则在5的左右各显示几个数字链接,默认为3个,则效果为2,3,4,5,6,7,8 *  (选填,默认为p)'pageString'=>'p',通过$_GET['p']获取当前页码时候的名字,默认为p *  (选填,默认为here)'className'=>'here',当前页码链接按钮的样式,默认样式名为here,所以你可以这样写css样式.here{background:#FF4500;} ) *  * 2、可以使用的方法。 *  A、初始化类后,需要调用pagination([$style = '1'][,$output=TRUE])方法产生分页链接 *  关于参数的说明: *  @param $style (默认为 1,可不填写) :获取链接全部组件,即 首页+上一页+数字链接+下一页+尾页 *  @param $style == 2 :仅获取数字链接 *  @param $style == 3 :仅获取上一页+下一页 *  @param $style == 4 :仅获取上一页+数字链接+下一页,(不包含首尾页) *   *  @param $output (默认为TRUE),返回分页链接 *  @param $output 为FALSE时,直接
输出分页链接 * * B、getCurrentPage()获取当前页码,经过真伪判断后的,防止用户自行输入错误,比如http://www.xxx.com/test?p=-100;此时通过此方法获取当前页码为1 * * C、pageAmount()获取总的页码数量 * * @author 星空幻颖 * @link http://blog.sina.com.cn/yanyinghq * */class Page{ private $pageSize; //您的网站每一页显示的列表条数 private $totalRows; //通过数据库查询返回的总的记录条数 private $url; //基准URL private $pageAmount; //页码的总数 private $currentPage; //当前的页码 private $offset = 4; //页码偏移量 private $pageString = 'p'; //页码在URL中的名字 private $classHere = 'class="here"'; //当前页链接的class样式类名,默认为here //初始化当前页码,记录总条数,每页多少条记录 public function __construct($param) { $this->pageSize = $param['pageSize']; $this->totalRows = $param['totalRows']; $this->url = $param['baseUrl']; $this->offset = !empty($param['offset'])?$param['offset']:$this->offset; $this->pageString = !empty($param['pageString'])?$param['pageString']:$this->pageString; $this->classHere = !empty($param['className'])?$param['className']:$this->classHere; $this->currentPage = (int)$param['currentPage']; } /** * 创建分页链接 * * @param $style 默认为 1 :获取链接全部组件 * @param $style == 2 :仅获取数字链接 * @param $style == 3 :仅获取上一页,下一页 * @param $style == 4 :仅获取上一页、下一页、数字链接,不包含首尾页 * * @param $output 为TRUE时,返回分页链接 * @param $output 为FALSE时,直接输出分页链接 * */ public function pagination($style = '1',$output=TRUE) { $this->baseUrl(); $this->pageAmount(); $this->currentPage(); //获取全部组件 if($style == '1') { $page = $this->indexPage().$this->prevPage().$this->pageNumber().$this->nextPage().$this->endPage(); } else if($style == '2') { //获取纯数字链接 $page = $this->pageNumber(); } else if($style == '3') { //只获取上一页下一页 $page = $this->prevPage().$this->nextPage(); } else if($style =='4') { //上一页、下一页、数字链接 $page = $this->prevPage().$this->pageNumber().$this->nextPage(); } if($output) { return $page; } else { echo $page; } } /** * 获取当前页码 * * @return 当前页码,经过真伪判断的 */ public function getCurrentPage() { $this->pageAmount(); $this->currentPage(); return $this->currentPage; } /** * 计算出所有的页数 * * 可以类外面直接调用此方法返回页码总数 * * @return 页码的总数 */ public function pageAmount() { $this->pageAmount = ceil( $this->totalRows / $this->pageSize); if($this->pageAmount <= 0) { $this->pageAmount = '1'; } return $this->pageAmount; } /** * 判断基准链接是否携带参数 * * 基准链接为用户提交当前页码链接 * * 如果携带参数,则在链接之后加&p= * * 如果不携带参数,则直接加?p= */ private function baseUrl() { if(preg_match('/\?/', $this->url)) { $this->url = $this->url.'&'.$this->pageString.'='; } else { $this->url = $this->url.'?'.$this->pageString.'='; } } /** * 验证当前页码的真伪性 * * 如果当前页码小于1或者没有,则默认当前页码为1 * * 如果当前页码大于页码总数,则默认当前页码为页码总数 * */ private function currentPage() { if($this->currentPage < 1 || !$this->currentPage) { $this->currentPage = 1; } else if(($this->currentPage > $this->pageAmount)) { $this->currentPage = $this->pageAmount; } } /** * 首页链接 */ private function indexPage() { if($this->currentPage == 1) return; return 'url.'1">首页'; } /** * 尾页链接 */ private function endPage() { if($this->currentPage == $this->pageAmount) return; return 'url.$this->pageAmount.'">尾页'; } /** * 上一页 */ private function prevPage() { if($this->currentPage == 1) return; return 'url.( $this->currentPage - 1 ).'">上一页'; } /** * 下一页 */ private function nextPage() { if($this->currentPage == $this->pageAmount) return; return 'url.( $this->currentPage + 1 ).'">下一页'; } /** * 中间页码的链接 * */ private function pageNumber() { $left =""; $right = ""; //如果总记录的条数“大于”所有链接的数量时候 if($this->pageAmount > ($this->offset * 2 + 1)) { //当前页码距离首页的距离 $leftNum = $this->currentPage - 1; //当前页码距离尾页的距离 $rightNum = $this->pageAmount - $this->currentPage; //当当前页码距离首页距离不足偏移量offset时候,在右边补齐缺少的小方块 if( $leftNum < $this->offset) { //左边的链接 for($i = $leftNum; $i >= 1 ; $i--) { $left .= 'url.( $this->currentPage - $i ).'">'.( $this->currentPage - $i ).''; } //右边的链接 for($j = 1; $j <= ($this->offset * 2 - $leftNum); $j++) { $right .= 'url.( $this->currentPage + $j ).'">'.( $this->currentPage + $j ).''; } } else if($rightNum < $this->offset) { //左边的链接 for($i = ($this->offset * 2 - $rightNum); $i >= 1 ; $i--) { $left .= 'url.( $this->currentPage - $i ).'">'.( $this->currentPage - $i ).''; } //右边的链接 for($j = 1; $j <= $rightNum; $j++) { $right .= 'url.( $this->currentPage + $j ).'">'.( $this->currentPage + $j ).''; } } else { //当前链接左边的链接 for($i = $this->offset; $i >= 1 ; $i--) { $left .= 'url.( $this->currentPage - $i ).'">'.( $this->currentPage - $i ).''; } //当前链接右边的链接 for($j = 1; $j <= $this->offset; $j++) { $right .= 'url.( $this->currentPage + $j ).'">'.( $this->currentPage + $j ).''; } } return $left.'url.$this->currentPage.'" class="here">'.$this->currentPage.''.$right; } else { $allLink=''; //当页码总数小于需要显示的链接数量时候,则全部显示出来 for($j = 1; $j <= $this->pageAmount; $j++) { $allLink.='url.$j.'" '.($j == $this->currentPage?$this->classHere:'').'>'.$j.''; } return $allLink; } } }


回复讨论(解决方案)

这里是php调用页面,如下代码:

无标题文档  '100','pageSize'=>'2','currentPage'=>@$_GET['p'],'baseUrl'=>'/page_index.php?id=3');  $page1 = new Page($param);$page2 = new Page($param);$page3 = new Page($param);$page4 = new Page($param);$page5 = new Page($param);这中间应该是sql查询语句,但是分页函数怎么调用我却不知道怎么写了 echo '总记录数:100';echo '
';echo '每页记录2条
';echo '当前页码:'.$page1->getCurrentPage().'
';echo '共计'.$page1->pageAmount().'页
';echo '
  • '.$page1->pagination().'
  • ';echo '
  • '.$page2->pagination('1').'
  • '; //默认为1,所以和不填写效果一样echo '
  • '.$page3->pagination('2').'
  • ';echo '
  • '.$page4->pagination('3').'
  • ';echo '
  • '.$page5->pagination('4').'
  • ';?>

    这个类只负责分页条的产生
    唯一可能与数据库查询有关的是参数数组 $param['totalRows'] 项
    因为待分页的总行数是查询得到的,所以这个查询应在 $param 赋值之前完成

    这个类只负责分页条的产生
    唯一可能与数据库查询有关的是参数数组 $param['totalRows'] 项
    因为待分页的总行数是查询得到的,所以这个查询应在 $param 赋值之前完成


    那版主这应该怎么写?

    楼主也够懒的了,我这里有个给你,样式都写好了

    "个记录", "prev"=>"上一页", "next"=>"下一页", "first"=>"首 页", "last"=>"尾 页"); private $listNum=8;/*  $total  11. * $listRows 12. */ public function __construct($total, $listRows=10, $pa=""){     $this->total=$total; 		$this->listRows=$listRows; 		$this->uri=$this->getUri($pa); 		$this->page=!empty($_GET["page"]) ? $_GET["page"] : 1; 	  $this->pageNum=ceil($this->total/$this->listRows); 		$this->limit=$this->setLimit(); 		} private function setLimit(){ 		 return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}"; 		 } private function getUri($pa){    $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?").$pa;  	 $parse=parse_url($url); 	 if(isset($parse["query"])){ 	 parse_str($parse['query'],$params); 	  unset($params["page"]); 		$url=$parse['path'].'?'.http_build_query($params);    		} 	 return $url; 	 }  public function __get($args){       if($args=="limit") 			  return $this->limit; 				 else 				   return null; 					 } private function start(){  if($this->total==0)  return 0;   else  return ($this->page-1)*$this->listRows+1;  } private function end(){  return min($this->page*$this->listRows,$this->total); } private function first(){  if($this->page==1)    $html.=''; 	 else 	 $html.="
  • uri}&page=1'>{$this->config["first"]}
  • "; return $html; } private function prev(){ if($this->page==1) $html.=''; else $html.="
  • uri}&page=".($this->page-1)."'>{$this->config["prev"]}
  • "; return $html; } private function pageList(){ $linkPage=""; $inum=floor($this->listNum/2); for($i=$inum; $i>=1; $i--){ $page=$this->page-$i; if($page<1) continue; $linkPage.="
  • uri}&page={$page}'>{$page}
  • "; } $linkPage.="
  • {$this->page}
  • ";for($i=1; $i<=$inum; $i++){ $page=$this->page+$i; if($page<=$this->pageNum) $linkPage.="
  • uri}&page={$page}'>{$page}
  • ";else break; }return $linkPage;}private function next(){ if($this->page==$this->pageNum)$html.=''; else $html.="
  • uri}&page=".($this->page+1)."'>{$this->config["next"]}
  • "; return $html;}private function last(){ if($this->page==$this->pageNum)$html.='';else$html.="
  • uri}&page=".($this->pageNum)."'>{$this->config["last"]}
  • ";return $html;}/*private function goPage(){return ' ';}*/private function goPage(){return ' ';}function fpage($display=array(0,1,2,3,4,5,6,7,8)){$html[0]="共有{$this->total}{$this->config["header"]} ";$html[1]=" 每页显示".($this->end()-$this->start()+1)."条,本页{$this->start()}-{$this->end()}条 "; $html[2]=" {$this->page}/{$this->pageNum}页 ";$html[3]=$this->first();$html[4]=$this->prev();$html[5]=$this->pageList();$html[6]=$this->next();$html[7]=$this->last();$html[8]=$this->goPage();$fpage='';foreach($display as $index){ $fpage.=$html[$index];} return $fpage;} }?>

    具体调用方法:
    $num=15; //每页显示数
    $page=new page($total,$num);
    $result=$db->query("select * from ".$db->table('article').$where." order by addtime desc {$page->limit}");
    循环
    fpage(array(3,4,5,6,7,0,1,2,8));?> //php分页类调用,这些数字可以去类文件里面看
      fpage(array(3,4,5,6,7,8));?>
    这是我调用的
    CSS样式文件
    .fenye li{float:left; font-family:Arial, Helvetica, sans-serif; margin-left:6px; display:inline; line-height:30px;}
    .fenye a{display:block;height:30px; min-width:30px; text-align:center; font-size:14px; border:1px solid #d6d6d6; float:left; margin-left:3px; padding:3px 5px;line-height:30px;text-decoration:none;color:#666;}
    .fenye a:hover{background:#FF4500;border-color:#FF4500; color:#FFF;}
    .fenye a.here{background:#FF4500;border-color:#FF4500; color:#FFF;}
    .fenye .sel{background:#E5EDF2; color:#333; font-weight:bold; border:1px #C2D5E3 solid; padding:0 12px; border-radius:4px}
    下面上效果图:

    有哪位需要的朋友也可以拿去用

    人气教程排行