如何分页

以前,经常将分页与DB混在一起,比如以下的PHP代码:

1.<?php
2.$page = get_current_page();
3.$start = $page*$step;
4.$article_list = $db->all('select * from `xxx` limit $start,$step;');
5.$total = $db->get('select count(*) as `total` form `xxx`;');
6.//...pagination...

这样的分页明显是不科学的。

分页应该注意的事项

  • 分页类不应与混淆在一起
  • 分页类不应与界面混淆在一起
  • 分页类应该独立,在任何情况下都可以使用
为了满足以上的三个条件,就设计了一个简单的分页类(只做示例,应用到项目需要优化代码和严格的检查)

分页类

分页类代码

01.class ProbbsPage:
02.def __init__(self, total, per = 10):
03.self.total = total
04.self.per = per
05.self.url = ''
06.self.page = 1
07. 
08.def set_url(self,url):
09.self.url = url
10.return self
11. 
12.def set_page(self,page):
13.self.page = int(page)
14.return self
15. 
16.def show(self):
17.if self.total%self.per == 0:
18.pages = self.total/self.per
19.else:
20.pages = self.total/self.per+1
21.if self.page < 6:
22.limit_s = 1
23.else:
24.limit_s = self.page
25. 
26.if pages < (limit_s+10):
27.limit_e = pages
28.else:
29.limit_e = limit_s+10
30. 
31.pagination = '<span>%s/%s pages </span>'%(self.page,pages)
32.for i in range(limit_s,limit_e+1):
33.if i == self.page:
34.pagination += '<a class="cur" href="javascript:void(0);">%s</a>'%(i,)
35.else:
36.pagination += '<a href="%s">%s</a>'%(self.url%i,i)
37. 
38.return pagination

分页类调用示例

1.pagination =ProbbsPage(总页数,每页数)
2.url = 'your_page?page=%s';
3.page_html = pagination.set_url(url).set_page(page).show()
4.print page_html
5.#就可以显示出
6.#<span>当前页/共几页</span>
7.#<a>页页链接</a>

分类页可以优化的地方

set_url可以自动根据url进行提取,前提是使用“?页面参数=第几页”等常用的形成(像我使用专门的不期然形式就不可以了)
set_page同上,可以自动从url中上提取
如果做到以上的两步,就可以直接 ProbbsPage(总页数,每页数).show()就可以了,相对来说比较方便