- <?php
- /**
- * 可以灵活定制的分页类
- *
- * 可以定制的选项包括,分页链接显示效果,当前页码链接按钮的样式,URL中获取分页值的名字,可以随意带自己的参数
- *
- * 使用方法:
- * 1、初始化类的时候需要传入参数,类型为数组。
- * array(
- * (必填)'totalRows'=>'100', 需要显示的数据的总条数;
- * (必填)'pageSize'=>'2', 每页需要显示的代码数量;
- * (必填)'currentPage'=>$_GET['p'], 当前页码,默认可以通过$_GET['p']获取,其中名字p可以定制
- * (必填)'baseUrl'=>'/welcome?id=3',你当前页面的链接地址,比如为http://www.xxx.com/test.php(或者/test.php),如果后面带有参数则可以为http://www.xxx.com/test?id=8
- * (选填,默认为3)'offset'=>'3', 当前页码的左右偏移量,比如当前页码为5,则在5的左右各显示几个数字链接,默认为3个,则效果为2,3,4,5,6,7,8
- * (选填,默认为p)'pageString'=>'p',通过$_GET['p']获取当前页码时候的名字,默认为p
- * (选填,默认为here)'className'=>'here',当前页码链接按钮的样式,默认样式名为here,所以你可以这样写CSS样式.here{background:#FF4500;} )
- *
- * 2、可以使用的方法。
- * A、初始化类后,需要调用pagination([$style = '1'][,$output=TRUE])方法产生分页链接
- * 关于参数的说明:
- * @param $style (默认为 1,可不填写) :获取链接全部组件,即 首页+上一页+数字链接+下一页+尾页
- * @param $style == 2 :仅获取数字链接
- * @param $style == 3 :仅获取上一页+下一页
- * @param $style == 4 :仅获取上一页+数字链接+下一页,(不包含首尾页)
- *
- * @param $output (默认为TRUE),返回分页链接
- * @param $output 为FALSE时,直接输出分页链接
- *
- * B、getCurrentPage()获取当前页码,经过真伪判断后的,防止用户自行输入错误,比如http://www.xxx.com/test?p=-100;此时通过此方法获取当前页码为1
- *
- * C、pageAmount()获取总的页码数量
- *
- */
- class Page
- {
- private $pageSize; //您的网站每一页显示的列表条数
- private $totalRows; //通过数据库查询返回的总的记录条数
- private $url; //基准URL
- private $pageAmount; //页码的总数
- private $currentPage; //当前的页码
- private $offset = 4; //页码偏移量
- private $pageString = 'p'; //页码在URL中的名字
- private $classHere = 'class="here"'; //当前页链接的class样式类名,默认为here
- //初始化当前页码,记录总条数,每页多少条记录
- public function __construct($param)
- {
- $this->pageSize = $param['pageSize'];
- $this->totalRows = $param['totalRows'];
- $this->url = $param['baseUrl'];
- $this->offset = !empty($param['offset'])?$param['offset']:$this->offset;
- $this->pageString = !empty($param['pageString'])?$param['pageString']:$this->pageString;
- $this->classHere = !empty($param['className'])?$param['className']:$this->classHere;
- $this->currentPage = (int)$param['currentPage'];
- }
- /**
- * 创建分页链接
- *
- * @param $style 默认为 1 :获取链接全部组件
- * @param $style == 2 :仅获取数字链接
- * @param $style == 3 :仅获取上一页,下一页
- * @param $style == 4 :仅获取上一页、下一页、数字链接,不包含首尾页
- *
- * @param $output 为TRUE时,返回分页链接
- * @param $output 为FALSE时,直接输出分页链接
- *
- */
- public function pagination($style = '1',$output=TRUE)
- {
- $this->baseUrl();
- $this->pageAmount();
- $this->currentPage();
- //获取全部组件
- if($style == '1')
- {
- $page = $this->indexPage().$this->prevPage().$this->pageNumber().$this->nextPage().$this->endPage();
- }
- else if($style == '2')
- {
- //获取纯数字链接
- $page = $this->pageNumber();
- }
- else if($style == '3')
- {
- //只获取上一页下一页
- $page = $this->prevPage().$this->nextPage();
- }
- else if($style =='4')
- {
- //上一页、下一页、数字链接
- $page = $this->prevPage().$this->pageNumber().$this->nextPage();
- }
- if($output)
- {
- return $page;
- }
- else
- {
- echo $page;
- }
- }
- /**
- * 获取当前页码
- *
- * @return 当前页码,经过真伪判断的
- */
- public function getCurrentPage()
- {
- $this->pageAmount();
- $this->currentPage();
- return $this->currentPage;
- }
- /**
- * 计算出所有的页数
- *
- * 可以类外面直接调用此方法返回页码总数
- *
- * @return 页码的总数
- */
- public function pageAmount()
- {
- return $this->pageAmount = ceil( $this->totalRows / $this->pageSize);
- }
- /**
- * 判断基准链接是否携带参数
- *
- * 基准链接为用户提交当前页码链接
- *
- * 如果携带参数,则在链接之后加&p=
- *
- * 如果不携带参数,则直接加?p=
- */
- private function baseUrl()
- {
- if(preg_match('/\\?/', $this->url))
- {
- $this->url = $this->url.'&'.$this->pageString.'=';
- }
- else
- {
- $this->url = $this->url.'?'.$this->pageString.'=';
- }
- }
- /**
- * 验证当前页码的真伪性
- *
- * 如果当前页码小于1或者没有,则默认当前页码为1
- *
- * 如果当前页码大于页码总数,则默认当前页码为页码总数
- *
- */
- private function currentPage()
- {
- if($this->currentPage < 1 || !$this->currentPage)
- {
- $this->currentPage = 1;
- }
- else if($this->currentPage > $this->pageAmount)
- {
- $this->currentPage = $this->pageAmount;
- }
- }
- /**
- * 首页链接
- */
- private function indexPage()
- {
- if($this->currentPage == 1) return;
- return '<a >
- li {
- width: 100%;
- overflow: hidden;
- margin-top: 20px;
- list-style: none;
- }
- a {
- display: block;
- height: 30px;
- min-width: 30px;
- text-align: center;
- font-size: 14px;
- border: 1px solid #d6d6d6;
- float: left;
- margin-left: 10px;
- padding: 3px 5px;
- line-height: 30px;
- text-decoration: none;
- color: #666;
- }
- a:hover, a.here {
- background: #FF4500;
- border-color: #FF4500;
- color: #FFF;
- }
- </style>
- </head>
- <body>
- <?php
- require_once('/page.php');
- $param = array('totalRows'=>'100','pageSize'=>'2','currentPage'=>@$_GET['p'],'baseUrl'=>'/page_index.php?id="3'");
- $page1 = new Page($param);
- $page2 = new Page($param);
- $page3 = new Page($param);
- $page4 = new Page($param);
- $page5 = new Page($param);
- echo '总记录数:100';
- echo '<hr />';
- echo '每页记录2条<hr/ >';
- echo '当前页码:'.$page1->getCurrentPage().'<hr />';
- echo '共计'.$page1->pageAmount().'页<hr />';
- echo '<li>'.$page1->pagination().'</li>';
- echo '<li>'.$page2->pagination('1').'</li>'; //默认为1,所以和不填写效果一样
- echo '<li>'.$page3->pagination('2').'</li>';
- echo '<li>'.$page4->pagination('3').'</li>';
- echo '<li>'.$page5->pagination('4').'</li>';
- ?>
- </body>
- </html>
- //该片段来自于http://www.codesnippet.cn/detail/040520149435.html
来源: http://www.codesnippet.cn/detail/040520149435.html