首页 > 开发 > PHP > 正文

一个实例php mysql模板分页类

2024-05-04 23:06:44
字体:
来源:转载
供稿:网友
  1. <?php 
  2. /* 
  3.  * 模板分页类,源于easp的数据库分页方法,算是easp分页的的php独立版 
  4.  * 支持动态和静态分页方式 
  5.  * easp官网http://easp.lengshi.com/ 
  6.  * 作者:钟晶晶 
  7.  * 日期:2010-11-3 
  8.  * 邮箱:zhongjingjing@gmail.com 
  9.  * 博客:http://blog.zaimer.com 
  10.  * page([总记录数=1],[分页大小=20],[当前页=1],[显示页数=6],[分页参数='page'],[分页链接=当前页面],[是否静态=false]) 
  11.  * 动态: 
  12.  * 简单用法: 
  13.  * $page = new page(50); 
  14.  * $page->setpager('zjj','<div class="newpager">共有{recordcount} 个商品&nbsp;&nbsp;当前第&nbsp;{pageindex}&nbsp;页&nbsp;/&nbsp;共&nbsp;{pagecount}&nbsp;页&nbsp;分页:&nbsp;{first}{prev}&nbsp;&nbsp;{list}&nbsp;&nbsp;{next}{last}&nbsp;&nbsp;转到&nbsp;{jump}&nbsp;页</div>',array("listlong"=>"6","first"=>"首页","last"=>"尾页","prev"=>"上一页","next"=>"下一页","list"=>"第*页","jump"=>"select")); 
  15.  * echo $page->getpager('zjj'); 
  16.  * 全参数用法: 
  17.  * $page = new page(50,20,1,6,'page','prrr.php',false); 
  18.  * $page->setpager('zjj','<div class="newpager">共有{recordcount} 个商品&nbsp;&nbsp;当前第&nbsp;{pageindex}&nbsp;页&nbsp;/&nbsp;共&nbsp;{pagecount}&nbsp;页&nbsp;分页:&nbsp;{first}{prev}&nbsp;&nbsp;{list}&nbsp;&nbsp;{next}{last}&nbsp;&nbsp;转到&nbsp;{jump}&nbsp;页</div>',array("listlong"=>"6","first"=>"首页","last"=>"尾页","prev"=>"上一页","next"=>"下一页","list"=>"第*页","jump"=>"select")); 
  19.  * echo $page->getpager('zjj'); 
  20.  * 静态: 
  21.  * $page = new page(50,20,1,6,'page','prrr{page}.html',true); 
  22.  * $page->setpager('zjj','<div class="newpager">共有{recordcount} 个商品&nbsp;&nbsp;当前第&nbsp;{pageindex}&nbsp;页&nbsp;/&nbsp;共&nbsp;{pagecount}&nbsp;页&nbsp;分页:&nbsp;{first}{prev}&nbsp;&nbsp;{list}&nbsp;&nbsp;{next}{last}&nbsp;&nbsp;转到&nbsp;{jump}&nbsp;页</div>',array("listlong"=>"6","first"=>"首页","last"=>"尾页","prev"=>"上一页","next"=>"下一页","list"=>"第*页","jump"=>"select")); 
  23.  * echo $page->getpager('zjj'); 
  24.  */ 
  25. class page { 
  26.  private $page_size//每页显示的条目数 
  27.  private $total_size//总条目数 
  28.  private $current_page//当前被选中的页 
  29.  private $sub_pages//每次显示的页数 
  30.  private $total_pages//总页数 
  31.  private $page_tpl = array (); // 分页模板 
  32.  private $pageparam
  33.  private $pagelink
  34.  private $static
  35.   
  36.  function __construct($total_size = 1, $page_size = 20, $current_page = 1, $sub_pages = 6, $pageparam = 'page'$pagelink = ''$static = false) { 
  37.   $this->page_size = intval ( $page_size ); 
  38.   $this->total_size = intval ( $total_size ); 
  39.   if (! $current_page) { 
  40.    $this->current_page = 1; 
  41.   } else { 
  42.    $this->current_page = intval ( $current_page ); 
  43.   } 
  44.   $this->total_pages = ceil ( $total_size / $page_size ); 
  45.   $this->sub_pages = intval ( $sub_pages ); 
  46.   $this->pageparam = $pageparam
  47.   $this->pagelink = (emptyempty ( $pagelink ) ? $_server ["php_self"] : $pagelink); 
  48.   $this->static = $static
  49.   $this->page_tpl ['default'] = array ('tpl' => '<div class="pager">{first}{prev}{liststart}{list}{listend}{next}{last} 跳转到{jump}页</div>''config' => array () ); 
  50.   
  51.  } 
  52.  public function __set($param$value) { 
  53.   $this->$param = $value
  54.  } 
  55.  public function __get($param) { 
  56.   return $this->$param
  57.  } 
  58.  /* 
  59.   __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。 
  60.  */ 
  61.  function __destruct() { 
  62.   unset ( $page_size ); //每页显示的条目数 
  63.   unset ( $total_size ); //总条目数 
  64.   unset ( $current_page ); //当前被选中的页 
  65.   unset ( $sub_pages ); //每次显示的页数 
  66.   unset ( $total_pages ); //总页数 
  67.   unset ( $page_tpl ); // 分页模板 
  68.   unset ( $pageparam ); //分页参数,默认page 
  69.   unset ( $pagelink ); 
  70.   unset ( $static ); 
  71.  } 
  72.  private function urlparameters($url = array()) { 
  73.   foreach ( $url as $key => $val ) { 
  74.    if ($key != $this->pageparam) 
  75.     $arg [] = $key . '=' . $val
  76.   } 
  77.   $arg [] = $this->pageparam . '=*'
  78.   if ($this->static
  79.    return str_replace ( '{page}''*'$this->pagelink ); 
  80.   else 
  81.    return $this->pagelink . '?' . implode ( '&'$arg ); 
  82.  } 
  83.  public function setpager($tpl_name = 'default'$tpl = ''$config = array()) { 
  84.   if (emptyempty ( $tpl )) 
  85.    $tpl = $this->page_tpl ['default'] ['tpl']; 
  86.   if (emptyempty ( $config )) 
  87.    $config = $this->page_tpl ['default'] ['config']; 
  88.   $this->page_tpl [$tpl_name] = array ('tpl' => $tpl'config' => $config ); 
  89.  } 
  90.  public function getpager($tpl_name = 'default') { 
  91.   $this->getcurrentpage (); 
  92.   return $this->pager ( $this->page_tpl [$tpl_name] ); 
  93.  } 
  94.  public function getcurrentpage() { 
  95.   $this->current_page = ($_get [$this->pageparam] <= intval ( $this->total_pages ) ? ($_get [$this->pageparam] < 1 ? 1 : $_get [$this->pageparam]) : intval ( $this->total_pages )); 
  96.  } 
  97.  public function pager($page_tpl = '') { 
  98.   if (emptyempty ( $page_tpl )) 
  99.    $page_tpl = $this->page_tpl ['default']; 
  100.   $cfg = array ('recordcount' => intval ( $this->total_size ), 'pageindex' => intval ( $this->current_page ), 'pagecount' => intval ( $this->total_pages ), 'pagesize' => intval ( $this->page_size ), 'listlong' => intval ( $this->sub_pages ), 'listsidelong' => 2, 'list' => '*''currentclass' => 'current''link' => $this->urlparameters ( $_get ), 'first' => '&laquo;''prev' => '&#8249;''next' => '&#8250;''last' => '&raquo;''more' => '...''disabledclass' => 'disabled''jump' => 'input''jumpplus' => '''jumpaction' => '''jumplong' => 50 ); 
  101.   if (! emptyempty ( $page_tpl ['config'] )) { 
  102.    foreach ( $page_tpl ['config'as $key => $val ) { 
  103.     if (array_key_exists ( $key$cfg )) 
  104.      $cfg [$key] = $val
  105.    } 
  106.   } 
  107.   $tmpstr = $page_tpl ['tpl']; 
  108.   $pstart = $cfg ['pageindex'] - (($cfg ['listlong'] / 2) + ($cfg ['listlong'] % 2)) + 1; 
  109.   $pend = $cfg ['pageindex'] + $cfg ['listlong'] / 2; 
  110.   if ($pstart < 1) { 
  111.    $pstart = 1; 
  112.    $pend = $cfg ['listlong']; 
  113.   } 
  114.   if ($pend > $cfg ['pagecount']) { 
  115.    $pstart = $cfg ['pagecount'] - $cfg ['listlong'] + 1; 
  116.    $pend = $cfg ['pagecount']; 
  117.   } 
  118.   if ($pstart < 1) 
  119.    $pstart = 1; 
  120.   for($i = $pstart$i <= $pend$i ++) { 
  121.    if ($i == $cfg ['pageindex']) 
  122.     $plist .= '<span class="' . $cfg ['currentclass'] . '" >' . str_replace ( '*'$i$cfg ['list'] ) . '</span> '
  123.    else 
  124.     $plist .= ' <a href="' . str_replace ( '*'$i$cfg ['link'] ) . '"> ' . str_replace ( '*'$i$cfg ['list'] ) . '</a> '
  125.   } 
  126.   if ($cfg ['listsidelong'] > 0) { 
  127.    if ($cfg ['listsidelong'] < $pstart) { 
  128.     for($i = 1; $i <= $cfg ['listsidelong']; $i ++) { 
  129.      $pliststart .= '<a href="' . str_replace ( '*'$i$cfg ['link'] ) . '">' . str_replace ( '*'$i$cfg ['list'] ) . '</a> '
  130.     } 
  131.     $pliststart .= ($cfg ['listsidelong'] + 1) == $pstart ? '' : $cfg ['more'] . ' '
  132.    } else { 
  133.     if ($cfg ['listsidelong'] >= $pstart && $pstart > 1) { 
  134.      for($i = 1; $i <= ($pstart - 1); $i ++) { 
  135.       $pliststart .= '<a href="' . str_replace ( '*'$i$cfg ['link'] ) . '">' . str_replace ( '*'$i$cfg ['list'] ) . '</a> '
  136.      } 
  137.     } 
  138.    } 
  139.    if (($cfg ['pagecount'] - $cfg ['listsidelong']) > $pend) { 
  140.     $plistend = ' ' . $cfg ['more'] . $plistend
  141.     for($i = (($cfg ['pagecount'] - $cfg ['listsidelong']) + 1); $i <= $cfg ['pagecount']; $i ++) { 
  142.      $plistend .= ' <a href="' . str_replace ( '*'$i$cfg ['link'] ) . '"> ' . str_replace ( '*'$i$cfg ['list'] ) . ' </a> '
  143.     } 
  144.    } else { 
  145.     if (($cfg ['pagecount'] - $cfg ['listsidelong']) <= $pend && $pend < $cfg ['pagecount']) { 
  146.      for($i = ($pend + 1); $i <= $cfg ['pagecount']; $i ++) { 
  147.       $plistend .= ' <a href="' . str_replace ( '*'$i$cfg ['link'] ) . '"> ' . str_replace ( '*'$i$cfg ['list'] ) . ' </a> '
  148.      } 
  149.     } 
  150.    } 
  151.   } 
  152.   if ($cfg ['pageindex'] > 1) { 
  153.    $pfirst = ' <a href="' . str_replace ( '*''1'$cfg ['link'] ) . '">' . $cfg ['first'] . '</a> '
  154.    $pprev = ' <a href="' . str_replace ( '*'$cfg ['pageindex'] - 1, $cfg ['link'] ) . '">' . $cfg ['prev'] . '</a> '
  155.   } else { 
  156.    $pfirst = ' <span class="' . $cfg ['disabledclass'] . '">' . $cfg ['first'] . '</span> '
  157.    $pprev = ' <span class="' . $cfg ['disabledclass'] . '">' . $cfg ['prev'] . '</span> '
  158.   } 
  159.   if ($cfg ['pageindex'] < $cfg ['pagecount']) { 
  160.    $plast = ' <a href="' . str_replace ( '*'$cfg ['pagecount'], $cfg ['link'] ) . '">' . $cfg ['last'] . '</a> '
  161.    $pnext = ' <a href="' . str_replace ( '*'$cfg ['pageindex'] + 1, $cfg ['link'] ) . '">' . $cfg ['next'] . '</a> '
  162.   } else { 
  163.    $plast = ' <span class="' . $cfg ['disabledclass'] . '">' . $cfg ['last'] . '</span> '
  164.    $pnext = ' <span class="' . $cfg ['disabledclass'] . '">' . $cfg ['next'] . '</span> '
  165.   } 
  166.   switch (strtolower ( $cfg ['jump'] )) { 
  167.    case 'input' : 
  168.     $pjumpvalue = 'this.value'
  169.     $pjump = '<input type="text" size="3" title="请输入要跳转到的页数并回车"' . (($cfg ['jumpplus'] == '') ? '' : ' ' . $cfg ['jumpplus']); 
  170.     $pjump .= ' onkeydown=":if(event.charcode==13||event.keycode==13){if(!isnan(' . $pjumpvalue . ')){'
  171.     $pjump .= ($cfg ['jumpaction'] == '' ? ((strtolower ( substr ( $cfg ['link'], 0, 11 ) ) == 'javascript:') ? str_replace ( '*'$pjumpvaluesubstr ( $cfg ['link'], 12 ) ) : " document.location.href='" . str_replace ( '*', ''+' . $pjumpvalue . '+'', $cfg ['link'] ) . '';') : str_replace ( "*"$pjumpvalue$cfg ['jumpaction'] )); 
  172.     $pjump .= '}return false;}" />'
  173.     break
  174.    case 'select' : 
  175.     $pjumpvalue = "this.options[this.selectedindex].value"
  176.     $pjump = '<select ' . ($cfg ['jumpplus'] == '' ? ' ' . $cfg ['jumpplus'] . ' onchange="javascript:' : $cfg ['jumpplus']); 
  177.     $pjump .= ($cfg ['jumpaction'] == '' ? ((strtolower ( substr ( $cfg ['link'], 0, 11 ) ) == 'javascript:') ? str_replace ( '*'$pjumpvaluesubstr ( $cfg ['link'], 12 ) ) : " document.location.href='" . str_replace ( '*', ''+' . $pjumpvalue . '+'', $cfg ['link'] ) . '';') : str_replace ( "*"$pjumpvalue$cfg ['jumpaction'] )); 
  178.     $pjump .= '" title="请选择要跳转到的页数"> '
  179.     if ($cfg ['jumplong'] == 0) { 
  180.      for($i = 0; $i <= $cfg ['pagecount']; $i ++) { 
  181.       $pjump .= '<option value="' . $i . '"' . (($i == $cfg ['pageindex']) ? ' selected="selected"' : '') . ' >' . $i . '</option> '
  182.      } 
  183.     } else { 
  184.      $pjumplong = intval ( $cfg ['jumplong'] / 2 ); 
  185.      $pjumpstart = ((($cfg ['pageindex'] - $pjumplong) < 1) ? 1 : ($cfg ['pageindex'] - $pjumplong)); 
  186.      $pjumpstart = ((($cfg ['pagecount'] - $cfg ['pageindex']) < $pjumplong) ? ($pjumpstart - ($pjumplong - ($cfg ['pagecount'] - $cfg ['pageindex'])) + 1) : $pjumpstart); 
  187.      $pjumpstart = (($pjumpstart < 1) ? 1 : $pjumpstart); 
  188.      $j = 1; 
  189.      for($i = $pjumpstart$i <= $cfg ['pageindex']; $i ++, $j ++) { 
  190.       $pjump .= '<option value="' . $i . '"' . (($i == $cfg ['pageindex']) ? ' selected="selected"' : '') . '>' . $i . '</option> '
  191.      } 
  192.      $pjumplong = $cfg ['pagecount'] - $cfg ['pageindex'] < $pjumplong ? $pjumplong : $pjumplong + ($pjumplong - $j) + 1; 
  193.      $pjumpend = $cfg ['pageindex'] + $pjumplong > $cfg ['pagecount'] ? $cfg ['pagecount'] : $cfg ['pageindex'] + $pjumplong
  194.      for($i = $cfg ['pageindex'] + 1; $i <= $pjumpend$i ++) { 
  195.       $pjump .= '<option value="' . $i . '">' . $i . '</option> '
  196.      } 
  197.     } 
  198.     $pjump .= '</select>'
  199.     break
  200.   } 
  201.   $patterns = array ('/{recordcount}/''/{pagecount}/''/{pageindex}/''/{pagesize}/''/{list}/''/{liststart}/''/{listend}/''/{first}/''/{prev}/''/{next}/''/{last}/''/{jump}/' ); 
  202.   $replace = array ($cfg ['recordcount'], $cfg ['pagecount'], $cfg ['pageindex'], $cfg ['pagesize'], $plist$pliststart$plistend$pfirst$pprev$pnext$plast$pjump ); 
  203.   $tmpstr = chr ( 13 ) . chr ( 10 ) . preg_replace ( $patterns$replace$tmpstr ) . chr ( 13 ) . chr ( 10 ); 
  204.   unset ( $cfg ); 
  205.   return $tmpstr
  206.  } 
  207. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表