Smarty分页类修正版

作者 : admin 于 2009-05-08 03:59:49 标签: ,
2009
05-8

原来写的分页类有问题,经过排查,发现一个变量用错了,修改之

效果,很简单,黑白配,有心的人可以自己修改一下风格,欢迎共享

e69caae591bde5908d-1

PHP部分

  1. < ?php
  2. /*  Page.Class.php
  3.  *  Page
  4.  *  @link        http://www.sunboyu.cn
  5.  *  @package     OA
  6.  *  @version     V1.0
  7.  *
  8.  *  2009 05 07  sunboyu@gmail.com
  9.  *  Demo
  10. $page = new Page( 1 , 'v_user' , '*' , '' );
  11. $rs = $page->__getlist();
  12. $smarty->assign("page",$page->__getpagelist());
  13.  */
  14.  class Page
  15.  {
  16. public $count;      #结果总数
  17. public $page;       #当前页
  18. public $pagesize;   #每页结果数
  19. public $pagecount;  #翻页数
  20. public $baseurl;    #url
  21. public $result;     #结果数组集
  22. public $pagelist;   #每翻页数
  23. public $db;         #数据库连接
  24. public $table;      #要查询的表
  25. public $fileds;     #要返回的字段
  26. public $where;      #where条件
  27.  
  28. #构造函数,初始化变量
  29. function __construct( $page , $table , $fields = '*' , $where = false , $baseurl = false )
  30. {
  31.      global $_CFG,$db;
  32. $this->db        = $db;
  33. $this->table     = $table;
  34. $this->page      = isset($page) ? intval($page) : 1;
  35. $this->fileds    = $fields;
  36. $this->pagesize  = $_CFG['pagesize'];
  37. $this->baseurl   = ($baseurl!=false) ? $baseurl : $this->__geturl();
  38. $this->pagelist  = $_CFG['pagelist'];
  39. $this->where     = $where;
  40. }
  41.  
  42. #获得当前url
  43. function __geturl()
  44. {
  45. parse_str($_SERVER['QUERY_STRING'],$str);
  46. if(isset($str['page']))
  47. {
  48. unset($str['page']);
  49. }
  50. return count($str) > 0 ? "?".http_build_query($str) : "?";
  51. }
  52.  
  53. #获得记录集
  54. function __getlist()
  55. {
  56.      #获得count记录
  57. $sql = sprintf("SELECT COUNT(*) AS table_count FROM %s %s",$this->table,(($this->where!=false) ? " WHERE ".$this->where : ''));
  58. $rs = $this->db->fetch( $sql );
  59. $this->count = $rs['table_count'];
  60.      $offset = ($this->page-1)*$this->pagesize-1;
  61.      $sql = sprintf("SELECT %s FROM %s %s LIMIT %d,%d",$this->fileds,$this->table,(($this->where!=false) ? " WHERE ".$this->where : ''),$this->pagesize*($this->page-1),$this->pagesize);
  62. #echo $sql;
  63.          $list = $this->db->fetchAll( $sql );
  64. return $list;
  65. }
  66.  
  67. #获得分页列表
  68. function __getpagelist()
  69. {
  70. $this->result['count'] = $this->count;
  71. $this->result['page'] = $this->page;
  72. $this->result['pagesize'] = $this->pagesize;
  73. $this->result['pagecount'] = ceil($this->count/$this->pagesize);
  74. if($this->result['pagecount']< =1) //只有一页以下
  75. {
  76. $this->result['pagelist'] = 0;
  77. }
  78. else //一页以上
  79. {
  80. #前一页,第一页的算法
  81. $this->result['first'] = ($this->page == 1) ? 0 : 1;
  82. $this->result['pre'] = ($this->page == 1) ? 0 : 1;
  83. #后一页,最后一页的算法
  84. $this->result['next'] = ($this->page == $this->result['pagecount'] ) ? 0 : 1;
  85. $this->result['last'] = ($this->page == $this->result['pagecount'] ) ? 0 : 1;
  86.  
  87. #起始
  88. $pagearray = array();
  89. $start = floor(($this->page-1)/10)*10+1;
  90. for($i=0;$i&lt;10;$i++)
  91. {
  92.      if( ($start+$i) < = $this->result['pagecount'])
  93. {
  94.      $pagearray[$i]['page'] = $start+$i;
  95. }
  96. if( ($start+$i) != $this->page )
  97. {
  98.      $pagearray[$i]['link'] = 1;
  99. }
  100. }
  101. #分页导航列表
  102. $this->result['pagelist'] = $pagearray;
  103. $this->result['baseurl'] = $this->baseurl;
  104. }
  105. return $this->result;
  106. }
  107. }
  108. ?>

