+ -
当前位置:首页 → 问答吧 → spPager数据分页教程

spPager数据分页教程

时间:2009-12-29

来源:互联网

SpeedPHP中的分页函数非常容易使用,几乎就是在普通数据库操作findAll的基础上加入一行代码即可获取到分页数据。下面我们来介绍一下如何制作分页程序以及使用smarty显示页码。
分页Smarty留言本例子下载
这里我们使用的是基于Smarty的留言本,为了简单起见,我们只保留blue的蓝色模板来制造我们的分页Smarty留言本。
看看我们原来的main.php文件中的index:
复制代码
  1. $guestbook = spClass("guestbook");
  2. $this->results = $guestbook->findAll();
  3. $this->display("blue/index.html");

这里使用了findAll来获取全部的留言数据,然后我们来改成分页的程序:
复制代码
  1. $guestbook = spClass("guestbook");
  2. // 这里使用了spPager,同时用spArgs接受到传入的page参数
  3. $this->results = $guestbook->spPager($this->spArgs('page', 1), 5)->findAll();
  4. // 这里获取分页数据并发送到smarty模板内
  5. $this->pager = $guestbook->spPager()->getPager();
  6. $this->display("blue/index.html");


这里我们就可以看到输出的结果和原来的不同,页面上仅有五条留言数据。好的,我们来看看是怎么做的。
$this->results = $guestbook->spPager($this->spArgs('page', 1), 5)->findAll();
spPager是分页程序,第一个参数是页码,也就是第几页,这里我们用$this->spArgs('page', 1)来获取传过来的page,后面的1是如果在page没有值的时候,默认返回1。第二个参数是分页大小,也就是每页显示几条记录,这里设置是每页显示5条记录。

引用
spArgs的使用方法可以参考本站其他文章。



$this->pager = $guestbook->spPager()->getPager();
在使用了spPager来进行findAll后,就可以使用getPager()方法来获取分页数据。分页数据的格式是:

复制代码
  1. Array
  2. (
  3.     [total_count] => 13  // 数据总记录
  4.     [page_size] => 5    // 每页多少条记录
  5.     [total_page] => 3    // 总页数
  6.     [first_page] => 1     // 第一页的页码
  7.     [prev_page] => 1     // 上一页的页码
  8.     [next_page] => 2     // 下一页的页码
  9.     [last_page] => 3      // 最后一页的页码
  10.     [current_page] => 1   // 当前页码
  11.     [all_pages] => Array   // 页码数据,这里是全部的页码
  12.         (
  13.             [0] => 1
  14.             [1] => 2
  15.             [2] => 3
  16.         )
  17. )



请注意分页数据的各数据的意思。
好了,下面我们来使用这些分页数据。刚才我们已经将分页数据输入到$this->pager上面去了。我们在smarty模板中:


复制代码
  1. <{if $pager}>
  2. 共有留言<{$pager.total_count}>条,共有<{$pager.total_page}>页(每页<{$pager.page_size}>条留言):
  3. <!--在当前页不是第一页的时候,显示前页和上一页-->
  4. <{if $pager.current_page != $pager.first_page}>
  5. <a href="<{spUrl c=main a=index page=$pager.first_page}>">前页</a> |
  6. <a href="<{spUrl c=main a=index page=$pager.prev_page}>">上一页</a> |
  7. <{/if}>
  8. <!--开始循环页码,同时如果循环到当前页则不显示链接-->
  9. <{foreach from=$pager.all_pages item=thepage}>
  10. &#160;&#160;&#160;&#160;<{if $thepage != $pager.current_page}>
  11. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="<{spUrl c=main a=index page=$thepage}>"><{$thepage}></a>
  12. &#160;&#160;&#160;&#160;<{else}>
  13. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<b><{$thepage}></b>
  14. &#160;&#160;&#160;&#160;<{/if}>
  15. <{/foreach}>
  16. <!--在当前页不是最后一页的时候,显示下一页和后页-->
  17. <{if $pager.current_page != $pager.last_page}>
  18. |
  19. <a href="<{spUrl c=main a=index page=$pager.next_page}>">下一页</a> |
  20. <a href="<{spUrl c=main a=index page=$pager.last_page}>">后页</a>
  21. <{/if}>
  22. <{/if}>



显示的效果是:
=700) window.open('http://speedphp.com/wp/wp-content/uploads/thepager1.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >
这里详细说明一下,首先我们是判断是否存在分页数据,在数据记录数小于页面大小的时候,分页数据将不显示。
复制代码
  1. <{if $pager}>

然后来显示了一些分页的数据:
复制代码
  1. 共有留言<{$pager.total_count}>条,共有<{$pager.total_page}>页(每页<{$pager.page_size}>条留言):

接着使用了判断是否是第一页,是就不会显示“前页”和“上一页”
=700) window.open('http://speedphp.com/wp/wp-content/uploads/thepager2.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >
然后是循环显示页码

复制代码
  1. <{foreach from=$pager.all_pages item=thepage}>
  2. &#160;&#160;&#160;&#160;<{if $thepage != $pager.current_page}>
  3. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="<{spUrl c=main a=index page=$thepage}>"><{$thepage}></a>
  4. &#160;&#160;&#160;&#160;<{else}>
  5. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<b><{$thepage}></b>
  6. &#160;&#160;&#160;&#160;<{/if}>
  7. <{/foreach}>



请注意这里的spUrl的写法,<{spUrl c=main a=index page=$thepage}> 最后的page是输入到程序中的页码,它将被程序中的$this->spArgs('page', 1)获取。
最后是判断当前是否最后一页,不是的话,将显示“下一页”和“后页”
=700) window.open('http://speedphp.com/wp/wp-content/uploads/thepager3.jpg');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >
这里我们看到了SpeedPHP的spPager分页程序的使用方法。在实际应用中,因为页面数据是经常会将这些smarty的显示作为标准的格式,在许多地方都能够重复地使用,极大提供开发效率。
本文地址:http://speedphp.com/post/speedphp-pager.html
[ 此帖被jake在2009-12-29 23:44重新编辑 ]

作者: jake   发布时间: 2009-12-29

热门下载

更多