在Thinkphp中使用ajax实现无刷新分页的方法

2018-10-15 17:00

阅读:450

在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容:

<?php // +---------------------------------------------------------------------- // ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // Copyright (c) 2009 分页栏每页显示的页数 public $rollPage = 5; // 页数跳转时要带的参数 public $parameter ; // 默认列表每页显示行数 public $listRows = 20; // 起始行数 public $firstRow ; // 分页总页面数 protected $totalPages ; // 总行数 protected $totalRows ; // 当前页数 protected $nowPage ; // 分页的栏的总页数 protected $coolPages ; // 分页显示定制 protected $config = array(header=>条记录,prev=>上一页,next=>下一页,first=>第一页,last=>最后一页,theme=> %totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%); // 默认分页变量名 protected $varPage; public function __construct($totalRows,$listRows=,$ajax_func,$parameter=) { $this->totalRows = $totalRows; $this->ajax_func = $ajax_func; $this->parameter = $parameter; $this->varPage = C(VAR_PAGE) ? C(VAR_PAGE) : p ; if(!empty($listRows)) { $this->listRows = intval($listRows); } $this->totalPages = ceil($this->totalRows/$this->listRows); //总页数 $this->coolPages = ceil($this->totalPages/$this->rollPage); $this->nowPage = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1; if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) { $this->nowPage = $this->totalPages; } $this->firstRow = $this->listRows*($this->nowPage-1); } public function setConfig($name,$value) { if(isset($this->config[$name])) { $this->config[$name] = $value; } } public function show() { if(0 == $this->totalRows) return ; $p = $this->varPage; $nowCoolPage = ceil($this->nowPage/$this->rollPage); $url = $_SERVER[REQUEST_URI].(strpos($_SERVER[REQUEST_URI],?)?:?).$this->parameter; $parse = parse_url($url); if(isset($parse[query])) { parse_str($parse[query],$params); unset($params[$p]); $url = $parse[path].?.http_build_query($params); } //上下翻页字符串 $upRow = $this->nowPage-1; $downRow = $this->nowPage+1; if ($upRow>0){ $upPage=<a id=big href=javascript:.$this->ajax_func.(.$upRow.)>.$this->config[prev].</a>; }else{ $upPage=; } if ($downRow <= $this->totalPages){ $downPage=<a id=big href=javascript:.$this->ajax_func.(.$downRow.)>.$this->config[next].</a>; }else{ $downPage=; } // << < > >> if($nowCoolPage == 1){ $theFirst = ; $prePage = ; }else{ $preRow = $this->nowPage-$this->rollPage; $prePage = <a id=big href=javascript:.$this->ajax_func.(.$preRow.)>上.$this->rollPage.页</a>; $theFirst = <a id=big href=javascript:.$this->ajax_func.(1) >.$this->config[first].</a>; } if($nowCoolPage == $this->coolPages){ $nextPage = ; $theEnd=; }else{ $nextRow = $this->nowPage+$this->rollPage; $theEndRow = $this->totalPages; $nextPage = <a id=big href=javascript:.$this->ajax_func.(.$nextRow.) >下.$this->rollPage.页</a>; $theEnd = <a id=big href=javascript:.$this->ajax_func.(.$theEndRow.) >.$this->config[last].</a>; } // 1 2 3 4 5 $linkPage = ; for($i=1;$i<=$this->rollPage;$i++){ $page=($nowCoolPage-1)*$this->rollPage+$i; if($page!=$this->nowPage){ if($page<=$this->totalPages){ $linkPage .= <a id=big href=javascript:.$this->ajax_func.(.$page.)>.$page.</a>; }else{ break; } }else{ if($this->totalPages != 1){ $linkPage .= <span class=current>.$page.</span>; } } } $pageStr = str_replace( array(%header%,%nowPage%,%totalRow%,%totalPage%,%upPage%,%downPage%,%first%,%prePage%,%linkPage%,%nextPage%,%end%), array($this->config[header],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$downPage,$theFirst,$prePage,$linkPage,$nextPage,$theEnd),$this->config[theme]); return $pageStr; } } ?>

控制器里写入以下内容:

<?php class UserAction extends Action{ public function user(){ import(ORG.Util.AjaxPage);// 导入分页类 注意导入的是自己写的AjaxPage类 $credit = M(user); $count = $credit->count(); //计算记录数 $limitRows = 5; // 设置每页记录数 $p = new AjaxPage($count, $limitRows,user); //第三个参数是你需要调用换页的ajax函数名 $limit_value = $p->firstRow . , . $p->listRows; $data = $credit->order(id desc)->limit($limit_value)->select(); // 查询数据 $page = $p->show(); // 产生分页信息,AJAX的连接在此处生成 $this->assign(list,$data); $this->assign(page,$page); $this->display(); } } ?>

模板文件如下:

<html> <head> <title>Ajax无刷新分页</title> <script type=text/javascript src=../Public/jquery-1.7.2.min.js></script> <script type=text/javascript> function user(id){ //user函数名 一定要和action中的第三个参数一致上面有 var id = id; $.get(User/user, {p:id}, function(data){ //用get方法发送信息到UserAction中的user方法 $(#user).replaceWith(<div id=user>+data+</div>); //user一定要和tpl中的一致 }); } </script> </head> <body> <div id=user> <!--这里的user和下面js中的test要一致--> <volist id=list name=list> <!--内容输出rname}><br/> </volist> <{$page}> <!--分页输出--> </div> </body> </html>

以上所述是小编给大家介绍的在Thinkphp中使用ajax实现无刷新分页的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


评论


亲,登录后才可以留言!