模板部分

  1. <div id="page">
  2. <table>
  3.     <tr>
  4.     <td>
  5. 共{{$page.count}}条数据 每页{{$page.pagesize}}条  共{{$page.pagecount}}页 当前第{{$page.page}}页
  6. </td>
  7. <td>
  8. {{if $page.pagecount>1}}
  9. {{if $page.first eq 1}}
  10. <a href="{{$page.baseurl}}">首页</a>
  11. {{else}}
  12. 首页
  13. {{/if}}
  14. {{if $page.pre eq 1}}
  15. <a href="{{$page.baseurl}}&page={{$page.page-1}}">上一页</a>
  16. {{else}}
  17. 上一页
  18. {{/if}}
  19. {{foreach from=$page.pagelist item=vols}}
  20.     {{if ($vols.page > 0 ) && ($vols.page < = $page.pagecount) }}
  21. {{if $vols.link eq 1}}
  22. <a href="{{$page.baseurl}}&page={{$vols.page}}">[{{$vols.page}}]
  23. {{else}}
  24. [{{$vols.page}}]
  25. {{/if}}
  26. {{/if}}
  27. {{/foreach}}
  28. {{if $page.next eq 1}}
  29. <a href="{{$page.baseurl|default:"?"}}&page={{$page.page+1}}">下一页</a>
  30. {{else}}
  31. 下一页
  32. {{/if}}
  33. {{if $page.last eq 1}}
  34. <a href="{{$page.baseurl|default:"?"}}&page={{$page.pagecount}}">尾页</a>
  35. {{else}}
  36. 尾页
  37. {{/if}}
  38. {{/if}}
  39. </td>
  40. </tr>
  41. </table>
  42. </div>

补充一个demo

  1. #PHP部分
  2. $page = new Page( $page , $this->area_table , $fields = '*' , $where);
  3. $result['rs'] = $page->__getlist();
  4. $result['page'] = $page->__getpagelist();
  5. $smarty->assign("list",$result['rs']);
  6. $smarty->assign("page",$result['page']);
  7. $smarty->display('list.tpl');
  8. #模板里边只要引用这个分页模板即可
  9. {{include file=$smarty.const.Tpl|cat:"/Page.tpl"}}

评论 8

  1. admin Says:

    下一版优化一下,翻页不是那么人性化,本来想抄discuz的,但感觉不好,还是模仿老外的。

  2. 叶龙 Says:

    朋友,你很强呀,可以交个朋友吗?请教你的QQ号

  3. admin Says:

    我的号就在右边

  4. luke Says:

    我咋看不懂呢!!

    为什么啊!!

    能给个实例不???

    谢谢了

  5. Luke Says:

    看了几天了!!

    好像有点领悟了!!

    汗啊!

  6. Beginner Says:

    有人说:”

    2。使用分页类库,呵呵,这个网上就太多了,一大把,不过我还没有发现写得很好的,特别是容易扩展的。
    在搜索的时候还看到一个号称分页类终结者的,哈哈,有点好笑。分页类中把SQL都包含进去了,这个是绝对不能容忍的,可以说作者对OO的认识还比较浅。

    你怎么看呢?

  7. admin Says:

    任何时候,照搬都是不可靠的。但从垃圾中汲取精华是每个程序员必备的功底。

  8. 小马 Says:

    哎呀,真够烂的,都没有整理好就照搬过来

发表评论




XHTML:你可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(若看不到验证码,请重新加载页面。)