TP分页我目前遇到的有两种情况,这个和model有关其一:$form = D('user') 如果这么实例化的可以直接采用如下的方式:
import('ORG.Util.Page');// 导入分页类
$count = $Data->count();// 查询满足要求的总记录数 $map表示查询条件
//dump($count);
$Page = new Page($count);// 实例化分页类 传入总记录数
$show = $Page->show();// 分页显示输出
$this->assign('page',$show);// 赋值分页输出
页面中采用{$page}进行分页操作。
其二:$form = new Model();如果是这么实例化的,需要采用如下方式进行:
在action中查询结果之后需要添加的代码:
$param = array(
'result'=>$list, //分页用的数组或sql
'listvar'=>'list1', //分页循环变量
'listRows'=>21, //每页记录数
'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();
action中调用的一个方法的具体代码:
public function page($param) {
extract($param);
import('ORG.Util.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}进行分页输出。
以上是关于利用ThinkPHP已经封装好的分页类进行的分页操作,是我最开始接触TP做项目中遇到的两个方法。
浙公网安备 33010602011771号