php 多风格的分页类(支持ajax分页)
php 多风格的分页类(支持ajax分页)
<?php
/**
* example:
* 模式四种分页模式:
require_once('../libs/classes/page.class.php');
$page=new page(array('total'=>1000,'perpage'=>20));
echo 'mode:1<br>'.$page->show();
echo '<hr>mode:2<br>'.$page->show(2);
echo '<hr>mode:3<br>'.$page->show(3);
echo '<hr>mode:4<br>'.$page->show(4);
开启AJAX:
$ajaxpage=new page(array
('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
echo 'mode:1<br>'.$ajaxpage->show();
采用继承自定义分页显示模式:
*/
class page {
/**
* config ,public
*/
var $page_name = "PB_page"; //page标签,用来控制url页
var $next_page = '>'; //下一页
var $pre_page = '<'; //上一页
var $first_page = 'First'; //首页
var $last_page = 'Last'; //尾页
var $pre_bar = '<<'; //上一分页条
var $next_bar = '>>'; //下一分页条
var $format_left = '[';
var $format_right = ']';
var $is_ajax = false; //是否支持AJAX分页模式
/**
* private
*
*/
var $pagebarnum = 10; //控制记录条的个数。
var $totalpage = 0; //总页数
var $ajax_action_name = ''; //AJAX动作名
var $nowindex = 1; //当前页
var $url = ""; //url地址头
var $offset = 0;
/**
* constructor构造函数
*
* @param array $array['total'],$array['perpage'],$array['nowindex'],$array
['url'],$array['ajax']
*/
function page($array) {
if (is_array($array)) {
if (!array_key_exists('total', $array)) $this->error(__FUNCTION__, 'need a param
of total');
$total = intval($array['total']);
$perpage = (array_key_exists('perpage', $array)) ? intval($array['perpage']) : 10;
$nowindex = (array_key_exists('nowindex', $array)) ? intval($array['nowindex']) : '';
$url = (array_key_exists('url', $array)) ? $array['url'] : '';
} else {
$total = $array;
$perpage = 10;
$nowindex = '';
$url = '';
}
if ((!is_int($total)) || ($total < 0)) $this->error(__FUNCTION__, $total . ' is not a
positive integer!');
if ((!is_int($perpage)) || ($perpage <= 0)) $this->error(__FUNCTION__, $perpage . ' is not
a positive integer!');
if (!empty($array['page_name'])) $this->set('page_name', $array['page_name']); //设置
pagename $this->_set_nowindex($nowindex); //设置当前页
$this->_set_url($url); //设置链接地址
$this->totalpage = ceil($total / $perpage);
$this->offset = ($this->nowindex - 1) * $perpage;
if (!empty($array['ajax'])) $this->open_ajax($array['ajax']); //打开AJAX模式
}
/**
* 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception
*
* @param string $var
* @param string $value
*/
function set($var, $value) {
if (in_array($var, get_object_vars($this))) $this->$var = $value;
else {
$this->error(__FUNCTION__, $var . " does not belong to PB_Page!");
}
}
/**
* 打开倒AJAX模式
*
* @param string $action 默认ajax触发的动作。
*/
function open_ajax($action) {
$this->is_ajax = true;
$this->ajax_action_name = $action;
}
/**
* 获取显示"下一页"的代码
*
* @param string $style
* @return string
*/
function next_page($style = '') {
if ($this->nowindex < $this->totalpage) {
return $this->_get_link($this->_get_url($this->nowindex + 1) , $this - > next_page, $style);
}
return '<span class=".$style.">' . $this->next_page . '</span>';
}
/**
* 获取显示“上一页”的代码
*
* @param string $style
* @return string
*/
function pre_page($style = '') {
if ($this->nowindex > 1) {
return $this->_get_link($this->_get_url($this->nowindex - 1) , $this - > pre_page, $style);
}
return '<span class=".$style.">' . $this->pre_page . '</span>';
}
/**
* 获取显示“首页”的代码
*
* @return string
*/
function first_page($style = '') {
if ($this->nowindex == 1) {
return '<span class=".$style.">' . $this->first_page . '</span>';
}
return $this->_get_link($this->_get_url(1) , $this->first_page, $style);
}
/**
* 获取显示“尾页”的代码
*
* @return string
*/
function last_page($style = '') {
if ($this->nowindex == $this->totalpage) {
return '<span class=".$style.">' . $this->last_page . '</span>';
}
return $this->_get_link($this->_get_url($this->totalpage) , $this - > last_page, $style);
}
function nowbar($style = '', $nowindex_style = '') {
$plus = ceil($this->pagebarnum / 2);
if ($this->pagebarnum - $plus + $this->nowindex > $this->totalpage) $plus = ($this - > pagebarnum - $this->totalpage + $this->nowindex);
$begin = $this->nowindex - $plus + 1;
$begin = ($begin >= 1) ? $begin : 1;
$return = '';
for ($i = $begin; $i < $begin + $this->pagebarnum; $i++) {
if ($i <= $this->totalpage) {
if ($i != $this->nowindex) $return.= $this->_get_text($this->_get_link($this->_get_url($i) , $i, $style));
else $return.= $this->_get_text('<span
class=".$nowindex_style.">' . $i . '</span>');
} else {
break;
}
$return.= "n";
}
unset($begin);
return $return;
}
/**
* 获取显示跳转按钮的代码
*
* @return string
*/
function select() {
$return = '<select name="PB_Page_Select">';
for ($i = 1; $i <= $this->totalpage; $i++) {
if ($i == $this->nowindex) {
$return.= '<option value="' . $i . '" selected>' . $i . '</option>';
} else {
$return.= '<option value="' . $i . '">' . $i . '</option>';
}
}
unset($i);
$return.= '</select>';
return $return;
}
/**
* 获取mysql 语句中limit需要的值
*
* @return string
*/
function offset() {
return $this->offset;
}
/**
* 控制分页显示风格
*
* @param int $mode
* @return string
*/
function show($mode = 1) {
switch ($mode) {
case '1':
$this->next_page = '下一页';
$this->pre_page = '上一页';
return $this->pre_page() . $this->nowbar() . $this->next_page() . '第' . $this - > select() . '页';
break;
case '2':
$this->next_page = '下一页';
$this->pre_page = '上一页';
$this->first_page = '首页';
$this->last_page = '尾页';
return $this->first_page() . $this->pre_page() . '[第' . $this - > nowindex . '页]' . $this->next_page() . $this->last_page() . '第' . $this->select() . '页';
break;
case '3':
$this->next_page = '下一页';
$this->pre_page = '上一页';
$this->first_page = '首页';
$this->last_page = '尾页';
return $this->first_page() . $this->pre_page() . $this->next_page() . $this - > last_page();
break;
case '4':
$this->next_page = '下一页';
$this->pre_page = '上一页';
return $this->pre_page() . $this->nowbar() . $this->next_page();
break;
case '5':
return $this->pre_bar() . $this->pre_page() . $this->nowbar() . $this->next_page() . $this->next_bar();
break;
}
}
/*----------------private function (私有方法)-----------------------------------
------------------------*/
/**
* 设置url头地址
* @param: String $url
* @return boolean
*/
function _set_url($url = "") {
if (!empty($url)) {
//手动设置
$this->url = $url . ((stristr($url, '?')) ? '&' : '?') . $this->page_name . "=";
} else {
//自动获取
if (empty($_SERVER['QUERY_STRING'])) {
//不存在QUERY_STRING时
$this->url = $_SERVER['REQUEST_URI'] . "?" . $this->page_name . "=";
} else {
//
if (stristr($_SERVER['QUERY_STRING'], $this->page_name . '=')) {
//地址存在页面参数
$this->url = str_replace($this->page_name . '=' . $this->nowindex, '', $_SERVER['REQUEST_URI']);
$last = $this->url[strlen($this->url) - 1];
if ($last == '?' || $last == '&') {
$this->url.= $this->page_name . "=";
} else {
$this->url.= '&' . $this->page_name . "=";
}
} else {
//
$this->url = $_SERVER['REQUEST_URI'] . '&' . $this->page_name . '=';
} //end if
} //end if
} //end if
}
/**
* 设置当前页面
*
*/
function _set_nowindex($nowindex) {
if (empty($nowindex)) {
//系统获取
if (isset($_GET[$this->page_name])) {
$this->nowindex = intval($_GET[$this->page_name]);
}
} else {
//手动设置
$this->nowindex = intval($nowindex);
}
}
/**
* 为指定的页面返回地址值
*
* @param int $pageno
* @return string $url
*/
function _get_url($pageno = 1) {
return $this->url . $pageno;
}
/**
* 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a
href="">1</a>]
*
* @param String $str
* @return string $url
*/
function _get_text($str) {
return $this->format_left . $str . $this->format_right;
}
/**
* 获取链接地址
*/
function _get_link($url, $text, $style = '') {
$style = (empty($style)) ? '' : 'class="' . $style . '"';
if ($this->is_ajax) {
//如果是使用AJAX模式
return '<a ' . $style . ' href="网页特效:' . $this - > ajax_action_name . '(''.$url.'')">' . $text . '</a>';
} else {
return '<a ' . $style . ' href="' . $url . '">' . $text . '</a>';
}
}
/**
* 出错处理方式
*/
function error($function, $errormsg) {
die('Error in file <b>' . __FILE__ . '</b> ,Function <b>' . $function . '()</b>
:' . $errormsg);
}
}
$page = new page(array(
'total' => 1000,
'perpage' => 20
));
echo 'mode:1<br>' . $page->show();
echo '<hr>mode:2<br>' . $page->show(2);
echo '<hr>mode:3<br>' . $page->show(3);
echo '<hr>mode:4<br>' . $page->show(4);
echo '<hr>开始AJAX模式:';
$ajaxpage = new page(array(
'total' => 1000,
'perpage' => 20,
'ajax' => 'ajax_page',
'page_name' => 'test'
));
echo 'mode:1<br>' . $ajaxpage->show();
?>
文章链接:http://www.phprm.com/frame/php1005202.html
随便收藏,请保留本文地址!