model类中提供了分页读取数据的方法,定义如下:
array page(mixed $where = null, string $fields = '*', string $order = null, string $page = 1, int $size = 20, array $data = array())
$where 查询条件,支持PDO的预置符( :? 、:field)
$fields 查询字段,默认为所有字段
$order 排序条件,如: id desc, published desc
$page 当前页码
$size 每页的数量
$data 数组格式,如果$where中使用了预置符,$data中则是预置符要绑定的数据
在模板中也提供了一个用于显示分页导航的函数,定义如下:
string pages(int $total, int $page = 1, int $pagesize = 20, int $offset = 2, string $url = null, int $mode = false)
$total 内容的总数
$page 当前分页
$pagesize 每页分页大小,在后台“设置 = 》全局设置 = 》性能优化 = 》列表页每页信息数”处进行设置
$offset 偏移量,表示除第一页和最后一页外,当前页两端各显示多少个页码数
$url 分页所使用的 URL 规则,不指定则使用当前请求的 URL ,默认的规则在后台“设置 = 》栏目设置”界面中的进行设置。
$mode 为 true 则将转换 URL 中的 & 为 &
举例说明
下面是一个分页读取guestbook留言的一个具体应用
§ 控制器方法
function page()
{
$order = isset($_GET['orderby']) ? str_replace('|', ' ', $_GET['orderby']) : '`gid` DESC';
$page = max((isset($_GET['page']) ? intval($_GET['page']) : 1), 1);
$size = max((isset($_GET['pagesize']) ? intval($_GET['pagesize']) : $this->pagesize), 1);
$data = $this->guestbook->ls($_GET, '*', $order, $page, $size);
$total = $this->guestbook->total();
echo $this->json->encode(array('data' =>$data, 'total' => $total));
}
§ 数据模型方法
function ls($get, $fields, $order, $page, $size)
{
$where = null;
if(isset($get['status']) && $get['status'])
{
switch($get['status'])
{
case 1:
$where[] = '`isview`=0';
break;
case 2:
$where[] = "`reply` != ''";
break;
default:
break;
}
}
if (isset($get['keywords']) && $get['keywords']) $where[] = where_keywords('title', $get['keywords']);
if (isset($get['typeid']) && $get['typeid']) $where[] = '`typeid`='.$get['typeid'];
if (isset($get['published']) && $get['published']) $where[] = where_mintime('addtime', $get['published']);
if (isset($get['unpublished']) && $get['unpublished']) $where[] = where_maxtime('addtime', $get['unpublished']);
if (is_array($where)) $where = implode(' AND ', $where);
$this->where = $where;
$data = $this->page($where, $fields, $order, $page, $size);
return $data;
}
function total()
{
return $this->count($this->where);
}
§ 模版中显示分页导航
pages($total,$page,$pagesize,2,$urlrule);