12 12
发新话题
打印

分页类

分页类

这个类需要用到一些额外的文件,下面补上
复制内容到剪贴板
代码:
<?php
/*
* 分页类
*/
class lib_Page
{
  //数据库对象
  private $page_db;
  
  //sql语句
  public $page_sql;
  public $page_sqlmode;
  public $page_sqlaction;
//单位-unit 提示-tit
  public $page_unit;
  public $page_tit;
  
  //是否起用AJAX
  public $page_ajax;
//当页页码显示个数
  public $page_space;

  //模板控制  isout-是否输出模板  template-模板名称
  public $page_isout;
  public $page_template;
  //图片url
  public $page_imgurl;
//分页  url-连接路径  fix-页码前缀  urlParam-页码参数 target-框架
  public $page_url;
public $page_urlParam;
public $page_target;
public $page_fix;
  //摸板替换
  private $page_mode_out;
private $page_mode_begin;
private $page_mode_end;
  // sum-总页数 view-当前页码 rssum-记录总数  now-当前记录数  limit-限制记录数 number-每页显示的记录数  viewnow-初始化对象的时候跳转到第几页
  public $page_sum;
public $page_view;
  private $page_viewnow;
public $page_rssum;
  public $page_number;
public  $page_now;
private $page_limit;
  
  /*
  * 构造函数初始化属性
  * @param   int   当前分页要显示的页
  */
  public function __construct($db,$strpage=0)
  {
    $this->page_url='?';
$this->page_db=$db;
    $this->page_ajax=false;  
    $this->page_fix='page';
    $this->page_urlParam='=(page)';
    $this->page_target='';
    $this->page_sqlmode=0;
$this->page_sqlaction=0;
    $this->page_template='1';
    $this->page_number=20;
    $this->page_space=8;
    $this->page_unit='条';
    $this->page_tit='记录';
    $this->page_sql='';
    $this->page_isout=true;
    $this->page_viewnow=$strpage;
  }
  //加载预处理
  public function pageLoad($strsum=0)
  {
    $this->getViewNum();
    //分页记录总数
    if (!$strsum)
    {
      $rows=$this->page_db->getRow($this->pageStructureSql($this->page_sql,$this->page_sqlmode,$this->page_sqlaction));
      $this->page_rssum=$rows['num'];
    }
    else
    {
      $this->page_rssum=$strsum;
    }
    //分页总页数  [记录总数/每页显示记录数]
    if((int)($this->page_rssum%$this->page_number)==0)
    {
      $this->page_sum=(int)($this->page_rssum/$this->page_number);
      if($this->page_sum<1) $this->page_sum=1;
    }
    else
    {
      $this->page_sum=(int)($this->page_rssum/$this->page_number)+1;
      if($this->page_sum<1) $this->page_sum=1;
    }
    //当前显示页 [当前页码 > 总页数=总页数]
    if($this->page_view>$this->page_sum) $this->page_view=$this->page_sum;
    //当前显示页 [当前页码 < 1=1]
    if($this->page_view<1)$this->page_view=1;
    //当只有一页时 [每页记录数=总记录数]
    if($this->page_view==$this->page_sum && $this->page_view==1) $this->page_number=$this->page_rssum;
   
    //分页显示记录 当前已经显示到的记录数
    $this->page_now=($this->page_view-1)*$this->page_number;
    //分页记录显示限制  [当前已经显示到的记录数 , 每页显示记录数]
    $this->page_limit=" limit ".$this->page_now.",".$this->page_number;
    //判断是否输出模板
    if ($this->page_isout) $this->setTpl();
  }
//分页页码图片路径
  public function setImgUrl($url)
  {
    $this->page_imgurl=$url;
  }
//获取上一页
  public function getPrevNum()
  {
    return $this->page_view>1? $this->page_view-1 : 1;
  }
  //获取下一页
  public function getNextNum()
  {
    return $this->page_view<$this->page_sum? $this->page_view+1 : $this->page_sum;
  }
  //获取第一页
  public function getFirstNum()
  {
    return 1;
  }
  //获取最后一页
  public function getLastNum()
  {
    return $this->page_sum;
  }
  //获取当前页
  public function getViewNum()
  {
    return ($this->page_viewnow>0)? $this->page_view=$this->page_viewnow : $this->page_view=$this->pageCode($this->page_fix);
  }
  /*
  * 返回连接url
  * @param   int   当前显示页
  */
  public function pageGetUrl($strpage=1)
  {
   $this->page_urlParam='=('.$this->page_fix.')';
    $tmp_str=$this->page_url.$this->page_fix.$this->page_urlParam;
    $tmp_str=str_replace("({$this->page_fix})",$strpage,$tmp_str);
    return $tmp_str;
  }
  /*
  * 返回当前显示页
  * @param   int   当前显示页
  */
  private function pageCode($strer)
  {
    $tmp_num=0;
    if($this->page_ajax)
    {
      $tmp_num=$this->page_view;
    }
    else
    {
      if(array_key_exists($strer,$_GET))
      {
        $tmp_num=@$_GET[$strer];
      }
      else
      {
        $tmp_num=$this->page_view;
      }
    }
    if (!is_numeric($tmp_num)) return 1;
    if ((int)$tmp_num<1) return 1;
    return (int)$tmp_num;
  }
  //制作下拉框页码
  private function pageJump()
  {
    $temp_select='<select name="select_page" onchange="javascript:window.location.href=this.options[this.selectedIndex].value">';
    for ($i=1;$i<=$this->page_sum;$i++)
    {
      if ($i>$this->page_view)
      {
        $temp_select.='<option value="'.$this->pageGetUrl($i).($this->page_view==$i ? '" selected ' : '"').">$i</option>";
      }
      elseif ($i==$this->page_view)
      {
        $temp_select.='<option value="'.$this->pageGetUrl($i).($this->page_view==$i ? '" selected ' : '"').">$i</option>";
      }
      else
      {
        $temp_select.='<option value="'.$this->pageGetUrl($i).($this->page_view==$i ? '" selected ' : '"').">$i</option>";
      }
    }
    $temp_select.='</select>';
    return $temp_select;
  }
  //制作文本框页码 text_page()
  private function pageText()
  {
    if($this->page_ajax)
  {
   $temp_url=$this->page_url.'page=';
   return '<input id="goto_page" type="text" size="3" />';
  }
  else
  {
   $temp_url=$this->page_url.'page=';
   return '<input id="goto_page" type="text" size="3" onkeypress="javascript:if(event.keyCode==13){var url=\''.$temp_url.'\'+this.value;window.location.href=url;}" />';
  }
  }
  
