實例化一個分頁類,$array是從數據表內讀數據的類方法:
1
|
$paginator
=
new
Zend_Paginator(
new
Zend_Paginator_Adapter_Array(
$array
));
|
設置當前頁碼:
1
|
$paginator
->setCurrentPageNumber(
$page
);
|
從URL獲取當前頁碼: (ZF Dream
)
1
|
$paginator
->setCurrentPageNumber(
$this
->_getParam(
'page'
));
|
把分頁內容發到視圖:
1
|
$this
->view->paginator =
$paginator
;
|
當然視圖那裏必須有$this->paginator接收,象這樣:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<html>
<body>
<h1>Example</h1>
<?php
if
(
count
(
$this
->paginator)): ?>
<ul>
<?php
foreach
(
$this
->paginator
as
$item
): ?>
<li><?php
echo
$item
; ?></li>
<?php
endforeach
; ?>
</ul>
<?php
endif
; ?>
<?php
echo
$this
->paginationControl(
$this
->paginator,
'Sliding'
,
//頁碼樣式
'my_pagination_control.phtml'
);
//頁碼模板?>
</body>
</html>
|
下面是幾種頁碼樣式: (ZF Dream )
All:顯示所有頁;
Elastic:Google式,頁碼範圍會根據用戶當前頁而擴展或縮小;
Jumping:頁碼最後頁之後會顯示第一頁;
Sliding:Yahoo式,當前頁會放在頁碼中間,這是默認樣式。
當然,paginationControl也可以不在視圖中設置,而是寫在控制器中:
1
2
3
4
5
6
7
8
9
10
|
Zend_Paginator::setDefaultScrollingStyle(
'Sliding'
);
Zend_View_Helper_PaginationControl::setDefaultViewPartial(
'my_pagination_control.phtml'
);
$paginator
->setView(
$view
);
|
官方手冊 提供了幾種頁碼模板的視圖寫法,偷懶的人可以直接複製過來用:
(1)Search pagination,效果如下:
(2)Item pagination,效果如下:
(3)Dropdown pagination,效果就是個下拉框選頁碼
下面是頁碼模板視圖中可以使用的一些佔位符,你要寫自己的頁碼模板時會有用,寫法是$this->first:
值 | 類型 | 解釋 |
first | integer | 第一頁的頁碼 |
firstItemNumber | integer | 當前頁上第一條記錄是整個記錄集的第幾條 |
firstPageInRange | integer | 第一個顯示出的頁碼(各頁碼樣式不同) |
current | integer | 當前頁碼 |
currentItemCount | integer | 本頁上的記錄有幾條 |
itemCountPerPage | integer | 每頁上最多可以顯示幾條記錄 |
last | integer | 最後一頁的頁碼 |
lastItemNumber | integer | 當前頁上最後一條記錄是整個記錄集的第幾條 |
lastPageInRange | integer | 最後一個顯示出的頁碼(各頁碼樣式不同) |
next | integer | 下一頁的頁碼 |
pageCount | integer | 一共多少頁 |
pagesInRange | array | 顯示在網頁上的頁碼數組(各頁碼樣式不同) |
previous | integer | 上一頁的頁碼 |
totalItemCount | integer | 一共有幾條記錄 |
下面是Paginator類的一些方法: (ZF Dream )
1、設置當前頁碼(默認是1)
1
|
$paginator
->setCurrentPageNumber(
$page
);
|
2、設置每頁顯示的最大數量(默認是10)
1
|
$paginator
->setItemCountPerPage(
$num
);
|
3、設置頁碼裏顯示多少頁(默認爲10頁)
1
|
$paginator
->setPageRange(
$page
);
|
注意:大多數時候這個數字會有用,但是不同的頁碼樣式會有不同的效果,比如Elastic會把這個數字作爲起始值
4、設置視圖,方便調用
1
|
$paginator
->setView(
$view
);
|
這裏$view就是當前視圖的對象。
×××××××××××××××××××××××××××××××××
zend分頁是按照同用sql來設計的(limit不考慮),所以爲了提高分頁的效率,不應該將這個數組放入zend_paginator的count中計算(幾千萬數據就傻了),所以應該使用
1.讀數據庫的count(*)
2.$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null(/**數量*/);
3.按limit讀數據庫表(即0,10->十條)
4.前臺顯示
分頁是假的 數據也是假的 就能提高讀取的速度 提高分頁的效率!