Zend_Paginator

 zend的paginator组件旨在提供一个通用的分页模块供php项目使用。
经源码分析,其提供一个类供继承Zend_Paginator_Adapter_DbSelect
需要重写count方法,和getItems($offset, $itemCountPerPage)方法。

分页的基本原理是查两遍,先查总数,再查某一页的数据。在一些需要并发较大程序的场合,可以在count函数中加入缓存机制。

在第一个示例中,显示了最简单的情况。
但是,事实上,这个最简单的情况组件是做了处理的,自动加上了limit,所以传入的select对象中不应有limit,组件对该select对象做解析,分析出从哪里截断等,所以不如下面的示例2和示例3那样,干脆都由自己定义好,

第二个示例展示了使用sql做查询的情况,此时必须写一个查询类充当适配器。
提供的附件中是
class SqlDemo extends Zend_Paginator_Adapter_DbSelect
该类必须有count方法和getItem方法的实现,就是用limit,很简单

第三个示例展示了使用select做查询的情况。此时,count方法可以固定,所以加了一个类。
好处是可以充分使用select的强大组合功能

在使用了分页组件后,分页模板中的各个属性都由paginator定义好了,这就是好处,能统一接口。


这是一个smarty模板文件
paginator_demo.tpl

Java代码 复制代码  收藏代码
  1. {if $pageinfo->totalItemCount }   
  2. <div class="paginationControl">   
  3. <!-- Previous page link -->   
  4. if $pageinfo->previous }   
  5.   <a href="{$urlhelp->url($pageinfo->previous)}">   
  6.     &lt; Previous   
  7.   </a> |   
  8. {else}   
  9.   <span class="disabled">&lt; Previous</span> |   
  10. {/if}   
  11.   
  12.   
  13. {foreach from=$pageinfo->pagesInRange item=page }   
  14.   {if ($page != $pageinfo->current)}   
  15.     <a href="{$urlhelp->url($page)}">{$page}</a> |   
  16.    {else}   
  17.     {$page} |   
  18.   {/if}   
  19. {/foreach}   
  20.   
  21. {if $pageinfo->next}   
  22.   <a href="{$urlhelp->url($pageinfo->next)}">   
  23.     Next &gt;   
  24.   </a>   
  25. {else}   
  26.   <span class="disabled">Next &gt;</span>   
  27. {/if}   
  28. </div>   
  29.   
  30. {/if}  
{if $pageinfo->totalItemCount }
<div class="paginationControl">
<!-- Previous page link -->
{ if $pageinfo->previous }
  <a href="{$urlhelp->url($pageinfo->previous)}">
    &lt; Previous
  </a> |
{else}
  <span class="disabled">&lt; Previous</span> |
{/if}


{foreach from=$pageinfo->pagesInRange item=page }
  {if ($page != $pageinfo->current)}
    <a href="{$urlhelp->url($page)}">{$page}</a> |
   {else}
    {$page} |
  {/if}
{/foreach}

{if $pageinfo->next}
  <a href="{$urlhelp->url($pageinfo->next)}">
    Next &gt;
  </a>
{else}
  <span class="disabled">Next &gt;</span>
{/if}
</div>

{/if}



以下是demo.php

