forge($name = 'default', $config = array())
forge 方法能建立一个新的分页实例,并且透过传递一个阵列来配置。
静态 | 是 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
参数 |
| |||||||||
回传 | Pagination | |||||||||
範例 |
|
Pagination 类别能让你简单地为你显示的纪录设立分页。
如何使用 Pagination 类别的简单例子,你可以将它放进你控制器内的 action 方法。
$config = array(
'pagination_url' => 'http://localhost/fuel/welcome/index/',
'total_items' => 10,
'per_page' => 5,
'uri_segment' => 3,
// 或者,如果你偏好透过查询字串的分页
//'uri_segment' => 'page',
);
// 建立一个名为 'mypagination' 的实例
$pagination = Pagination::forge('mypagination', $config);
$data['example_data'] = DB::select('id', 'value')
->from('pagination')
->limit($pagination->per_page)
->offset($pagination->offset)
->execute()
->as_array();
// 我们传递物件,当在检视中输出时它会被呈现
$data['pagination'] = $pagination;
// 回传检视
return \View::forge('welcome/index', $data);
$config = array(
'pagination_url' => 'http://localhost/fuel/posts/index/',
'total_items' => Model_Post::count(),
'per_page' => 10,
'uri_segment' => 3,
// 或者,如果你偏好透过查询字串的分页
//'uri_segment' => 'page',
);
$pagination = Pagination::forge('mypagination', $config);
$data['example_data'] = Model_Post::query()
->rows_offset($pagination->offset)
->rows_limit($pagination->per_page)
->get();
// 我们传递物件,当在检视中输出时它会被呈现
$data['pagination'] = $pagination;
// 回传检视
return \View::forge('posts/index', $data);
你可以透过几种方法配置分页实例。你可以传递一个带有配置的阵列当你锻造(forge)实例, 或者你可以直接在该实例上更新特性。
可定义以下的配置设定:
参数 | 类型 | 预设 | 描述 |
---|---|---|---|
pagination_url | 字串 |
| 你有分页页面的 URL,如果为 null,Fuel 尝试从目前的 URL 检测。 |
uri_segment | 整数|字串 |
| 包含页码的 URI 分段(如果为整数)。包含页码的查询字串栏位(如果为字串)。 |
num_links | 整数 |
| 要显示的连结总数。 |
total_items | 整数 |
| 项目总数。通常这是一个 count() 查询的结果。 |
per_page | 整数 |
| 每页笔数。 |
current_page | 整数 |
| 如果 URI 不存在页码时要载入的页面。如果没给,预设是 1。 |
show_first | 布林 |
| 产生一个「到第一页」连结如果为 true 并且不在第一页。 |
show_last | 布林 |
| 产生一个「到最后一页」连结如果为 true 并且不在最后一页。 |
link_offset | 整数/浮点数 |
| 在分页区块中活跃连结的偏移,无论是 0 到 1 之间的小数点,或 0 到 100 之间的整数(百分比)。 |
预设情况下,Pagination 类别会尝试定位活跃连结(目前页面) 在分页区块中间。
你可以使用配置中的 link_offset 值来控制此行为。这个值可以定义为 0 到 1 之间的浮点数,或 1 到 100 之间的整数(像百分比)。预设情况下,这个值是设为 0.5
(= 50%)。 如果你让值变小,活跃连结会往左移动,如果你让值变大, 活跃连结会往右移动。
让我们假设你有共 20 页可以显示。你已经设定 num_links 为 5,总共显示 5 页的连结, 而你显示上一页和下一页连结也是如此。你目前选择的是第 6 页。
, 保持选择的第 6 页恰好地在区块中间。«
4
5
67
8
»
会被显示,让选择的第 6 页为区块中的第一个连结。«
67
8
9
10
»
会被显示。«
2
3
4
5
6»
你可以使用範围内的任何值,要逐步转移活跃焦点往左或右。很明显地,你显示愈多连结, 就可以愈精细切换焦点。
这只会在有足够页面可以这样做的时候适用。如果你只有 5 页可用,你想要显示 5 个连结,而第 3 页是目前页面,没有显示上一页和下一页连结,目前页面会在中间,不管 link_offset 的设定是什幺。根本没有足够的页面可用来移动目前页面连结往左或右。
每个 Pagination 实例使用一个样板来产生需要用来建立分页标记的 HTML。 你可以在 config/pagination.php 档案中储存你的标准样板。 在你做任何修改之前,从核心 config 文件夹複製到你的 app config 文件夹。 预设配置档案配有三个样板,FuelPHP 预设以及相容 Twitter Bootstrap v2 和 v3 的样板。
以下样板条目必须被定义:
wrapper | 字串 |
| 将包裹产生的分页的标记。 |
---|---|---|---|
first | 字串 |
| 将被用来产生第一页的标记。 |
first-inactive | 字串 | 无 | 将被用来产生第一页的标记,如果此页是第一页或唯一。 |
first-inactive-link | 字串 | 无 | 将被用来产生第一页连结的标记,如果此页是第一页或唯一。 |
first-marker | 无 |
| 将被用来产生第一页标记的标记。 |
first-link | 字串 |
| 将被用来产生第一页连结的标记。 |
previous | 字串 |
| 将被用来产生上一页的标记。 |
previous-marker | 字串 |
| 将被用来产生上一页标记的标记。 |
previous-link | 字串 |
| 将被用来产生上一页连结的标记。 |
previous-inactive | 字串 |
| 将被用来为无效连结产生上一页的标记。 |
previous-inactive-link | 字串 |
| 将被用来为无效连结产生上一页连结的标记。 |
regular | 字串 |
| 将被用来产生其他页面的标记。 |
regular-link | 字串 |
| 将被用来产生其他页面连结的标记。 |
active | 字串 |
| 将被用来产生目前页面的标记。 |
active-link | 字串 |
| 将被用来产生目前页面连结的标记。 |
next | 字串 |
| 将被用来产生下一页的标记。 |
next-marker | 字串 |
| 将被用来产生下一页标记的标记。 |
next-link | 字串 |
| 将被用来产生下一页连结的标记。 |
next-inactive | 字串 |
| 将被用来为无效连结产生下一页的标记。 |
next-inactive-link | 字串 |
| 将被用来为无效连结产生下一页连结的标记。 |
last | 字串 |
| 将被用来产生最后一页的标记。 |
last-marker | 字串 |
| 将被用来产生最后一页标记的标记。 |
last-link | 字串 |
| 将被用来产生最后一页连结的标记。 |
last-inactive | 字串 | 无 | 将被用来产生最后一页的标记,如果此页是最后一页或唯一。 |
last-inactive-link | 字串 | 无 | 将被用来产生最后一页连结的标记,如果此页是最后一页或唯一。 |
在样板中,{uri} 将被产生的分页连结取代(# 如果是非活跃样板), 并且 {page} 被页码或上一个/下一个标记取代。 如果你想要在这些标记使用图像,只要修改定义在样板中相应的连结, 用图像标记取代 {page}。
当你锻造 Pagination 实例时所传递的配置将与定义在你配置档案中的预设样板合併。 这能让你指传递你想要覆写值。 如果你在配置档案中的样板不完整, 上面所提的预设值将被使用。
forge 方法能建立一个新的分页实例,并且透过传递一个阵列来配置。
静态 | 是 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
参数 |
| |||||||||
回传 | Pagination | |||||||||
範例 |
|
instance 方法能让你检索先前锻造的实例,或回传预设实例如果没给名称的话。
静态 | 是 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 混合,一个 Pagination 物件,或 flase 如果请求的实例不存在。 | ||||||
範例 |
|
render 方法产生在检视中显示分页连结的标记。
静态 | 否 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 字串 | ||||||
範例 |
|
分页物件包含一个 __toString() 方法,当你写出该物件、或转为字串时, 会造成 render() 方法被呼叫。
first 方法为分页产生显示「第一页」连结的标记。 如果没给字串用来做为标记,来自样板的 "first-marker" 值会被使用。
静态 | 否 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 字串 | ||||||
範例 |
|
「第一页」连结将只在有第一页,而你不在第一页时显示。 请注意,预设情况下,没有为 'first' 定义无效连结。
previous 方法为分页产生显示「上一页」连结的标记。 如果没给字串用来做为标记,来自样板的 "previous-marker" 值会被使用。
静态 | 否 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 字串 | ||||||
範例 |
|
next 方法为分页产生显示「下一页」连结的标记。 如果没给字串用来做为标记,来自样板的 "next-marker" 值会被使用。
静态 | 否 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 字串 | ||||||
範例 |
|
last 方法为分页产生显示「最后一页」连结的标记。 如果没给字串用来做为标记,来自样板的 "last-marker" 值会被使用。
静态 | 否 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 字串 | ||||||
範例 |
|
「最后一页」连结将只在有任何页面,而你不在最后一页时显示。 请注意,预设情况下,没有为 'last' 定义无效连结。
pages_render 方法为分页产生显示在上一页及下一页之间的页面连结的标记。
静态 | 否 |
---|---|
参数 | 无 |
回传 | 混合 |
範例 |
|
为了方便你, Pagination 类别也有一个只对预设实例操作的静态介面。
get 方法能让你在预设实例取得一个配置项目。
静态 | 是 | ||||||
---|---|---|---|---|---|---|---|
参数 |
| ||||||
回传 | 混合,特性值、或 null 如果特性不存在。 | ||||||
範例 |
|
set 方法能让你在预设实例设定一个配置项目为所给的值。
静态 | 是 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
参数 |
| |||||||||
回传 | 空 | |||||||||
範例 |
|
为了向下相容,静态方法 set_config()、create_links()、 next_link() 和 prev_link() 将被模拟在预设实例, 以最小化升级一个已存在的应用程序到 FuelPHP v1.4+ 的迁移影响。
请注意,现下没有可能的方法模拟直接存取静态类别特性, 所以如果你的应用程序使用的话,你将必须改变它们:
// v1.4 前用法:
Pagination::$per_page = 10;
// 新用法:
Pagination::set('per_page', 10);
// v1.4 前用法:
Model_Article::find()
->order_by('date', 'ASC')
->rows_offset(\Pagination::$offset)
->rows_limit(\Pagination::$per_page)
->get();
// 新用法:
Model_Article::query()
->order_by('date', 'ASC')
->rows_offset(\Pagination::get('offset'))
->rows_limit(\Pagination::get('per_page'))
->get();