如何使用分页模块–kohana3使用手册
Kohana 3.0 带来了一个模块来协助给数据库记录分页。分页的作用是处理把数据库记录分成几个页面并且支持给用户上一页和下一页的链接。
下面的例子使用了 DB::select() 查询生成器,然而分页模块并不依赖任何类型的数据集。你可以使用这个模块而让用户不注意到数据页是通过了哪个数据源的。
启用模块
分页(Pagination)模块包含在了 Kohana3.0的安装中,但是你在使用前必须要启用它。像下列示例那样在你的 application/bootstrap.php 文件中修改 Kohana::modules() 方法的调用,使它包含 Pagination 模块
Kohana::modules(array(
‘userguide’ => MODPATH.’userguide’,
‘database’ => MODPATH.’database’, // Database access
‘pagination’ => MODPATH.’pagination’,
));
基本用法
下面的控制器用查询生成器从数据库加载了一个记录集。生成了一个允许用户一页页浏览记录的分页控件。
public function action_page()
{
// 定义我们的模板视图,绑定变量
$this->template->content = View::factory('page/list')
->bind('results', $results)
->bind('page_links', $page_links);
// 从数据库获得记录总数
$count = DB::select(DB::expr('COUNT(*) AS mycount'))->from('users')->execute('alternate')->get('mycount');
// Create an instance of Pagination class and set values
$pagination = Pagination::factory(array(
'total_items' => $count,
'items_per_page' => 20,
));
// 加载当前页面的指定结果集
$results = DB::select()->from('users')
->order_by('id','ASC')
->limit($pagination->items_per_page)
->offset($pagination->offset)->execute();
// 生成分页链接
$page_links = $pagination->render();
}
注意:$pagination->offset 在3.0.2版本才被支持。
高级用法
你可以在创建类实例的时候按所定义的配置来修改分页(pagination)类如何运行以及提供的链接
$pagination = Pagination::factory(array(
‘current_page’ => array(‘source’ => ‘query_string’, ‘key’ => ‘p’),
‘total_items’ => $count,
‘items_per_page’ => 40,
‘view’ => ‘pagination/page_links’,
‘auto_hide’ => FALSE,
));
使用配置(config)文件
分页(Pagination)类使用一个配置文件来决定要使用的默认设置。这个配置会和创建一个新类实例的时候定义的配置合并。
创建你自己的配置文件,把 modules/pagination/config/pagination.php 文件复制到 application/config/pagination.php
cp modules/pagination/config/pagination.php application/config/pagination.php
这里是一个定制配置的示例
return array(
'default' => array(
'current_page' => array('source' => 'query_string', 'key' => 'p'),
'total_items' => 0,
'items_per_page' => 40,
'view' => 'pagination/pretty',
'auto_hide' => FALSE,
),
);
配置设置的说明
■ 数组current_page : 是一个定义了当前页面 source和key的数组。Source可以是route或者query_string 而 key 可以是任何你想用到的字符串。
如果 source = route 那么分页(Pagination)类会从当前路由需找key
如果 source = query_string 那么分页(Pagination)类会从当前查询的字符串(query string)中寻找 key
■ 整型 total_items: 将包含所有通过分页的项数。这是仅有的一个需要在分页(Pagination)类实例被创建时同时要设置的一个配置。
■ 整型 items_per_page:每页显示的项数
■ 字符串 view:记录集分页的链接所用到的视图文件。
■ 布尔值 auto_hide:如果设置为 true,render()方法将在总页面数小于或者等于1的时候不返回任何值。