作者:叮咚叮咚_叮 | 来源:互联网 | 2020-09-12 17:33
/**
*
* 关于 页码有效性的判断需要加在 控制器中判断,即当页码数<1或者>总页数
*
*/
class Custom_pagination
{
var $page_url = &#39;&#39;; //分页目标URL
var $page_size = 10; //每一页行数
var $page_num = 1;//页码
var $rows_num= &#39;&#39;;//数据总行数
var $links_num= 3;//选中链接前后的链接数,必须大于等于1
var $anchor_class= &#39;&#39;;//链接样式类
var $current_class= &#39;&#39;;//当前页样式类
var $full_tag_open= &#39;&#39;;//分页开始标签
var $full_tag_close= &#39;&#39;;//分页结束标签
var $info_tag_open= &#39;&#39;;
var $info_tag_close= &#39; &#39;;
var $first_tag_open= &#39;&#39;;
var $first_tag_close= &#39; &#39;;
var $last_tag_open= &#39; &#39;;
var $last_tag_close= &#39;&#39;;
var $cur_tag_open= &#39; &#39;;
var $cur_tag_close= &#39;&#39;;
var $next_tag_open= &#39; &#39;;
var $next_tag_close= &#39; &#39;;
var $prev_tag_open= &#39; &#39;;
var $prev_tag_close= &#39;&#39;;
var $num_tag_open= &#39; &#39;;
var $num_tag_close= &#39;&#39;;
public function __construct($params = array())
{
if (count($params) > 0)
{
$this->init($params);
}
}
function init($params = array()) //初始化数据
{
if (count($params) > 0)
{
foreach ($params as $key => $val)
{
if (isset($this->$key))
{
$this->$key = $val;
}
}
}
}
function create_links()
{
///////////////////////////////////////////////////////
//准备数据
///////////////////////////////////////////////////////
$page_url = $this->page_url;
$rows_num = $this->rows_num;
$page_size = $this->page_size;
$links_num = $this->links_num;
if ($rows_num == 0 OR $page_size == 0)
{
return &#39;&#39;;
}
$pages = intval($rows_num/$page_size);
if ($rows_num % $page_size)
{
//有余数pages+1
$pages++;
};
$page_num = $this->page_num <1 ? &#39;1&#39; : $this->page_num;
$anchor_class = &#39;&#39;;
if($this->anchor_class !== &#39;&#39;)
{
$anchor_class = &#39;class="&#39;.$this->anchor_class.&#39;" &#39;;
}
$current_class = &#39;&#39;;
if($this->current_class !== &#39;&#39;)
{
$current_class = &#39;class="&#39;.$this->current_class.&#39;" &#39;;
}
if($pages == 1)
{
return &#39;&#39;;
}
if($links_num <0)
{
return &#39;- -!links_num必须大于等于0&#39;;
}
////////////////////////////////////////////////////////
//创建链接开始
////////////////////////////////////////////////////////
$output = $this->full_tag_open;
$output .= $this->info_tag_open.&#39;共&#39;.$rows_num.&#39;条数据 第 &#39;.$page_num.&#39;/&#39;.$pages.&#39; 页&#39;.$this->info_tag_close;
//首页
if($page_num > 1)
{
$output .= $this->first_tag_open.&#39;首页&#39;.$this->first_tag_close;
}
//上一页
if($page_num > 1)
{
$n = $page_num - 1;
$output .= $this->prev_tag_open.&#39;上一页&#39;.$this->prev_tag_close;
}
//pages
for($i=1;$i<=$pages;$i++)
{
$pl = $page_num - $links_num <0 ? 0 : $page_num - $links_num;
$pr = $page_num + $links_num > $pages ? $pages : $page_num + $links_num;
//判断链接个数是否太少,举例,假设links_num = 2,则链接个数不可少于 5 个,主要是 当page_num 等于 1, 2 和 n,n-1的时候
if($pr <2 * $links_num + 1)
{
$pr = 2 * $links_num + 1;
}
if($pl > $pages-2 * $links_num)
{
$pl = $pages - 2 * $links_num;
}
if($i == $page_num)
{ //current page
$output .= $this->cur_tag_open.&#39;&#39;.$i.&#39;&#39;.$this->cur_tag_close;
}else if($i >= $pl && $i <= $pr)
{
$output .= $this->num_tag_open.&#39;&#39;.$i.&#39;&#39;.$this->num_tag_close;
}
}
//下一页
if($page_num <$pages)
{
$n = $page_num + 1;
$output .= $this->next_tag_open.&#39;下一页&#39;.$this->next_tag_close;
}
//末页
if($page_num <$pages)
{
$output .= $this->last_tag_open.&#39;末页&#39;.$this->last_tag_close;
}
$output.=$this->full_tag_close;
return $output;
}
}
控制器里调用
$config[&#39;page_url&#39;]
= &#39;about/science&#39;;
$config[&#39;page_size&#39;] = $pagesize;
$config[&#39;rows_num&#39;] = $num_rows;
$config[&#39;page_num&#39;] = $page;
$this->load->library(&#39;Custom_pagination&#39;);
$this->custom_pagination->init($config);
echo $this->custom_pagination->create_links();
pagenum = ceil($count/$pagesize);
$this->pagesize = $pagesize;
$this->page =(isset($_GET[&#39;p&#39;])&&$_GET[&#39;p&#39;]>0) ? intval($_GET[&#39;p&#39;]) : 1;
}
/**
* 获得 url 后面GET传递的参数
*/
public function getUrl(){
$url = &#39;index.php?&#39;.http_build_query($_GET);
$url = preg_replace(&#39;/[?,&]p=(\w)+/&#39;,&#39;&#39;,$url);
$url .= (strpos($url,"?") === false) ? &#39;?&#39; : &#39;&&#39;;
return $url;
}
/**
* 获得分页HTML
*/
public function getPage(){
$url = $this->getUrl();
$start = $this->page-5;
$start=$start>0 ? $start : 1;
$end = $start+9;
$end = $end<$this->pagenum ? $end : $this->pagenum;
$pagestr = &#39;&#39;;
if($this->page>5){
$pagestr = "首页 ";
}
if($this->page!=1){
$pagestr.= "上一页";
}
for($i=$start;$i<=$end;$i++){
$pagestr.= "".$i." ";
}
if($this->page!=$this->pagenum){
$pagestr.="下一页";
}
if($this->page+5<$this->pagenum){
$pagestr.="尾页 ";
}
return $pagestr;
}
}
// 测试代码
$page = new page(100,10);
$str=$page->getPage();
echo $str;
?>
推荐教程:《PHP》
以上就是CI框架简单分页类的详细内容,更多请关注 第一PHP社区 其它相关文章!