在Thinkphp中使用ajax实现无刷新分页的方法
在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容:
<?php //+---------------------------------------------------------------------- //|ThinkPHP[WECANDOITJUSTTHINKIT] //+---------------------------------------------------------------------- //|Copyright(c)2009http://thinkphp.cnAllrightsreserved. //+---------------------------------------------------------------------- //|Licensed(http://www.apache.org/licenses/LICENSE-2.0) //+---------------------------------------------------------------------- //|Author:liu21st<liu21st@gmail.com> //+---------------------------------------------------------------------- //$Id:Page.class.php27122012-02-0610:12:49Zliu21st$ classAjaxPage{ //分页栏每页显示的页数 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; publicfunction__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); } publicfunctionsetConfig($name,$value){ if(isset($this->config[$name])){ $this->config[$name]=$value; } } publicfunctionshow(){ 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="<aid='big'href='javascript:".$this->ajax_func."(".$upRow.")'>".$this->config['prev']."</a>"; }else{ $upPage=""; } if($downRow<=$this->totalPages){ $downPage="<aid='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="<aid='big'href='javascript:".$this->ajax_func."(".$preRow.")'>上".$this->rollPage."页</a>"; $theFirst="<aid='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="<aid='big'href='javascript:".$this->ajax_func."(".$nextRow.")'>下".$this->rollPage."页</a>"; $theEnd="<aid='big'href='javascript:".$this->ajax_func."(".$theEndRow.")'>".$this->config['last']."</a>"; } //12345 $linkPage=""; for($i=1;$i<=$this->rollPage;$i++){ $page=($nowCoolPage-1)*$this->rollPage+$i; if($page!=$this->nowPage){ if($page<=$this->totalPages){ $linkPage.=" <aid='big'href='javascript:".$this->ajax_func."(".$page.")'> ".$page." </a>"; }else{ break; } }else{ if($this->totalPages!=1){ $linkPage.=" <spanclass='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 classUserActionextendsAction{ publicfunctionuser(){ import("ORG.Util.AjaxPage");//导入分页类注意导入的是自己写的AjaxPage类 $credit=M('user'); $count=$credit->count();//计算记录数 $limitRows=5;//设置每页记录数 $p=newAjaxPage($count,$limitRows,"user");//第三个参数是你需要调用换页的ajax函数名 $limit_value=$p->firstRow.",".$p->listRows; $data=$credit->order('iddesc')->limit($limit_value)->select();//查询数据 $page=$p->show();//产生分页信息,AJAX的连接在此处生成 $this->assign('list',$data); $this->assign('page',$page); $this->display(); } } ?>
模板文件如下:
<html> <head> <title>Ajax无刷新分页</title> <scripttype="text/javascript"src="../Public/jquery-1.7.2.min.js"></script> <scripttype="text/javascript"> functionuser(id){//user函数名一定要和action中的第三个参数一致上面有 varid=id; $.get('User/user',{'p':id},function(data){//用get方法发送信息到UserAction中的user方法 $("#user").replaceWith("<divid='user'>"+data+"</div>");//user一定要和tpl中的一致 }); } </script> </head> <body> <divid='user'><!--这里的user和下面js中的test要一致--> <volistid='list'name='list'><!--内容输出--> <{$list.id}> <{$list.username}><br/> </volist> <{$page}><!--分页输出--> </div> </body> </html>
以上所述是小编给大家介绍的在Thinkphp中使用ajax实现无刷新分页的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!