php之分页类代码

/*
思路
1.把地址栏的URL获取
2.分析URL中的query部分--就是?后面传参数的部分
3.query部分分析成数组
4.把数组中的page单元,+1,-1,形成2个新的数组
5.再把新数组拼接成query部分,合成上一页,下一页连接地址

*/
//分页类
class Page {
	public $total;	//全部条数,从数据库取出
	public $prePage = 10; //每页的条数

	protected $curr= 1;	//默认当前页码

	public function __construct($total,$prePage=‘‘) {
		$this->total = $total; //把总条目信息放在total属性
		if ($prePage > 0) {
			$this->prePage = $prePage;	//把每页数量放在perPage属性
		}

		//计算当前页码
		if (isset($_GET[‘page‘]) && ($_GET[‘page‘] + 0) > 0) {
			$this->curr = $_GET[‘page‘] + 0;
		}
	}

	//主体函数
	public function showPage() {
		if ($this->total <=0) {
			return ‘‘; //如果总条目<=0 直接返回空字符串
		}

		$cnt = ceil($this->total / $this->prePage); //算总页数,进一取整

		//根据当前页,算上一页,下一页
		/*
		分析url,有几种情况?
		xx.php
		xx.php?id=5
		xx.php?page=3
		xx.php?id=5&page=3
		*/

		//最终生成的URL里边必然有page=N
		$url = $_SERVER[‘REQUEST_URI‘];
		$parse = parse_url($url); //把URL分析结果放在数组里
		//print_r($parse);
		//保证参数里边有page
		if (!isset($parse[‘query‘])) {
			$parse[‘query‘] = ‘page=‘ .$this->curr;
		}
		//把query字符串分析成数组,再次确保有page选项
		parse_str($parse[‘query‘],$parms);

		if (!array_key_exists(‘page‘, $parms)) {
			$parms[‘page‘] = $this->curr;
		}

		//上边四种情况都测试一遍,page参数都能生成
		//print_r($parms);

		//判断除了page之外,还有没有其他参数

		if (count($parms) == 1) {
			$url = $parse[‘path‘] . ‘?‘;
		} else {
			unset($parms[‘page‘]);
			$url = $parse[‘path‘] . ‘?‘ . http_build_query($parms) . ‘&‘;
		}

		//echo $url
		$prev = $this->curr - 1;
		$next = $this->curr + 1;

		//首页
		$indexLink = ‘<a href="‘ . $url .‘page=‘ . 1 . ‘">首页</a>‘;

		//上一页
		if ($prev < 1) {
			$prevLink = ‘‘;
		}else {
			$prevLink = ‘<a href="‘ . $url .‘page=‘ . $prev . ‘">上一页</a>‘;
		}

		//下一页
		if ($next > $cnt) {
			$nextLink = ‘‘;
		}else {
			$nextLink = ‘<a href="‘ . $url .‘page=‘ . $next . ‘">下一页</a>‘;
		}
		//尾页
		$lastLink = ‘<a href="‘ . $url .‘page=‘ . $cnt . ‘">尾页</a>‘;

		//echo $indexLink.‘  ‘.$prevLink.‘  ‘.$nextLink .‘  ‘.$lastLink;
		//上一页,1 2 3 4 5 下一页

		$start = $this->curr - (5-1)/2; //计算左侧开始的页码
		$end = $this->curr + (5-1)/2;	//计算右侧开始的页码

		//如果左侧的页面,已经小于1,则把小于1 的部分补到右侧
		if ($start < 1) {
			$end += (1 - $start);
			$start = 1; //修改start = 1

			if ($end > $cnt) {
				$end  = $cnt;
			}
		}

		//把右侧超出的部分,补到左边
		if ($end > $cnt) {
			$start -= ($end - $cnt);
			$end = $cnt;

			if ($start < 1) {
				$start = 1;
			}
		}

		//循环出页码数
		$pageStr = ‘‘;
		for ($i=$start; $i <= $end ; $i++) { 

			if ($i == $this->curr) {
				$pageStr .= $i;
				continue;
			}

			$pageStr .= ‘<a href="‘ . $url . ‘page=‘ . $i . ‘">‘ . $i . ‘</a>‘;
		}
		return $indexLink.$prevLink.$pageStr.$nextLink.$lastLink;
	}

}

$page = new Page(30,3);
echo $page->showPage();

				
时间: 2024-10-01 02:23:40

php之分页类代码的相关文章

PHP分页类代码

今天为大家献上一段代码,这是一段php分页代码: <?php//创建分页类class Page {    private $_all_num;                                                            //数据总个数    private $_page_size;                                                        //每页显示几条数据    private $_page;  

一个简单的php分页类代码(转载)

入门级php分页类 原文地址:http://www.xfcodes.com/php/fenye/3608.htm 时间:2015-12-16 20:52:00来源:网络 php分页类. 复制代码代码如下: <?php/** 快速php分页类***/class Page{    private $totalpage;    private $stride;    private $currentpage;    //设置总页数    function setTotalpage($objpage=1

自定义分页类代码

/** * 分页效果显示 */ function getPagestr($url, $totalNum, $showNum, $page) { $totalPage = ceil($totalNum / $showNum); $page = intval($_GET['p']); $page = ($page < 1)? 1 : $page; $start = ($page - 1) * $showNum; $prev = $page - 1; $prev = max($prev, 1); $n

CI框架分页类代码

model层 public function get_content($start,$num){            $sql   = "SELECT * FROM content limit  $start,$num";//$start=>每一页第一条数据所对应的索引;$num=>对应的每一页固定显示的条数            $query = $this->db->query($sql);            return $query->res

简单易用的分页类实例代码PHP

<?php /*********************************************** * @类名: page * @参数: $myde_total - 总记录数 * $myde_size - 一页显示的记录数 * $myde_page - 当前页 * $myde_url - 获取当前的url * @功能: 分页实现 * @作者: 宋海阁 */ class page { private $myde_total; //总记录数 private $myde_size; //一页

thinkphp简洁、美观、靠谱的分页类

废话不多说先上图预览下:即本博客的分页: 这个分页类是在thinkphp框架内置的分页类的基础上修改而来: 原分页类的一些设计,在实际运用中感觉不是很方便: 1:只有一页内容时不显示分页: 2:原分页类在当前页是第一页和最后一页的时候,不显示第一页和最后一页的按钮: 3:分页数比较少时不显示首页和末页按钮: 4:包裹分页内容的父级div没有class: 针对以上问题逐一进行了修改成如下: 1:如果没有数据不显示分页,如果有一页及以上内容即显示分页: 2:默认就显示第一页和最后一页按钮,但是在当前

自定义MVC框架之工具类-分页类的封装

以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类. 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前都是windows上开发,这次彻底迷上Ubuntu Linux >裸装php,用php自带的服务器解释执行php,缺哪个扩展就装哪个,最后通过整个MVC框架的开发,把Lamp所有的常用配置与细节搞懂 >通过扩展安装,学习扩展开发与php底层源码分析 总之,终于感觉层次又提升了不少. 分页类代码:

Django 自定义分页类

分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypage page_obj = mypage.Page(total_num, current_page, 'publisher_list') publisher_list = data[page_obj.data_start:page_obj.data_end] page_html = page_obj.

转载:分页原理+分页代码+分页类制作

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解. 一.分页原理:       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)?       当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特