日志列表

RSS

php 分页类

[ 2009年02月13日 05:49 | by Veidy.lei  ] 没有评论 » | 阅读次数:1171

一个比较好用的PHP分页类

/**
 * 分页类
 *
 * @package pager
 * @author Veidy.lei<veidy .lei@gmail.com>
 * @version $Id: pager.php,v 1.5 2008/03/26 09:26:39 Veidy.lei Exp $
 * @copyright (c) 2008 Veidy.lei Group
 */
 
class pager
{
	var $page_num_per_group = 3;  //页码每组页码数
	var $total_item = 0;  //总记录数
	var $per_page_num = 10;  //每页记录数
	var $first_page_num = 1;  //首页页码数
	var $pre_page_num = 0;  //上页页码数
	var $next_page_num = 0;  //下页页码数
	var $last_page_num = 0;  //尾页页码数
	var $pre_group_page_num = 0;  //上一组的显示页码数
	var $next_group_page_num = 0;  //下一组的显示页码数
	var $cur_group_page = array(); //当前组的页面页码数列表
	var $cur_page = 1;  //当前页码数
	var $cur_group = 0; //当前组
	var $total_group = 0; //总组数
	var $page_num = array();  //所有页码
	var $total_page = 0;  //总页数
	var $cur_item_num = 0;  //当前页记录条数
 
	function pager($total_item = 0, $per_page_num = 10, $page_num_per_group = 3)
	{
		$this-&gt;cur_page = (int)request_var('page', 1); //得到当前页码数
		$this-&gt;per_page_num = ($per_page_num &gt; 0) ? ceil($per_page_num) : 10; //得到每页记录数
		$this-&gt;page_num_per_group = ($page_num_per_group &gt; 0) ? ceil($page_num_per_group) : 3; //得到页码每组页码数
 
		if ($total_item &lt; 1)
		{
			$this-&gt;page_num = false; //即无分页
		}
		else
		{
			$this-&gt;total_item = $total_item;
 
			$this-&gt;total_page = ceil($this-&gt;total_item / $this-&gt;per_page_num); //得到总页数
			$this-&gt;last_page_num = $this-&gt;total_page; //得到尾页页码数
 
			if ($this-&gt;cur_page &lt; 1)
			{
				$this-&gt;cur_page = 1; //得到当前页码数
			}
 
			if ($this-&gt;cur_page &gt; $this-&gt;total_page)
			{
				$this-&gt;cur_page = $this-&gt;total_page; //得到当前页码数
			}
 
			$this-&gt;pre_page_num = ($this-&gt;cur_page &gt; 1) ? $this-&gt;cur_page - 1 : 1; //得到上页页码数
			$this-&gt;next_page_num = ($this-&gt;cur_page &lt; $this-&gt;total_page) ? $this-&gt;cur_page + 1 : $this-&gt;total_page; //得到下页页码数
 
			$this-&gt;total_group = ceil($this-&gt;total_page / $this-&gt;page_num_per_group); //得到总组数
			$this-&gt;cur_group = ceil($this-&gt;cur_page / $this-&gt;page_num_per_group); //得到当前组数
 
			if ($this-&gt;total_group &gt; 1)
			{
				if ($this-&gt;cur_group &gt; 1) //当前组不是第一组
				{
					$this-&gt;pre_group_page_num = ($this-&gt;cur_group - 1) * $this-&gt;page_num_per_group;  //得到上一组的显示页码数
				}
 
				if ($this-&gt;cur_group &lt; $this-&gt;total_group)  //当前组不是最后一组
				{
					$this-&gt;next_group_page_num = ($this-&gt;cur_group * $this-&gt;page_num_per_group) + 1;  //得到下一组的显示页码数
				}
			}
 
			$this-&gt;cur_group_page[0] = (($this-&gt;cur_group - 1) * $this-&gt;page_num_per_group) + 1; //当前组第一页
			for ($i = 1; $i &lt; $this-&gt;page_num_per_group; $i++)
			{
				if ($this-&gt;cur_group_page[0] &lt;= ($this-&gt;total_page - $i))
				{
					$this-&gt;cur_group_page[$i] = $this-&gt;cur_group_page[0] + $i; //当前组其它页
				}
			}
 
			if ($this-&gt;cur_page == $this-&gt;total_page)
			{
				$this-&gt;cur_item_num = $this-&gt;total_item - (($this-&gt;total_page -1) * $this-&gt;per_page_num);
			}
			else
			{
				$this-&gt;cur_item_num = $this-&gt;per_page_num;
			}
 
			$this-&gt;page_num = array();
			$this-&gt;page_num['total_item'] = $this-&gt;total_item;
			$this-&gt;page_num['page_num_per_group'] = $this-&gt;page_num_per_group;
			$this-&gt;page_num['per_page_num'] = $this-&gt;per_page_num;
			$this-&gt;page_num['first_page_num'] = $this-&gt;first_page_num;
			$this-&gt;page_num['pre_page_num'] = $this-&gt;pre_page_num;
			$this-&gt;page_num['next_page_num'] = $this-&gt;next_page_num;
			$this-&gt;page_num['last_page_num'] = $this-&gt;last_page_num;
			$this-&gt;page_num['pre_group_page_num'] = $this-&gt;pre_group_page_num;
			$this-&gt;page_num['next_group_page_num'] = $this-&gt;next_group_page_num;
			$this-&gt;page_num['cur_group_page'] = $this-&gt;cur_group_page;
			$this-&gt;page_num['cur_page'] = $this-&gt;cur_page;
			$this-&gt;page_num['cur_group'] = $this-&gt;cur_group;
			$this-&gt;page_num['total_group'] = $this-&gt;total_group;
			$this-&gt;page_num['total_page'] = $this-&gt;total_page;
			$this-&gt;page_num['cur_item_num'] = $this-&gt;cur_item_num;
		}
	}
 