  //设置模板
  private function setTpl()
  {
    include './page/'.$this->page_template.'.php';
    if(isset($p_mode_out) && !empty($p_mode_out))
    {
      $this->page_mode_out=$p_mode_out;
    }
    if(isset($p_mode_b) && !empty($p_mode_b))
    {
      $this->page_mode_begin=$p_mode_b;
    }
    if(isset($p_mode_e) && !empty($p_mode_e))
    {
      $this->page_mode_end=$p_mode_e;
    }
  }
  //返回拼装sql语句
  function pageStructureSql($sql,$mode,$action)
  {
    switch($mode)
    {
        case 1:
          $temp_sql=preg_replace('/\(\s*SELECT\s.*\s+FROM\s/Uis','(SELECT COUNT(*) as num FROM ',$sql);
          $temp_sql=str_replace("union","+",$temp_sql);
          $temp_sql="select ".$temp_sql;
          $temp_sql=substr($temp_sql,0,strrpos($temp_sql,")")+1)." as num";
          break;
        default:
          $temp_sql=preg_replace('/^\s*SELECT\s.*\s+FROM\s/Uis','SELECT COUNT(*) as num FROM ',$sql);
          $temp_sql=preg_replace('/(\sORDER\s+BY\s.*)/is','',$temp_sql);
          break;
    }
switch($action)
{
  case 1:
   $temp_sql="select count(num) as num from (".$temp_sql.") as test";
   break;
}
    return $temp_sql;
  }
  //获得分页数据数组
  public function pageGetArray()
  {
    $temp_query=$this->page_db->query($this->page_sql.$this->page_limit);
    $temp_result=$this->page_db->query_array($temp_query);
    return $temp_result;
  }
  //获得分页数据对象
  public function pageGetQuery()
  {
    $temp_query=$this->page_db->query($this->page_sql.$this->page_limit);
    return $temp_query;
  }
  //直接替换模板
  public function sqlAssign($para,$fun=0)
  {
    $temp_query=$this->page_sql.$this->page_limit;
    sql_to_assign($temp_query,$para,0,$fun);
  }
  //分页输出
  public function pageOut()
  {
   //设置数字连接的变量数组
    $temp_atyb=array();
    //分页连接在目标框架显示
    $this->page_target=='' ? '' : $this->page_target=' target='.$this->page_target;  

    //活动页码范围设置
    $temp_range=(int)($this->page_space/2);
    if ($temp_range*2!=$this->page_space) $temp_range--;
    $pl=$this->page_view-$temp_range;
    $pr=$pl+$this->page_space-1;
    //$pl 活动页码初始值
    if ($pl<1)
    {
      $pr=$pr-$pl+1;
      $pl=1;
      if ($pr>$this->page_sum) $pr=$this->page_sum;
    }
    //$pr 活动页码最终值
    if ($pr>$this->page_sum)
    {
      $pl=$pl+$this->page_sum-$pr;
      $pr=$this->page_sum;
      if($pl<1) $pl=1;
    }
    //固定模版替换名数组
    $temp_mixd=array(
        '{page_rssum}',//总记录数
        '{page_unit}',//单位
        '{page_tit}',//代词
        '{page_sum}',//总页数
        '{page_view}',//当前页码
        '{page_target}',//分页连接在目标框架显示
        '{page_first_link}',//第一页
        '{page_prev_link}',//上一页
        '{page_next_link}',//下一页
        '{page_last_link}',//最后一页
        '{page_first_num}',//第一页
        '{page_prev_num}',//上一页
        '{page_next_num}',//下一页
        '{page_last_num}',//最后一页
        '{page_text}',//辅助分页
        '{page_jump}',//辅助分页
       '{page_number}',
        '{page_imgurl}',//分页连接图片路径
        '{page_aimgurl}',//辅助图片路径
        );
    //固定模版替换值数组
    $temp_mixb=array(
        $this->page_rssum,//总记录数
        $this->page_unit,//单位
        $this->page_tit,//代词
        $this->page_sum,//总页数
        $this->page_view,//当前页码
        $this->page_target,//分页连接在目标框架显示
        $this->pageGetUrl(1),//第一页
        $this->page_view>1? $this->pageGetUrl($this->page_view-1) : $this->pageGetUrl(1),//上一页
        $this->page_view<$this->page_sum? $this->pageGetUrl($this->page_view+1) : $this->pageGetUrl($this->page_sum),//下一页
        $this->pageGetUrl($this->page_sum),//最后一页
        $this->getFirstNum(),//第一页
        $this->getPrevNum(),//上一页
        $this->getNextNum(),//下一页
        $this->page_sum,//最后一页
        $this->pageText(),//辅助分页
        $this->pageJump(),//辅助分页
       $this->page_number,
        $this->page_imgurl,
        $this->page_aimgurl
        );
    //活动模版替换名数组
    $temp_atyd=array(
        '{page_target}',  //分页连接在目标框架显示
        '{page_link}',    //活动数字连接页码
        '{page_number}',  //数字或其它页码
        '{page_aimgurl}'  //辅助图片路径
        );
    $temp_x=0;
   
    //替换导入模版中的{..}内容
    foreach($this->page_mode_out as $key=>$value)
    {
      $temp_out='';
      if($key!=='activity' && $key!=='begin_activity' && $key!=='end_activity')
      {
        $temp_out=str_replace($temp_mixd,$temp_mixb,$value);
      }
      else
      {
       //活动的[字符/图片]页码 替换模版{..}内容
        for ($i=$pl;$i<=$pr;$i++)
        {
          if ($i>$this->page_view)
          {
           $page_link=$this->pageGetUrl($i);
            $temp_atyb=array($this->page_target,$page_link,$i,$this->page_aimgurl);
           @$temp_out.=$this->page_mode_begin[$key].str_replace($temp_atyd,$temp_atyb,$value).$this->page_mode_end[$key];
          }
          elseif ($i==$this->page_view)
          {
           $tmp_mode=' '.$this->page_mode_begin['static'].'{page_number}'.$this->page_mode_end['static'].' ';
           $temp_out.=str_replace('{page_number}',$i,$tmp_mode);
          }
          else
          {
           $page_link=$this->pageGetUrl($i);
           $temp_atyb=array($this->page_target,$page_link,$i,$this->page_aimgurl);
           @$temp_out.=$this->page_mode_begin[$key].str_replace($temp_atyd,$temp_atyb,$value).$this->page_mode_end[$key];
          }
        }
      }
      //组织替换后的内容
      ($temp_x++<1)? $out=$temp_out : $out.=$temp_out;
    }
    return $out;
}
}

