ThinkPHP示例:ajax分页操作

浏览:56238 最后更新:2015-06-11 17:25 分类:示例 关键字: ajax分页 示例
ThinkPHP示例之ajax分页操作,演示了如何进行数据分页操作,需要使用表单示例中的数据表,或者直接创建数据表如下:    CREATE TABLE IF NOT EXISTS `think_form` (
      `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(255) NOT NULL,
      `content` varchar(255) NOT NULL,
      `create_time` int(11) unsigned NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
修改项目配置文件中的数据库连接信息,打开示例页面后显示:

如果没有看到数据的话,请首先往该数据表里面手动添加一些数据来测试分页效果。
本分页类已被修改,用的是github上最新的分页类,通过实例化page类时直接传入html里的ajax列表容器和分页div所在的容器id,配合相应模板,即可轻松实现ajax分页。
另外,对分页调用做了数据无关的封装,可以数组分页也可sql分页,详情描述看action中的注释,为了项目中的使用方便,分页方法传入的参数用数组传入。
关键代码:public function index() {
        import("@.ORG.Page");       //导入分页类
        $Form   =   M('Form');
        $list = $Form->select();
        // $list = range(2,51);
        $param = array(
            'result'=>$list,            //分页用的数组或sql
            'listvar'=>'list',            //分页循环变量
            'listRows'=>10,            //每页记录数
            'parameter'=>'search=key&name=thinkphp',//url分页后继续带的参数
            'target'=>'content',    //ajax更新内容的容器id,不带#
            'pagesId'=>'page',        //分页后页的容器id不带# target和pagesId同时定义才Ajax分页
            'template'=>'Index:ajaxlist',//ajax更新模板
        );
        $this->page($param);
        $this->display();
    }

    /**
      +----------------------------------------------------------
     * 分页函数 支持sql和数据集分页 sql请用 buildSelectSql()函数生成
      +----------------------------------------------------------
     * @access public
      +----------------------------------------------------------
     * @param array   $result 排好序的数据集或者查询的sql语句
     * @param int       $totalRows  每页显示记录数 默认21
     * @param string $listvar    赋给模板遍历的变量名 默认list
     * @param string $parameter  分页跳转的参数
     * @param string $target  分页后点链接显示的内容id名
     * @param string $pagesId  分页后点链接元素外层id名
     * @param string $template ajaxlist的模板名
     * @param string $url ajax分页自定义的url
      +----------------------------------------------------------
     */
    public function page($param) {
        extract($param);
        import("@.ORG.Page");
        //总记录数
        $flag = is_string($result);
        $listvar = $listvar ? $listvar : 'list';
        $listRows = $listRows? $listRows : 21;
        if ($flag)
            $totalRows = M()->table($result . ' a')->count();
        else
            $totalRows = ($result) ? count($result) : 1;
        //创建分页对象
        if ($target && $pagesId)
            $p = new Page($totalRows, $listRows, $parameter, $url,$target, $pagesId);
        else
            $p = new Page($totalRows, $listRows, $parameter,$url);
        //抽取数据
        if ($flag) {
            $result .= " LIMIT {$p->firstRow},{$p->listRows}";
            $voList = M()->query($result);
        } else {
            $voList = array_slice($result, $p->firstRow, $p->listRows);
        }
        $pages = C('PAGE');//要ajax分页配置PAGE中必须theme带%ajax%,其他字符串替换统一在配置文件中设置,
        //可以使用该方法前用C临时改变配置
        foreach ($pages as $key => $value) {
            $p->setConfig($key, $value); // 'theme'=>'%upPage% %linkPage% %downPage% %ajax%'; 要带 %ajax%
        }
        //分页显示
        $page = $p->show();
        //模板赋值
        $this->assign($listvar, $voList);
        $this->assign("page", $page);
        if ($this->isAjax()) {//判断ajax请求
            layout(false);
            $template = (!$template) ? 'ajaxlist' : $template;
            exit($this->fetch($template));
        }
        return $voList;
    }
注意page方法返回值是为了获取当前页记录的数量。
放入官方的示例目录中访问即可
评论( 相关
后面还有条评论,点击查看>>