	/**
	 * 获取各相关页码数
	 *
	 * @return bool 或 array ,如果是false表示无记录,如果是数组,返回值如下:
	 * 		$this-&gt;page_num['total_item']--------------------------------总记录条数
			$this-&gt;page_num['page_num_per_group']------------------------每组显示的页码数
			$this-&gt;page_num['per_page_num']------------------------------每页显示的记录条数
			$this-&gt;page_num['first_page_num']----------------------------第一页页码
			$this-&gt;page_num['pre_page_num']------------------------------上一页页码
			$this-&gt;page_num['next_page_num']-----------------------------下一页页码
			$this-&gt;page_num['last_page_num']-----------------------------最后一页码
			$this-&gt;page_num['pre_group_page_num']------------------------上一组显示的页码
			$this-&gt;page_num['next_group_page_num']-----------------------下一组显示的页码
			$this-&gt;page_num['cur_group_page']----------------------------当前组的页码列表,是一个数组
			$this-&gt;page_num['cur_page']----------------------------------当前页码
			$this-&gt;page_num['cur_group']---------------------------------当前组
			$this-&gt;page_num['total_group']-------------------------------总组数
			$this-&gt;page_num['total_page']--------------------------------总页数
			$this-&gt;page_num['cur_item_num']------------------------------当前页的记录条数
	 */
	function get_page_num()
	{
		return $this-&gt;page_num;
	}
 
	function get_cur_page()
	{
		return $this-&gt;cur_page;
	}
}
 
class pager_str extends pager
{
	//设定
	var $total_item_str = "  共%s条 "; //共多少条,如果为空表示不要此项
	var $cur_item_str = "当前页%s条 "; //当前页多少条,如果为空表示不要此项
	var $tj_cur_page_str = "%s/"; //统计段当前页码,如果为空表示不要此项
	var $total_page_str = "%s页 "; //总页数,如果为空表示不要此项
 
