#1 jake

前面已经介绍了spPager的用法和模板中分页的显示,本文将对spPager作进一步的说明。

1. 使用范围——findAll/findSql

使用findAll分页

$guestbook->spPager($this->spArgs('page', 1), 5)->findAll();
使用findSql分页,使用SQL语句的时候分页。
$guestbook->spPager($this->spArgs('page', 1), 5)->findSql('select test_guestbook.* from test_guestbook');
2. 使用SQL的限制

当使用findSql来进行查找分页的时候,请注意以下两点:


  • SQL语句最外围不能使用limit语句,因为spPager会自动加入limit计算。
  • SQL语句获取的字段中,务必加入“表名.”进行区分,同时务必加入主键,这点主要SQL语句涉及到多表关联或子查询的时候需要注意。
3. 扩大使用范围

spPager仅支持findAll和findSql两个函数进行分页,如果需要对开发者写作的自定义model函数进行分页,建议在参数中加入页码等。

假设我们guestbook的model类有个叫findme的函数:

class guestbook extends spModel
{
        public $pk = "id"; // 每个留言唯一的标志,可以称为主键
        public $table = "guestbook"; // 数据表的名称
  
        public $pagedata = null; // 定义成员变量来获取分页数据
        public function findme($condition, $page = 1, $pageSize = 10)
        {
                $result = $this->spPager($page, $pageSize)->findAll($condition); // 使用spPager
                $this->pagedata = $this->spPager()->getPager(); // 对成员变量赋值
                return $result;
        }  
}
?>
在控制器中:
$guestbook = spClass("guestbook"); 
$this->results = $guestbook->findme(array('name'=>'jake'), $this->spArgs('page', 1), 10 ); // 当前页是通过spArgs来输入
$this->pager = $guestbook->pagedata; // 获取guestbook的成员变量值,也就是分页数据
dump($this->pager);

2012-08-04 16:41:54