Java代码 复制代码  收藏代码
  1. <?php   
  2.   
  3. /**  
  4.  * 加载一些公共类,如db对象,也要加载zend的类自动载入方法, 该公共类需要自己写  
  5.  *  
  6.  * 这只是一个代码示例,运行还需要smarty和zend环境  
  7.  *   
  8.  * 还建用户表member  
  9.  * 字段  
  10.  * id 自增主键  
  11.  * name 用户名  
  12.  * member_type_id 用户类型id  
  13.  *   
  14.  */  
  15. include_once('public.php');   
  16.   
  17. //定义smarty对象   
  18. $smarty = new Smarty(); // 需要先加载smarty   
  19.   
  20. //定义一个url类,用于在分页html中显示页码的链接   
  21. class url_help{   
  22.    public function url($page){   
  23.       return '/command/paginator_demo/1.php?page=' . intval($page);     
  24.    }   
  25. }   
  26. $url_obj = new url_help();   
  27.   
  28.   
  29. function echobr(){   
  30.   echo "<br>--------------------------------------------------------------------------";   
  31. }   
  32.   
  33.   
  34. echo "演示zend组件Pagintator的用法" . $_SERVER['REQUEST_URI'];   
  35.   
  36. /**  
  37.  * 用法一,最简单,直接用select对象  
  38.  */  
  39. echo "<br>用法一,最简单,直接用select对象,";   
  40. $db = Sys::getdb();   
  41. $select = $db->select();   
  42. $select->from('member','*')   
  43.        ->order('id desc');   
  44. $paginator = Zend_Paginator::factory($select);   
  45. $paginator->setCurrentPageNumber(isset($_REQUEST['page']) ? $_REQUEST['page'] : 2); //设置当前页数2   
  46. $paginator->setItemCountPerPage(2); //设置每页的条数   
  47. $paginator->setPageRange(5);  //设置显示几个链接   
  48. //echo $paginator->count();   
  49. $arr = $paginator->getIterator();   
  50.   
  51. //赋值   
  52. $smarty->assign("pageinfo",$paginator->getPages()); //默认Sliding   
  53. $smarty->assign("urlhelp",$url_obj);    
  54. //引用模板文件   
  55. $smarty->display('paginator_demo.tpl');    
  56.   
  57. var_dump($arr);   
  58.   
  59.   
  60. echobr();   
  61. echobr();   
  62.   
  63.   
  64. /**  
  65.  * 用法二,继承性质的使用,与select类无关,直接使用sql语句  
  66.  */  
  67.   
  68. echo "<br>用法二,继承性质的使用,与select类无关,直接使用sql语句";   
  69.   
  70. $adapter = new SqlDemo(); //定义适配器   
  71. $paginator = new Zend_Paginator($adapter);   
  72. $paginator->setCurrentPageNumber(isset($_REQUEST['page']) ? $_REQUEST['page'] : 2); //设置当前页数   
  73. $paginator->setItemCountPerPage(3); //设置每页的条数   
  74. $paginator->setPageRange(4);  //设置显示几个链接   
  75. $arr = $paginator->getIterator();   
  76. //赋值   
  77. $smarty->assign("pageinfo",$paginator->getPages()); //默认Sliding   
  78. $smarty->assign("urlhelp",$url_obj);    
  79. //引用模板文件   
  80. $smarty->display('paginator_demo.tpl');    
  81.   
  82. var_dump($arr);   
  83. echobr();   
  84. echobr();   
  85.   
  86. /**  
  87.  * 用法三,继承性质的使用,与select类无关,直接使用sql语句  
  88.  */  
  89.   
  90. echo "<br>用法三,继承性质的使用,使用select类";   
  91.   
  92. $adapter = new MemberDemo(); //定义适配器   
  93. $paginator = new Zend_Paginator($adapter);   
  94. $paginator->setCurrentPageNumber(isset($_REQUEST['page']) ? $_REQUEST['page'] : 2); //设置当前页数   
  95. $paginator->setItemCountPerPage(3); //设置每页的条数   
  96. $paginator->setPageRange(6);  //设置显示几个链接   
  97. $arr = $paginator->getIterator();   
  98. echo "<br>总页数". $paginator->count();   
  99. //赋值   
  100. $smarty->assign("pageinfo",$paginator->getPages()); //默认Sliding   
  101. $smarty->assign("urlhelp",$url_obj);    
  102. //引用模板文件   
  103. $smarty->display('paginator_demo.tpl');    
  104. var_dump($arr);   
  105. echobr();   
  106. echobr();   
  107.   
  108. exit;   
  109.   
  110.   
  111.   
  112. ?>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值