	var $first_page_str = "<a class="text_link_class" href="%s">首页</a> "; //第一页,如果为空表示不要此项
	var $first_page_str2 = "首页 "; //第一页,没有链接的情况,如果为空表示不要此项
	var $pre_page_str = "<a class="text_link_class" href="%s">上页</a> "; //上一页,如果为空表示不要此项
	var $pre_page_str2 = "上页 "; //上一页,没有链接的情况,如果为空表示不要此项
	var $next_page_str = " <a class="text_link_class" href="%s">下页</a> "; //下一页,如果为空表示不要此项
	var $next_page_str2 = " 下页 "; //下一页,没有链接的情况,如果为空表示不要此项
	var $last_page_str = "<a class="text_link_class" href="%s">尾页</a> "; //最后一页,如果为空表示不要此项
	var $last_page_str2 = "尾页 "; //最后一页,没有链接的情况,如果为空表示不要此项
 
	var $go_text_str = "
<input name="page" size="3" type="text" value="%s" /> "; //跳转框,如果为空表示不要跳转
	var $go_submit_str = "
<input name="go" type="submit" value="GO" />  "; //跳转按钮
 
	var $group_split_str = ' ... '; //分页组的分割符,如果为空表示不用显示页数
	var $page_split_str = ' '; //页码之间的分割符
	var $cur_page_str = "<span class="cur_page_class">%s</span>"; //当前页页码
	var $not_cur_page_str = "<a class="num_link_class" href="%s">%s</a>"; //非当前页页码
 
	var $url_start = ''; //网址头
	var $url_end = ''; //网址尾
 
	var $style_table = 'border="0" cellpadding="0" cellspacing="0" style="border:0px;"'; //表格样式
	var $style_td = 'align="left" style="border-bottom:0px; border-top:0px;"'; //单元格样式
 
	var $page_str = ''; //将要输出的分页内容
 