?>
广告位招租。

TOP

分页模板

复制内容到剪贴板
代码:
<?php
$p_mode_b['static']='';
$p_mode_e['static']='';

$p_mode_out['begin']= <<<EOT

  
        共有 {page_rssum} {page_unit}{page_tit}
       
        |&lt;
EOT;
$p_mode_out['activity']='{page_number}';
$p_mode_out['end'] = <<<EOT
        &gt;|
       
        &nbsp;&nbsp;跳转到 {page_jump} 页
  

EOT;
?>
广告位招租。

TOP

靠~~~ 把我HTML代码吃了。大家看源文件吧。郁闷
广告位招租。

TOP

使用方法

复制内容到剪贴板
代码:
        $page = new lib_Page($db);   //这里需要传递数据库连接的实例进去。
        $sql="";
        $page->page_url=preg_replace('/(\&page\=)+[0-9]{1,}/','',$_SERVER['REQUEST_URI']).'&';  //设置路径
        $page->page_template='';   //就是上面的那个模板文件没有扩展名
        $page->page_number=16;  //一页条数
        $page->page_sql=$sql;    //上面SQL传递进去
        $page->pageLoad();  //分页操作
        $query=$page->pageGetQuery();  //可以取得数据库查询资源
广告位招租。

TOP

对我来说 有点深了 哈哈 但是还是十分感谢!

TOP


好东西!

TOP

看着有点晕

TOP

呵呵,什么时候我也能写出来撒......

TOP

N 年自己  就可以写出来啦~~~  大家  努力~~

TOP

好长呀,我不喜欢分页中把数据库扯进来的

TOP

 12 12
发新话题