浏览 4196 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-25
最后修改:2010-05-25
经源码分析,其提供一个类供继承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 {if $pageinfo->totalItemCount } <div class="paginationControl"> <!-- Previous page link --> { if $pageinfo->previous } <a href="{$urlhelp->url($pageinfo->previous)}"> < Previous </a> | {else} <span class="disabled">< 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 > </a> {else} <span class="disabled">Next ></span> {/if} </div> {/if} 以下是demo.php <?php /** * 加载一些公共类,如db对象,也要加载zend的类自动载入方法, 该公共类需要自己写 * * 这只是一个代码示例,运行还需要smarty和zend环境 * * 还建用户表member * 字段 * id 自增主键 * name 用户名 * member_type_id 用户类型id * */ include_once('public.php'); //定义smarty对象 $smarty = new Smarty(); // 需要先加载smarty //定义一个url类,用于在分页html中显示页码的链接 class url_help{ public function url($page){ return '/command/paginator_demo/1.php?page=' . intval($page); } } $url_obj = new url_help(); function echobr(){ echo "<br>--------------------------------------------------------------------------"; } echo "演示zend组件Pagintator的用法" . $_SERVER['REQUEST_URI']; /** * 用法一,最简单,直接用select对象 */ echo "<br>用法一,最简单,直接用select对象,"; $db = Sys::getdb(); $select = $db->select(); $select->from('member','*') ->order('id desc'); $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber(isset($_REQUEST['page']) ? $_REQUEST['page'] : 2); //设置当前页数2 $paginator->setItemCountPerPage(2); //设置每页的条数 $paginator->setPageRange(5); //设置显示几个链接 //echo $paginator->count(); $arr = $paginator->getIterator(); //赋值 $smarty->assign("pageinfo",$paginator->getPages()); //默认Sliding $smarty->assign("urlhelp",$url_obj); //引用模板文件 $smarty->display('paginator_demo.tpl'); var_dump($arr); echobr(); echobr(); /** * 用法二,继承性质的使用,与select类无关,直接使用sql语句 */ echo "<br>用法二,继承性质的使用,与select类无关,直接使用sql语句"; $adapter = new SqlDemo(); //定义适配器 $paginator = new Zend_Paginator($adapter); $paginator->setCurrentPageNumber(isset($_REQUEST['page']) ? $_REQUEST['page'] : 2); //设置当前页数 $paginator->setItemCountPerPage(3); //设置每页的条数 $paginator->setPageRange(4); //设置显示几个链接 $arr = $paginator->getIterator(); //赋值 $smarty->assign("pageinfo",$paginator->getPages()); //默认Sliding $smarty->assign("urlhelp",$url_obj); //引用模板文件 $smarty->display('paginator_demo.tpl'); var_dump($arr); echobr(); echobr(); /** * 用法三,继承性质的使用,与select类无关,直接使用sql语句 */ echo "<br>用法三,继承性质的使用,使用select类"; $adapter = new MemberDemo(); //定义适配器 $paginator = new Zend_Paginator($adapter); $paginator->setCurrentPageNumber(isset($_REQUEST['page']) ? $_REQUEST['page'] : 2); //设置当前页数 $paginator->setItemCountPerPage(3); //设置每页的条数 $paginator->setPageRange(6); //设置显示几个链接 $arr = $paginator->getIterator(); echo "<br>总页数". $paginator->count(); //赋值 $smarty->assign("pageinfo",$paginator->getPages()); //默认Sliding $smarty->assign("urlhelp",$url_obj); //引用模板文件 $smarty->display('paginator_demo.tpl'); var_dump($arr); echobr(); echobr(); exit; ?> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |