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

PHP简易分页类

时间:2014-07-22 14:49来源: 作者: 点击:
分享到:
好久没写php了,写个分页类玩玩,明天开始还是搞java的好,php不太适合。调用:
好久没写php了,写个分页类玩玩,明天开始还是搞java的好,php不太适合。

调用:
<?php
	
	class Page{
		private $_page;
		private $_pagesize;
		private $_totalpage;
		private $_totalcount;
		private $_begin;
		private $_end;
		private $_url;
		const size = 5; // 建议设置成奇数

		function __construct($page, $totalcount, $url, $pagesize = 5){
			if(is_int($page) && is_int($totalcount) && is_int($pagesize)){
				$this->_page = $page;
				$this->_totalcount = $totalcount;
				$this->_url = $url;
				$this->_pagesize = $pagesize;	
			} else {
				throw new Exception("构造函数参数不正确~");
			}
		}

		/**
		 * 分页条依赖于bootstrap,格式如下
		 * <div class="pagination pagination-right">
  		 * 		<ul>
		 * 		    <li><a href="#">«</a></li>
		 * 			<li><a href="#">1</a></li>
		 * 			<li><a href="#">»</a></li>
  		 * 		</ul>
		 * </div>
		 */
		function page(){
			$page = '<div class="pagination pagination-centered">';
			$page .= '<ul>';
			$page .= "<li><a href=\"{$this->_getUrl()}page=1\">«</a></li>";
			$b = $this->_page - floor(self::size / 2);
			$e = $this->_page + floor(self::size / 2);
			if($b < 1){
				$b = 1;
				$e = ($this->getTotalPage() < self::size) ? $this->getTotalPage() : self::size;
			}
			if($e > $this->getTotalPage()){
				$b = ($this->getTotalPage() > self::size) ? ($this->getTotalPage() - self::size) : 1;
				$e = $this->getTotalPage();
			}
			for($i = $b; $i <= $e; $i++){
				if($i == $this->_page){
					$page .= '<li class="disabled">';
				} else {
					$page .= '<li>';
				}
				$page .= "<a href=\"{$this->_getUrl()}page={$i}\">{$i}</a>";
				$page .= '</li>';
			}
			$page .= "<li><a href=\"{$this->_getUrl()}page={$this->getTotalPage()}\">»</a></li>";
			$page .= "</ul>";
			$page .= "</div>";
			return $page;
		}

		function limit(){
			return  "limit {$this->getBegin()},{$this->_pagesize}";
		}

		function getBegin(){
			if($this->_page > 0 && $this->_page <= $this->getTotalPage()){
				return ($this->_page - 1) * $this->_pagesize;
			} else {
				throw new Exception("当前页码不正确~");
			}
		}

		// function getEnd(){
		// 	if($this->_page > 0 && $this->_page <= $this->getTotalPage()){
		// 		return ($this->_page == $this->getTotalPage()) ? ($this->_totalcount - $this->getBegin()) : ($this->_page * $this->_pagesize);
		// 	} else {
		// 		throw new Exception("当前页码不正确~");
		// 	}
		// }

		function getTotalPage(){
			if($this->_totalcount > 0){
				return ceil($this->_totalcount / $this->_pagesize) ;
			} else {
				throw new Exception("总记录数不正确~");
			}
		}

		private function _getUrl(){
			$url = $this->_url;
			$arr = explode('?', $this->_url);
			if(count($arr) > 1){
				$url = $url . "&";
			} else {
				$url = $url . "?";
			}
			$url = preg_replace("/&?page=[0-9]+/", "", $url);
			return str_replace("?&", "?", $url);
		}

	}

2. [代码]调用     跳至 [1] [2] [全屏预览]

$currentpage = isset($_GET['page']) ? intval($_GET['page']) : 1;
		$mysqli = new mysqli("localhost", "root", "hjj", "php");

		if(mysqli_connect_errno()){
			echo "数据库连接失败";
			exit();
		}

		$mysqli->set_charset("utf8");

		$sql = "select id from message";
		$result = $mysqli->query($sql);

		$page = new Page($currentpage, $result->num_rows, $_SERVER['REQUEST_URI']);

		$result = $mysqli->query("select * from message {$page->limit()}", MYSQLI_USE_RESULT);
		$arr = array();
		while($row = $result->fetch_assoc()){
			$arr[] = $row;
		}

		$smarty->assign("list", $arr);
		$smarty->assign("pagehtml", $page->page());
		$smarty->assign("page", $currentpage);
		$smarty->display("index.tpl");
		$mysqli->close();
精彩图集

赞助商链接