[备忘]一个常用分页类(0 位领导批示)

工作经常会用到的一个分页类..记录一下.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
/**
Example: 
 
$page = (isset($this->params['named']['page'])) ? $this->params['named']['page'] : 1;
// 导入分页类
App::import('Vendor', 'page_class');
// 获取公告总数
$total = $this->Bulletin->getBulletinTotal();
$perpage = ITEMPREPAGE;
$offset = $perpage * ($page - 1);
$pagebar = new Pagebar($total, $page, $offset, $perpage);
$pagenav = $pagebar->construct_page_nav($total, $page, SYSTEMURL . '/bulletins/index', null, null);
*/
 
<?php
class Pagebar
{
 
    var $perpage = 20;
	/**
	* Ensures that the variables for a multi-page display are sane
	*
	* @param	integer	Total number of items to be displayed
	* @param	integer	(ref) Current page number
	* @param	integer	(ref) Desired number of results to show per-page
	*/
	function Pagebar($numresults, &$page, &$limitlower, $perpage)
	{
		$this->perpage = $perpage;
 
		$numpages = ceil($numresults / $this->perpage);
		if ($numpages == 0)
		{
			$numpages = 1;
		}
 
		if ($page < 1)
		{
			$page = 1;
		}
		else if ($page > $numpages)
		{
			$page = $numpages;
		}
 
		$limitlower = ($page - 1) * $this->perpage;
		$limitupper = ($page) * $this->perpage;
 
		if ($limitupper > $numresults)
		{
			$limitupper = $numresults;
			if ($limitlower > $numresults)
			{
				$limitlower = ($numresults - $this->perpage) - 1;
			}
		}
		if ($limitlower < 0)
		{
			$limitlower = 0;
		}
	}
 
	/**
	* Returns the HTML for multi-page navigation
	*
	* @param	integer	Total number of items found
	* @param	integer	Page number being displayed
	* @param	string	Base address for links eg: q.php?t=99{&page=4}
	* @param	string	Ending portion of address for links
	*
	* @return	string	Page navigation HTML
	*/
	function construct_page_nav($results, $pagenumber, $address, $address2 = '', $option = array())
	{
		$perpage = $this->perpage;
 
		$show = array();
		$curpage = 0;
		$pagenav = '';
		$firstlink = '';
		$prevlink = '';
		$lastlink = '';
		$nextlink = '';
 
		if ($results <= $perpage)
		{
			$show['pagenav'] = false;
			return '';
		}
 
		$show['pagenav'] = true;
 
		$total = number_format($results);
		$totalpages = ceil($results / $perpage);
 
		$show['prev'] = false;
		$show['next'] = false;
		$show['first'] = false;
		$show['last'] = false;
 
		if ($pagenumber > 1)
		{
			$prevpage = $pagenumber - 1;
			$prevnumbers = $this->fetch_start_end_total_array($prevpage, $perpage, $results);
			$show['prev'] = true;
		}
		if ($pagenumber < $totalpages)
		{
			$nextpage = $pagenumber + 1;
			$nextnumbers = $this->fetch_start_end_total_array($nextpage, $perpage, $results);
			$show['next'] = true;
		}
 
		// create array of possible relative links that we might have (eg. +10, +20, +50, etc.)
		$pagenavsarr = array(10, 50, 100, 500, 1000);
 
		$pagenavpages = 5;
 
		while ($curpage++ < $totalpages)
		{
			if (abs($curpage - $pagenumber) >= $pagenavpages AND $pagenavpages != 0)
			{
				if ($curpage == 1)
				{
					$firstnumbers = $this->fetch_start_end_total_array(1, $perpage, $results);
					$show['first'] = true;
				}
				if ($curpage == $totalpages)
				{
					$lastnumbers = $this->fetch_start_end_total_array($totalpages, $perpage, $results);
					$show['last'] = true;
				}
				// generate relative links (eg. +10,etc).
				if (in_array(abs($curpage - $pagenumber), $pagenavsarr) AND $curpage != 1 AND $curpage != $totalpages)
				{
					$pagenumbers = $this->fetch_start_end_total_array($curpage, $perpage, $results);
					$relpage = $curpage - $pagenumber;
 
					if ($relpage > 0)
					{
						$relpage = '+' . $relpage;
					}
 
					$pagenav .= "<a onclick=\"$option[onclick]\" class=\"smallfont\" href=\"$address". "/page:$curpage". ($address2 ? '?'.$address2 : '') . "\" title=\"显示结果从 $pagenumbers[first]$pagenumbers[last] 共计 $total\"><!--$relpage--> $curpage </a>";
				}
			}
			else
			{
				if ($curpage == $pagenumber)
				{
					$numbers = $this->fetch_start_end_total_array($curpage, $perpage, $results);
					$pagenav .= "	<span class=\"smallfont\" title=\"显示结果从 $numbers[first]$numbers[last] 共计 $total\"><strong> $curpage </strong></span>";
				}
				else
				{
					$pagenumbers = $this->fetch_start_end_total_array($curpage, $perpage, $results);
					$pagenav .= "<a onclick=\"$option[onclick]\" class=\"smallfont\" href=\"$address". "/page:$curpage". (($address2) ? '?'.$address2 : '') . "\" title=\"显示结果从 $pagenumbers[first]$pagenumbers[last] 共计 $total\"> $curpage </a>";
				}
			}
		}
        $pagenav = "
                <span class=\"disabled\">
                ".(($show['prev']) ? ("<a onclick=\"$option[onclick]\" class=\"smallfont\" href=\"$address".("/page:$prevpage".($address2 ? '?'.$address2 : ''))."\" title=\"上一页 - 结果从 $prevnumbers[first]$prevnumbers[last] 共计 $total\">上一页</a></span>") : ("上一页</span>"))."
 
                $pagenav
 
                ".(($show['next']) ? ("<span><a onclick=\"$option[onclick]\" class=\"smallfont\" href=\"$address/page:$nextpage".($address2 ? '?'.$address2 : '')."\" title=\"下一页 - 结果从 $nextnumbers[first]$nextnumbers[last] 共计 $total\">下一页</a></span>") : ("<span>下一页</span>"))."
 
				<span>第 $pagenumber / $totalpages 页,共 <strong>$total</strong>条记录</span>";
		return $pagenav;
	}
	/**
	* Returns an array so you can print 'Showing results $arr[first] to $arr[last] of $totalresults'
	*
	* @param	integer	Current page number
	* @param	integer	Results to show per-page
	* @param	integer	Total results found
	*
	* @return	array	In the format of - array('first' => x, 'last' => y)
	*/
	function fetch_start_end_total_array($pagenumber, $perpage, $total)
	{
		$first = $perpage * ($pagenumber - 1);
		$last = $first + $perpage;
 
		if ($last > $total)
		{
			$last = $total;
		}
		$first++;
 
		return array('first' => number_format($first), 'last' => number_format($last));
	}
}
?>

相关文章

分享到新浪微博 推荐到豆瓣 分享到 Google Reader 加入Google书签 嘀咕一下 分享到饭否 分享到做啥 分享到叽歪 分享到鲜果 加入QQ书签 加入百度搜藏 加入雅虎书签 分享到垦一垦

银子曰:还没有领导题词?

请领导指示

验证码 (必须)

Additional comments powered by BackType

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志