PHP学习实例—6(完美分页类)

来源:互联网 发布:js水泥防水涂料 编辑:程序博客网 时间:2024/06/10 18:28

  主要是实现了分页类的一些css特效,前面照着网上写的分页类,但是效果一直不怎么好,今天花了点时间去修饰了下,不过感觉上还是比较水。。。

分页类 page.class.php

<html><head>  <style>   #contains1 {    width: 850px;    margin: 5px auto;    }   #contains12 {    margin: 5px auto;     width: 410px;     float: left;        }    #contains123 {     width: 440px;     margin: 5px auto;      float: left;    }.special {display: block;float: left;text-align: center;margin-left: 10px;width: 30px;border: 1px solid black;margin-left: 2px;text-align: center;text-decoration: none;} .special:hover {background: #0F6;}#a2 { width: 30px;background: #0F0;margin-left: 2px;text-align: center;text-decoration: none;background: #CF0;}</style></head><?phpclass Page {  private $total; //记录总数private $listRows; //每页显示行数private $limit; //限定条件private $uri;  //获取地址private $pageNum; //最多能分几页private $config = array("header"=>"记录", "prev"=>"<<", "next"=>">>", 'first'=>"首页", "last"=>"尾页");private $listNum = 6; //数字衔接public function __construct($total, $listRows = 10) { //构造函数  $this->total = $total;$this->listRows = $listRows; $this->uri = $this->getUri();$this->page = !empty($_GET["page"])?$_GET["page"]:1; //当不能取到page值的时候就为首页1 否则为当前page值  $this->pageNum = ceil($this->total/$this->listRows);$this->limit = $this->setLimit();//var_dump($this);}private function setLimit() {return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}"; //当前页数减一乘以每页显示的数目}private function getUri() { //如何获取uri$url = $_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?"); //在后面加了一个问号//获取地址栏上的地址 如果传了page则 不改变 如果没有则需要加个?方便传值$parse = parse_url($url);//将地址栏分成两部分//print_r($parse);if (isset($parse["query"])) { //当存在传值的page的情况  parse_str($parse['query'],$params);unset($params["page"]);//先删除//print_r($params)  $url = $parse['path'].'?'.http_build_query($params);}return $url;}private function __get($args) {if ($args == 'limit')  return $this->limit;else   return null;}private function start() {  if ($this->total == 0) return 0;else return ($this->page - 1) * $this->listRows + 1;}private function end() {  return min($this->page*$this->listRows, $this->total);}private function first() {if ($this->page == 1) $html .= '';else $html .= "  <a class='special' href='{$this->uri}&page=1'>{$this->config["first"]}</a>  ";return $html;}private function prev() {if ($this->page == 1) {$this->page == 1;  $html .= "  <a class='special' href='{$this->uri}&page=".($this->page)."'>{$this->config["prev"]}</a>  ";}else $html .= "  <a class='special' href='{$this->uri}&page=".($this->page - 1)."'>{$this->config["prev"]}</a>  ";return $html;}private function pageList() {$linkPage = "";$inum = floor($this->listNum / 2);for ($i = $inum; $i >= 1; $i--) {  $page = $this->page - $i;if ($page < 1) continue;$linkPage .= " <a class='special' href='{$this->uri}&page={$page}'>{$page}</a> ";}$linkPage .= " <a class='special' id='a2'>{$this->page}</a> ";for ($i = 1; $i < $inum; $i++) {  $page = $this->page + $i;if ($page <= $this->pageNum)  $linkPage .= " <a class='special' href='{$this->uri}&page={$page}'>{$page}</a> ";else   break;}//$linkPage .= '</div>';return $linkPage;}private function next() {if ($this->page == $this->pageNum) {$this->page = $this->pageNum;  $html .= "  <a class='special' href='{$this->uri}&page=".($this->page)."'>{$this->config["next"]}</a>  ";}else $html .= "  <a class='special' href='{$this->uri}&page=".($this->page + 1)."'>{$this->config["next"]}</a>  ";return $html;}private function last() {if ($this->page == $this->pageNum) $html .= '';else $html .= "  <a class='special' href='{$this->uri}&page=$this->pageNum'>{$this->config["last"]}</a>  ";return $html;}function fpage() {$html .= "<div id='contains1'>";$html .="<div id='contains12'>";  $html .= "  <a>共有<b>{$this->total}</b>{$this->config['header']}</a>  ";$html .= "  <a>本页显示<b>".($this->end() - $this->start()+1)."</b>条,本页<b>{$this->start()}-{$this->end()}</b></a>  ";$html .= "  <a><b>{$this->page}/{$this->pageNum}</b>页</a>  ";$html .= '</div>';//  $html .= $this->first();    $html .= "<div id='contains123'>";$html .= $this->prev();$html .= $this->pageList();$html .= $this->next();//$html .= $this->last();$html .= "</div>";$html .= "</div>";return $html;}}?></html>
用法: index.php 
<?php  //导入配置文件    require("dbconfig.php");  //链接数据库,选择数据库    $link = mysql_connect(HOST, USER, PASS) or die(数据库连接失败);    mysql_select_db(DBNAME, $link);  //分页显示内容====================================  $sql = "select * from news";  $result = mysql_query($sql);  $total = mysql_num_rows($result); //获取总行数  $num = 5;  $page = new Page($total, $num);  $sql = "select * from news {$page->limit}"; //计算分页的内容是从几到几  $result = mysql_query($sql);  echo $page->fPage();    while ($row = mysql_fetch_assoc($result)) {      echo "<tr>";               echo "<td>{$row['title']}</td>";        echo "<td>{$row['keywords']}</td>";        echo "<td>{$row['author']}</td>";        echo "<td>".date("Y-m-d", $row['addtime'])."</td>";        echo "<td>{$row['content']}</td>";        echo "<td>               <a href = 'javascript:del({$row['id']})'>删除</a>                <a href = 'javascript:update({$row['id']})'>修改</td>";       echo "</tr>";    }

代码不全,大概就是这样,写好了类,然后再用的话感觉特别方便。。不过这个分页类的css属性用的时候还是要自己去修改下,不然可能会出现点问题。。。类里面的显示首页,尾页也可以加上去。不过加了就要在改下属性了。。修改样式的时候记得把面的空格去掉,不然会影响样式。。




0 0
原创粉丝点击