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();