龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

一个简单、纯洁的PHP分页类

时间:2014-07-22 14:51来源: 作者: 点击:
分享到:
b我的博客,欢迎猛击:/b a href=http://levi.cg.am/http://levi.cg.am//a bbr / br / 他的特点:/b br / ol li单纯,接受参数,给出分页;/li li灵活:br / 可以自己决定,上、下一页的名称(比如我想叫pr
我的博客,欢迎猛击: http://levi.cg.am/

他的特点:

  1. 单纯,接受参数,给出分页;
  2. 灵活:
    可以自己决定,上、下一页的名称(比如我想叫prev、next诸如此类)
    可以决定每页展示的分页数量,跨页数
  3. 提供一个包装方法,适应不同的网页结构,
    比如有的网页我需要每个分页包含一个li(<li><a>1</a></li>...),依次类推

备注说明:提供的示范代码中有两个静态方法大家可以不必理会。这个是自己项目开发用的。
  • Call::import,大家可以使用include代替
  • URL::refresh,这是地址操作类,这里暂时不做说明,以后有机会再放上来,大家可以用这个页面的方法getUrl()
    http://www.oschina.net/code/snippet_182375_6242




<?php
/**
 * FILE_NAME : Pages.php   FILE_PATH : /lv/view/
 * 分页类
 *
 * @copyright Copyright (c) 2006-2010 mailTo:levi@cgfeel.com
 * @author Levi 
 * @package	lv.view.Pages
 * @subpackage
 * @version 2011-10-03
 */
Call::import('lv.url.URL');

class Pages
{
	public $num = 1;
	public $size = 50;
	public $current = 1;
	
	private $_pages = array();
	private $_title = array();
	
	public function __construct($count, $size = 50)
	{
		$this->num = ceil($count / $size);
		$size > 0 && $this->size = (Int)$size;
		
		$page = isset($_GET['page']) ? (Int)trim($_GET['page']) : 1;
		$page > 1 && $this->current = (Int)$page;
		
		$this->_title = array('上一页', '1..', $this->num.'..', '下一页');
	}
	
	/**
	 * 包装分页
	 * @param String|Array $skirt
	 * @param Array $entitle
	 * @return String
	 */
	public function warp($skirt, $entitle = array())
	{
		empty($this->_pages) && $this->get();
		
		$entitle += $this->_title;
		$skirt = (Array)$skirt + array('', NULL);
		$data = implode($skirt[1].$skirt[0], $this->_pages);
		!is_null($skirt[1]) && $data = $skirt[0].$data.$skirt[1];
		
		return vsprintf($data, $entitle);
	}
	
	/**
	 * 获取分页
	 * @param Int $num	展示分页数
	 * @param Int $span	分页间隔
	 */
	public function get($num = '5', $span = '2')
	{
		$this->_pages = array();
		$start = $this->current - $num + $span;
		$start < 1 && $start = 1;
		
		$end = $start + $num;
		$end > $this->num && $end = (Int)$this->num;
		
		$this->current > 1 && $this->_pages[] = $this->_setPage($this->current - 1, '%1$s');
		$start > 1 && $this->_pages[] = $this->_setPage(NULL, '%2$s');
		for($i = $start; $i <= $end; $i++) $this->_pages[] = $this->_setPage($i, $i);
		
		$end < $this->num && $this->_pages[] = $this->_setPage($this->num, '%3$s');
		$this->current < $this->num && $this->_pages[] = $this->_setPage($this->current + 1, '%4$s');
		
		return (Array)$this->_pages;
	}
	
	private function _setPage($page, $name = '%s')
	{
		$hover = $page == $this->current ? ' class="pageHover"' : '';
		return sprintf('<a href="%s"%s>%s</a>', URL::refresh(array('page' => $page)), $hover, $name);
	}
}
?>

2. [代码]使用示范     跳至 [1] [2] [全屏预览]

$pages = new Pages(100, 20);
$pages->warp('|');
精彩图集

赞助商链接