2011年(109)
分类: 系统运维
2011-05-19 16:04:57
也看到有朋友提出了AJAX实现的PAGE类,不过看代码貌似只是实现了第一次显示,分页显示的连接好像没有改变。
我基于PAGE类,修改实现了其AJAX版本,基本达到我预期目标。请各位专家不吝赐教。
改进思想
========
1. 读取POST参数
2. 改进URL为JAVASCRIPT方式的AJA[attach]1469[/attach]X函数
使用方法
========
1. 控制类(Controller)
public function phpAjaxMethod()
{
$Form = D('Your Model');
header("Content-Type:text/html; charset=utf-8");
import("ORG.Util.AjaxPage");
$count =
$Form->order('id')->count(); //计算记录数
$limitRows = 3; // 设置每页记录数
$p = new AjaxPage($count, $limitRows,
"你页面的Ajax函数名");
$limit_value = $p->firstRow .
"," . $p->listRows;
$data = $Form->order('id')->limit($limit_value)->select();
// 查询数据
$page = $p->show(); // 产生分页信息,AJAX的连接在此处生成
// 以下处理和正常查询一样
// AJAX返回数据
$this->ajaxReturn($ajax_data,
$ajax_info, 1);
}
2. 视图(View)
视图中必须定义JavaScript编写的AJAX处理函数,例如:
function myAjaxQuery()
{
var page_arg = arguments[0] || "";
var other_param = $('param_id').value;
ThinkAjax.send('__URL__/phpAjaxMethod','ajax=1&other_param='+other_param+page_arg,
AJAX返回处理函数, '信息标签ID');
}
代码
========
参见附件,说明如下:
1. 将ThinkPHP\Lib\ORG\Util\Page.class.php复制一份,更名为AjaxPage.class.php
2. 添加AJAX函数名,增加变量:protected $ajaxFunc;
3. 添加构造函数参数$ajax_func:public function
__construct($totalRows,$listRows,$ajax_func,$parameter=''),并在构造函数中进行赋值:$this->ajaxFunc = $ajax_func;
4. 采用POST方式,原代码为:
$this->nowPage =
!empty($_GET[C('VAR_PAGE')])?$_GET[C('VAR_PAGE')]:1;
修改后为:
$this->nowPage =
!empty($_POST[C('VAR_PAGE')])?$_POST[C('VAR_PAGE')]:1;
5. 所有涉及到url赋值的部分进行如下修改:
原代码:
if ($upRow>0){
$upPage="".$this->config['prev']."";
}else{
$upPage="";
}
修改后代码:
$href_str =
"'javascript:".$this->ajaxFunc."('&".$p."=$upRow')'";
if ($upRow>0){
$upPage="".$this->config['prev']."";
}else{
$upPage="";
}