Thinkphp中使用AJAX实现无刷新分页

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

<?php// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]

// +----------------------------------------------------------------------

// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: liu21st <liu21st@gmail.com>

// +----------------------------------------------------------------------

// $Id: Page.class.php 2712 2012-02-06 10:12:49Z liu21st $class AjaxPage {

    // 分页栏每页显示的页数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);

    }publicfunction setConfig($name,$value) {

        if(isset($this->config[$name])) {

            $this->config[$name]    =   $value;

        }

    }

    publicfunction 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 .= "&nbsp;<a id='big' href='javascript:".$this->ajax_func."(".$page.")'>&nbsp;".$page."&nbsp;</a>";

                }else{

                    break;

                }

            }else{

                if($this->totalPages != 1){

                    $linkPage .= "&nbsp;<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'>   <!--内容输出-->

                    <{$list.id}>&nbsp;&nbsp;<{$list.username}><br/>

            </volist>

            <{$page}>  <!--分页输出-->

        </div>

        

    </body>

</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


(1)创建数据表: CREATE TABLE IF NOT EXISTS `think_form` (   `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的
(1)创建模版:/App/Home/View/Form/edit.html   <FORM method=\"post\" action=\"__URL__/update\">
自定义配置文件user.php: <?php return array(    \'sex\'=>\'man\', ); config.php: <?php return array(
在一些成熟的CMS系统中,后台一般都包含一个配置中心(如织梦后台中系统设置),以方便站长在后台修改配置文件;那么这个功能是如果实现的呢?在ThinkPHP中有没有捷径可走呢?答案肯定是有的。下面大概说一下这个功能
废话不多说先上图预览下,即本博客的分页; 这个分页类是在thinkphp框架内置的分页类的基础上修改而来,原分页类的一些设计,在实际运用中感觉不是很方便;
在php中截取字符串的函数有很多,而在thinkphp中也可以直接使用php的函数,本文给大家简单的介绍thinkPHP模板中截取字符串的具体用法,希望能对各位有所帮助。
thinkphp开发图片上传,图片异步上传是目前比较方便的功能,这里我就不写css文件了,将代码写出来。
配置数据库:/app/Common/Conf/config.php 方法一: // 添加数据库配置信息 \'DB_TYPE\'   => \'mysql\',// 数据库类型
/app/Home/Controller/IndexController.class.php
(1)创建数据表: CREATE TABLE IF NOT EXISTS `think_data` (   `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
(1)控制器设置:/app/Home/Controller/IndexController.class.php <?php namespace HomeController; use ThinkController;
(1)普通模式 http://localhost/index.php?m=module&a=action&var=value m参数表示模块,a操作表示操作(模块和操作的URL参数名称是可以配置的),后面的表示其他GET参数。
入库的时候用htmlspecialchars()处理含有html代码的内容 输出的时候用htmlspecialchars_decode()处理含有html代码的内容
<?php define(\'APP_NAME\',\'app\'); define(\'APP_PATH\',\'./app/\'); define(\'APP_DEBUG\',TRUE); // 开启调试模式
(1)创建控制器中定义read方法:/App/Home/Controller/FormController.class.php public function read($id=0){
一、实现不同字段相同的查询条件 $User = M(\"User\"); // 实例化User对象 $map[\'name|title\'] = \'thinkphp\';
如果你的数据完全是内部操作写入而不是通过表单的话(也就是说可以充分信任数据的安全),那么可以直接使用add方法,如:
查询表达式的使用格式: $map[\'字段名\'] = array(\'表达式\',\'查询条件\'); 表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
一、使用字符串作为查询条件 $User = M(\"User\"); // 实例化User对象 $User->where(\'type=1 AND status=1\')->select();