调用
echo page::html(array('rows' => $rowCount, 'nums' => 6, 'countsL' => '共', 'countsR' => '条记录', 'timeA' => microtime(1)));
效果
1共259条记录耗时0毫秒
---------------------代码----------------------
<?php
class page {
private static $base = ''; //页码url http://a.c/?
private static $pageL = ''; //url中页码左边 p=L_1_R,不能使用数字 http://test.q/?&page=ddddd5kdfkd
private static $pageR = ''; //url中页码右边拼串 p=L_1_R
private static $rows = 0;//记录数
private static $per = 10; //每页记录数
private static $nums = 3; //当前页按钮二边个数,小于0不显示, 首页 上页 1 2 当页 1 2 中的1 2
private static $i = 0; //当前页码,默认是0,如果设置大于0数字,将优先使用而不理会页面中page参数指定的偏移,建议只有page参数无法$_GET时才使用,如unset了
private static $isOffset = 0; //$page 中的偏移是记录条数,而不是页数
private static $first = '首页';//设置false禁显,字符显示
private static $next = '下页';//同上
private static $prev = '上页';//同上
private static $last = '尾页';//同上
private static $barL = '';//页条左边html <span class="pageBar"> 首页 1 2 3
private static $barR = '';//页条右边html
private static $firstL = '<b class="first">';//首页左边html
private static $firstR = '</b>';//首页右边html
private static $lastL = '<b class="last">';//尾页左边html
private static $lastR = '</b>';//尾页右边html
private static $url = ''; //初始没页码时的url,因为首次并不需要分页
private static $iL = '<i style="i">';//当前页左边html
private static $iR = '</i>';//当前页右边html
private static $nextL = '<b class="next">';//下页左htm
private static $nextR = '</b>';//下页右边htm
private static $prevL = '<b class="prev">';//上页左html
private static $prevR = '</b>';//上页右htm
private static $numL = '<b class="num">';//数字码左htm
private static $numR = '</b>';//数字码右htm
private static $page = 'page';//uri中的页码参数名 page=12344
private static $linkClass = 'link';//页码a的样式类 每个bt会加上后缀如首页是 linkFirst 尾页是 class="linkLast"
private static $click = false; //码a上οnclick="$click(参数1是页码, '参数2是按钮类型首汉字')", 类型:首,上,数,下,尾, href将变成 href="#url" 形态
private static $countsL = '';//总共数据左边html
private static $countsR = '';//总共数据右边html
private static $timeA = 0;//自动计算从$timeA到现在运行耗时毫秒数,需要传入一个 microtime(1);
private static $timeHtml = '耗时<>毫秒';//运行耗时html,需要在html中设置标志位 <> ,会自动把标志位替换成 计算出来的毫秒数
public static function html($params = array()) {//可以传递当前页码,防止无法get获取情况
if (is_array($params) AND !empty($params)) {//自定换内置
foreach ($params as $key => $val) isset(self::${$key}) AND (self::${$key} = $val);
}
if (self::$rows == 0 OR self::$per == 0) return '';//无记录,无偏移
$num_pages = ceil(self::$rows / self::$per);
if ($num_pages == 1) return self::$countsL.self::$rows.self::$countsR;//只一页
$base_page = self::$isOffset ? 0 : 1;//页/记录初始
$output = '';
if (self::$i) $output .= '<!--放弃page参数-->';//人工干扰当前页
else if (isset($_GET[self::$page])) {
self::$i = $_GET[self::$page];//同步当前页
strlen(self::$pageL) && (self::$i = str_replace(self::$pageL, '', self::$i));//去掉左边非码
strlen(self::$pageR) && (self::$i = str_replace(self::$pageR, '', self::$i));//去掉右边非码
}
self::$i = (int)self::$i;//防止注入必须数字化
(self::$i < $base_page) && (self::$i = $base_page);//不允许过头
$nums = max(0, (int)self::$nums);//不允许负数
//过尾
if (self::$isOffset) {
if (self::$i > self::$rows) self::$i = ($num_pages - 1) * self::$per;
} else {
if (self::$i > $num_pages) self::$i = $num_pages;
}
$uri_page_number = self::$i;
if (self::$isOffset) self::$i = floor((self::$i/self::$per) + 1);//记录式,浮+1变整
self::$base = rtrim(self::$base);
self::$base = false === strpos(self::$base, '?') ? self::$base .'?' : self::$base;
self::$base = rtrim(self::$base).'&'.self::$page.'=';
//是否并处理首页
if (self::$first !== FALSE AND self::$i > ($nums + 1)) {
$url = self::$url == '' ? self::$base.self::$pageL.$base_page.self::$pageR : self::$url;
$output .= self::$firstL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'First" ' : '')
.(self::$click ? ' οnclick="'.self::$click.'('.$base_page.', \'首\');" href="#' : 'href="')
.$url.'">'.self::$first.'</a>'.self::$firstR;
}
//是否与处理上页
if (self::$prev !== FALSE AND self::$i != 1) {
if (self::$isOffset) $i = $uri_page_number - self::$per;
else $i = $uri_page_number - 1;
if ($i == 0 && self::$url != '') $output .= self::$prevL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Prev" ' : '')
.(self::$click ? ' οnclick="'.self::$click.'('.$base_page.', \'上\');" href="#' : 'href="')
.self::$url.'">'.self::$prev.'</a>'.self::$prevR;//相当首页,但是指定了无码url
else {
$i = ($i == 0) ? $base_page : $i;
$output .= self::$prevL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Prev" ' : '')
.(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'上\');" href="#' : 'href="')
.self::$base.self::$pageL.$i.self::$pageR.'">'.self::$prev.'</a>'.self::$prevR;
}
}
//是否与处理数字码
if (self::$nums > 0) {
$start = ((self::$i - self::$nums) > 0) ? self::$i - (self::$nums - 1) : 1;
$end = ((self::$i + self::$nums) < $num_pages) ? self::$i + self::$nums : $num_pages;
for ($loop = $start -1; $loop <= $end; $loop++) {
if (self::$isOffset) $i = ($loop * self::$per) - self::$per;
else $i = $loop;
if ($i >= $base_page) {
if (self::$i == $loop) $output .= self::$iL.$loop.self::$iR; //当前页
else {
if ( ($i == $base_page) && (self::$url != '') ) $output .= self::$numL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Nums" ' : '')
.(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'数\');" href="#' : 'href="')
.self::$url.'">'.$loop.'</a>'.self::$numR;//首页
else {
$output .= self::$numL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Nums" ' : '')
.(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'数\');" href="#' : 'href="')
.self::$base.self::$pageL.$i.self::$pageR.'">'.$loop.'</a>'.self::$numR;
}
}
}
}
} else if (self::$nums == 0) {//只显示当前页码
$output .= self::$iL.self::$i.self::$iR; //当前页
}
//是否与处理下页
if (self::$next !== FALSE AND self::$i < $num_pages) {
if (self::$isOffset) $i = (self::$i * self::$per);
else $i = self::$i + 1;
$output .= self::$nextL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Next" ' : '')
.(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'下\');" href="#' : 'href="')
.self::$base.self::$pageL.$i.self::$pageR.'">'.self::$next.'</a>'.self::$nextR;
}
//是否与处理尾页
if (self::$last !== FALSE AND (self::$i + $nums) < $num_pages) {
if (self::$isOffset) $i = (($num_pages * self::$per) - self::$per);
else $i = $num_pages;
$output .= self::$lastL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Last" ' : '')
.(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'尾\');" href="#' : 'href="')
.self::$base.self::$pageL.$i.self::$pageR.'">'.self::$last.'</a>'.self::$lastR;
}
$output = preg_replace("#([^:])//+#", "\\1/", $output);//双 http://s.com//index.php的//变单个/index
$output .= self::$countsL.self::$rows.self::$countsR; //加上数据总数
if (!empty(self::$timeA) and is_numeric(self::$timeA)) {//加上运行耗时
$output .= str_replace('<>', round(microtime(1) - self::$timeA, 2), self::$timeHtml);
}
$output = self::$barL.$output.self::$barR;
return $output;
}
}