首页 » 建站技术 » PHP 技术 » 浏览内容

分页类的源码分析


2005-12-07 11:15:32 6,429 0 发表评论 字体: 作者:C.K.

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

From:http://www.im286.com/viewthread.php?tid=1188679&extra=page%3D1

一个分页类的源码分析,添加了注释,帮助学习,添加的不好的地方欢迎指教

<?
  • /*
  • $pagebar=new pagebar(
  • array('URLGet'=>        //URLGET附属参数
  • 'PageVar'=>                //Page的GET变量
  • 'PageTemplate'=>        //翻页栏模板
  • 'PageMax'=>                //每页最大行数
  • 'NoPageHidden'=>        //无内容时是否分页栏
  • 'P_Length'=>                //当前页之前显示的页码数目
  • 'N_Length'=>                //当前页之后显示的页码数目
  • 'DisableButtonHidden'=>        //隐藏失效的翻页链接
  • ),$startno                //返回的当前页起始行
  • );
  • */
  • class pagebar {
  • var $pagedata;
  • //初始化Pagebar
  • function pagebar($data,&$startno) {
  •        //获取用户提交的Pagebar参数(数组),参数保存到$this->pagedata
  •        $this->pagedata=$data;
  •        //根据参数返回给用户当前记录的起始行,用来执行Select的SQL语句
  •        $startno=$_GET[$this->pagedata[PageVar]]*$this->pagedata[PageMax]+0;
  • }
  • //处理Pagebar
  • function process_pagebar($AllCount) {
  •        //从参数中获取需要的变量
  •        $PageNum=$this->pagedata[PageMax];
  •        $url=$this->pagedata[URLGet];if ($url!='') $url.='&';
  •        $url.="{$this->pagedata[PageVar]}=";
  •        $p=$_GET[$this->pagedata[PageVar]];
  •        $Content=$this->pagedata[Template];
  •        //没有记录返回空
  •        if ($AllCount==0 or $PageNum==0) {return '';}
  •        //返回总页数
  •        $count=$AllCount/$PageNum;
  •        //如果总页数就一行
  •        if ($count<=1) {
  •                //如果不存在翻页则隐藏([NoPageHidden])参数存在那么返回空
  •                if ($this->pagedata[NoPageHidden]) return "";
  •                else return "<span title='当前共有".$AllCount."条记录'>[$AllCount]</span>";
  •        }
  •        //设置分页栏<select>元素
  •        $psel="<select class=tplinp onchange="location.href='?{$url}'+this.value">";
  •        for ($i=0;$i<$count;$i++) {
  •                $psel.="<option value='$i' ";
  •                if ($p==$i) {$psel.="selected";}
  •                $psel.=">".($i+1)."</option>";
  •        }$psel.="</select>";
  •        //前页、下页,页号
  •        $pp=$p-1;$np=$p+1;
  •        //设置首页、前页、后页、尾页的链接头
  •        $ppstr1="<a href='?{$url}0'>";if ($pp<0) {$ppstr1='';}
  •        $ppstr="<a href='?{$url}$pp'>";if ($pp<0) {$ppstr='';}
  •        $npstr="<a href='?{$url}$np'>";if ($np>=$count) {$npstr='';}
  •        $npstr1="<a href='?{$url}".($i-1)."'>";if ($np>=$count) {$npstr1='';};
  •        //获取分页栏,当前页页码显示的前后数
  •        $j_s0=$this->pagedata[P_Length];$j_e0=$this->pagedata[N_Length];
  •        //获取分页栏模板中的 页码链接子模板(<page_num>)
  •        preg_match ("#<page_num>.+?</page_num>#s", $Content, $pndata);$pndata=$pndata[1];
  •        $e_pndata=explode("|",$pndata);
  •        //设置分页栏 页码链接 起始和终止页号
  •        $j_s=$p-$j_s0;$j_e=$p+$j_e0;
  •        if ($j_s<0) $j_s=0;
  •        if ($j_e>$i) $j_e=$i;
  •        //按照 页码链接子模版 内容设置 分页栏页码链接
  •        for ($j=$j_s;$j<$j_e;$j++) {
  •                if ($p==$j) {
  •                        $epn=$e_pndata[0];
  •                        $epn=str_replace ("#<num>#", ($j+1), $epn);
  •                }
  •                else {
  •                        $epn=$e_pndata[1];
  •                        $epn=str_replace ("<num>", ($j+1), $epn);
  •                        $epn=str_replace ("<numlink>", "<a href='?$url$j'>", $epn);
  •                        $epn=str_replace ("</numlink>", "</a>", $epn);
  •                }
  •                $pnstr.=$epn;
  •        }
  •        //把设置好的分页栏页码链接写回模板
  •        $Content=preg_replace ("#<page_num>(.+?)</page_num>#s", $pnstr, $Content);
  •        //无效链接如果设置了隐藏([DisableButtonHidden])那么进行隐藏
  •        if ($this->pagedata[DisableButtonHidden]) {
  •                if ($ppstr1=='') $Content=preg_replace ("#<page_first>.+?</page_first>#s", "", $Content);
  •                if ($ppstr=='') $Content=preg_replace ("#<page_prev>.+?</page_prev>#s", "", $Content);
  •                if ($npstr=='') $Content=preg_replace ("#<page_next>.+?</page_next>#s", "", $Content);
  •                if ($npstr1=='') $Content=preg_replace ("#<page_last>.+?</page_last>#s", "", $Content);
  •        }
  •        //替换模板中首页、前页、后页、尾页为页码链接
  •        $Content=preg_replace ("#<page_first>(.+?)</page_first>#s", "$ppstr11</a>", $Content);
  •        $Content=preg_replace ("#<page_prev>(.+?)</page_prev>#s", "$ppstr1</a>", $Content);
  •        $Content=preg_replace ("#<page_next>(.+?)</page_next>#s", "$npstr1</a>", $Content);
  •        $Content=preg_replace ("#<page_last>(.+?)</page_last>#s", "$npstr11</a>", $Content);
  •        //替换模板中<select>,总记录数,总页数
  •        $Content=str_replace ("<page_select>", $psel, $Content);
  •        $Content=str_replace ("<recordcount>", $AllCount, $Content);
  •        $Content=str_replace ("<pagecount>", $i, $Content);
  •        return $Content;
  • }
  • //编译Pagebar
  • function compile_pagebar($AllCount) {
  •        //使用PHPSoMVC的模板类打开分页栏模板
  •        $pagebar_tpl=new template($this->pagedata[PageTemplate]);
  •        //编译分页栏模板
  •        $this->pagedata[Template]=$pagebar_tpl->compile_template();
  •        //分页栏模板未编译的部分,用处理Pagebar的函数进行处理
  •        $page=$this->process_pagebar($AllCount);
  •        return $page;
  • }
  • }

    网站统计 Statistics

    • 创建时间: 2005年1月3日 距今5062 天
    • 日志总数: 2461
    • 评论总数: 630
    • 标签总数: 654
    • 链接总数: 273
    • 最后更新: 2018-8-31 17:57:04
    • 您是本站第 14144327 位访客

    广告区 Guǎng Gào