	function pager_str($options = array())
	{
		global $mod, $do;
 
		foreach ( $options as $k=&gt;$v )
		{
			$this-&gt;$k = $v;
		}
 
		/*
		if ($this-&gt;url_start == '')
		{
		$this-&gt;url_start = '/' . $mod . '/';
		}
 
		if (substr($this-&gt;url_start, -1) != '/') //在最后加上'/'
		{
		$this-&gt;url_start .= '/';
		}
 
		if ($this-&gt;url_end == '')
		{
		$this-&gt;url_end = $do . '.html';
		}
 
		if (substr($this-&gt;url_end, 0, 1) == '/') //去掉开头的'/'
		{
		$this-&gt;url_end = substr($this-&gt;url_end, 0, -1);
		}
		*/
 
		//$this-&gt;url_start = '/' . $mod . '/;
		$this-&gt;url_start = '?';
		$url_arr = array();
		if (isset($_POST) &amp;&amp; sizeof($_POST) &amp;&amp; isset($_GET) &amp;&amp; sizeof($_GET))
		{
			$url_arr = array_merge($_POST, $_GET);
		}
		else if (isset($_POST) &amp;&amp; sizeof($_POST))
		{
			$url_arr = $_POST;
		}
		else if (isset($_GET) &amp;&amp; sizeof($_GET))
		{
			$url_arr = $_GET;
		}
 
		if (sizeof($url_arr))
		{
			foreach ($url_arr as $k =&gt; $v)
			{
				if ($k != 'page' &amp;&amp; $k != 'go' &amp;&amp; $k != 'mod' &amp;&amp; $k != 'do')
				{
					if ($k == 'key') {
						$this-&gt;url_start .= trim($k) . '=' . replace_str_for_url($v) . '&amp;';
					}
					else {
						$this-&gt;url_start .= trim($k) . '=' . $v . '&amp;';
					}
				}
			}
		}
 
		$this-&gt;pager($this-&gt;total_item, $this-&gt;per_page_num, $this-&gt;page_num_per_group);
 
		if ($this-&gt;page_num)
		{
			$this-&gt;page_str = '
<table border="0">style_table . '&gt;';
			$this-&gt;page_str .= ($this-&gt;go_text_str != '') ? '
<form id="page_go" action="' . $this-&gt;url_start . $this-&gt;url_end . '" enctype="application/x-www-form-urlencoded" method="post">' : '';
			$this-&gt;page_str .= '
</form>
<tbody>
<tr>
<td>style_td . '&gt;'; $this-&gt;page_str .= ($this-&gt;total_item_str != '') ? sprintf($this-&gt;total_item_str, $this-&gt;total_item) : ''; $this-&gt;page_str .= ($this-&gt;cur_item_str != '') ? sprintf($this-&gt;cur_item_str, $this-&gt;cur_item_num) : ''; $this-&gt;page_str .= ($this-&gt;tj_cur_page_str != '') ? sprintf($this-&gt;tj_cur_page_str, $this-&gt;cur_page) : ''; $this-&gt;page_str .= ($this-&gt;total_page_str != '') ? sprintf($this-&gt;total_page_str, $this-&gt;total_page) : ''; if ($this-&gt;cur_page == 1) { $this-&gt;page_str .= $this-&gt;first_page_str2 . $this-&gt;pre_page_str2; } else { $this-&gt;page_str .= ($this-&gt;first_page_str != '') ? sprintf($this-&gt;first_page_str, $this-&gt;url_start . 'page=' . $this-&gt;first_page_num) : ''; $this-&gt;page_str .= ($this-&gt;pre_page_str != '') ? sprintf($this-&gt;pre_page_str, $this-&gt;url_start . 'page=' . $this-&gt;pre_page_num) : ''; } if ($this-&gt;group_split_str != '') { if ($this-&gt;pre_group_page_num) { $this-&gt;page_str .= ($this-&gt;not_cur_page_str != '') ? sprintf($this-&gt;not_cur_page_str, $this-&gt;url_start . 'page=' . $this-&gt;pre_group_page_num, $this-&gt;pre_group_page_num) . $this-&gt;group_split_str : ''; } foreach ($this-&gt;cur_group_page as $k =&gt; $v) { if ($this-&gt;cur_page == $v) { $this-&gt;page_str .= ($this-&gt;cur_page_str != '') ? sprintf($this-&gt;cur_page_str, $v) : ''; } else { $this-&gt;page_str .= ($this-&gt;not_cur_page_str != '') ? sprintf($this-&gt;not_cur_page_str, $this-&gt;url_start . 'page=' . $v, $v) : ''; } $this-&gt;page_str .= $this-&gt;page_split_str; } if ($this-&gt;next_group_page_num) { $this-&gt;page_str .= ($this-&gt;not_cur_page_str != '') ? $this-&gt;group_split_str . sprintf($this-&gt;not_cur_page_str, $this-&gt;url_start . 'page=' . $this-&gt;next_group_page_num, $this-&gt;next_group_page_num) : ''; } } if ($this-&gt;cur_page == $this-&gt;total_page) { $this-&gt;page_str .= $this-&gt;next_page_str2 . $this-&gt;last_page_str2; } else { $this-&gt;page_str .= ($this-&gt;next_page_str != '') ? sprintf($this-&gt;next_page_str, $this-&gt;url_start . 'page=' . $this-&gt;next_page_num) : ''; $this-&gt;page_str .= ($this-&gt;last_page_str != '') ? sprintf($this-&gt;last_page_str, $this-&gt;url_start . 'page=' . $this-&gt;last_page_num) : ''; } if ($this-&gt;go_text_str != '') { $this-&gt;page_str .= sprintf($this-&gt;go_text_str, $this-&gt;cur_page) . $this-&gt;go_submit_str; } $this-&gt;page_str .= '</td>
</tr>
';
			$this-&gt;page_str .= ($this-&gt;go_text_str != '') ? '</tbody>
' : '';
			$this-&gt;page_str .= '</table>
';
		}
		else
		{
			$this-&gt;page_str = '';
		}
	}
 
	function get_page_str()
	{
		return $this-&gt;page_str;
	}
}</veidy>
Filed under: php | Tags : ,
分页 1 / 11