當(dāng)天新聞?dòng)涗洸粩嘣黾拥臅r(shí)候,必然導(dǎo)致新聞列表不的加長(zhǎng)以致用戶不能在一屏內(nèi)顯示完所有內(nèi)容,致使用戶需要不停的拉動(dòng)滾動(dòng)條來(lái)獲取更多的內(nèi)容,這樣無(wú)形之中給用戶瀏覽新聞添加了不少障礙;因此對(duì)數(shù)據(jù)進(jìn)行分頁(yè)將是必然。之前做過(guò)網(wǎng)站的都應(yīng)該知道分頁(yè)樣式及功能的實(shí)現(xiàn)有多種方法,分頁(yè)可以根據(jù)不同的需要進(jìn)行定制,但有一個(gè)缺點(diǎn)就是開(kāi)發(fā)者基本上都需要自已寫一個(gè)分頁(yè)類庫(kù)來(lái)加以調(diào)用。ZF2為了減少開(kāi)發(fā)自已類庫(kù)的麻煩ZF2類庫(kù)本身就已經(jīng)集成了分頁(yè)的類庫(kù),ZF2提供的分頁(yè)類庫(kù)簡(jiǎn)單易用,開(kāi)發(fā)都也可以根據(jù)需要重寫分頁(yè)類或?qū)Ψ诸惖腃SS樣式進(jìn)行重新設(shè)定;接下來(lái)的內(nèi)容將重點(diǎn)講解ZF2分頁(yè)類庫(kù)的使用方法。
### 6.2.1 修改模塊配置文件
打開(kāi)文件 `/module/Application/config/module.config.php`,對(duì)news 路由區(qū)段塊進(jìn)行修改,具體修改內(nèi)容如下:
~~~
'news'=>array(
'type'=>'segment',
'options'=>array(
'route'=>'/news[/][:action][[/:id][/page/:page]]',
'constraints'=>array(
'action'=>'[a-zA-Z]*',
'id'=>'[0-9]+',
'page'=>'[0-9]+',
),
'defaults'=>array(
'controller'=>'Application\Controller\News',
'action'=>'index'
),
),
)
~~~
修改的地址:
'route'=>'/news[/][:action][/:id]' 修改為 'route'=>'/news[/][:action][[/:id][/page/:page]]' 此處修改的主要作用是為使用路由能匹配出/page/n 這樣的分頁(yè)鏈接路徑
添加page'=>'[0-9]+' 路由正則區(qū)別規(guī)則
### 6.2.2 修改模型文件
打開(kāi)文件 `/module/Application/src/Model/NewsTable.php`,修改public function fetchAll(){}函數(shù),具體內(nèi)容如下:
~~~
public function fetchAll($paginated=false) {
if($paginated){
$select = new Select('news');
$rs = new ResultSet();
$rs->setArrayObjectPrototype(new News());
$pageAdapter = new DbSelect($select,$this->tableGateway->getAdapter(),$rs);
$paginator = new Paginator($pageAdapter);
return $paginator;
}
$resultSet = $this->tableGateway->select();
return $resultSet;
}
~~~
代碼解釋:
if($paginated){} 判斷是否使用分頁(yè)
$select = new Select('news'); 實(shí)例化一個(gè) select ,對(duì)指定表進(jìn)行操作
$rs = new ResultSet(); 實(shí)例化一個(gè)結(jié)果集,用來(lái)保存查詢結(jié)果
$rs->setArrayObjectPrototype(new News()); 設(shè)置結(jié)果集的操作屬性
$pageAdapter = new DbSelect($select,$this->tableGateway->getAdapter(),$rs); 實(shí)例化一個(gè)DbSelect,并通過(guò)數(shù)據(jù)網(wǎng)關(guān)及select來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,并將最終結(jié)果傳遞到$rs結(jié)果集中
$paginator = new Paginator($pageAdapter); 實(shí)例化一個(gè)分頁(yè)導(dǎo)航,并將DbSelect 傳遞過(guò)去
return $paginator; 返回分頁(yè)導(dǎo)航實(shí)例
### 6.2.3 修改控制器文件
打開(kāi)文件 `/module/Application/src/Application/Controller/NewsController.php`,對(duì)`public function listAction(){}` 方法進(jìn)行修改,具體內(nèi)容如下:
~~~
public function listAction(){
$paginator = $this->getNewsTalbe()->fetchAll(true);
$paginator->setCurrentPageNumber((int)$this->params()->fromRoute('page',1));
$paginator->setItemCountPerPage(5);
return new ViewModel(array('paginator'=>$paginator));
}
~~~
代碼解釋:
$paginator = $this->getNewsTalbe()->fetchAll(true); 表示使用分頁(yè)技術(shù)進(jìn)行操作
$paginator->setCurrentPageNumber((int)$this->params()->fromRoute('page',1)); 設(shè)置當(dāng)前頁(yè),如果不存在頁(yè)面則默認(rèn)設(shè)置為第一頁(yè)
$paginator->setItemCountPerPage(5);設(shè)置每個(gè)分頁(yè)將顯示的記錄行數(shù)
return new ViewModel(array('paginator'=>$paginator)); 將分頁(yè)導(dǎo)航對(duì)象返回給模板調(diào)用
### 6.2.4 添加分頁(yè)導(dǎo)航模板
添加文件 `/module/Application/view/application/partial/parginator.phtml`, 具體內(nèi)容如下:
~~~
<?php if ($this->pageCount): ?>
<div class="pagination pagination-centered">
<ul>
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
<li>
<a href="<?php echo $this->url($this->route) . $this->action; ?>/page/<?php echo $this->previous;?>"><<</a>
</li>
<?php else: ?>
<li class="disabled">
<a href="#">
<<
</a>
</li>
<?php endif; ?>
<?php foreach ($this->pagesInRange as $page): ?>
<?php if ($page != $this->current): ?>
<li>
<a href="<?php echo $this->url($this->route) . $this->action; ?>/page/<?php echo $page; ?>">
<?php echo $page; ?>
</a>
</li>
<?php else: ?>
<li class="active">
<a href="#"><?php echo $page; ?></a>
</li>
<?php endif; ?>
<?php endforeach; ?>
<?php if (isset($this->next)): ?>
<li>
<a href="<?php echo $this->url($this->route) . $this->action; ?>/page/<?php echo $this->next; ?>">
>>
</a>
</li>
<?php else: ?>
<li class="disabled">
<a href="#">
>>
</a>
</li>
<?php endif; ?>
</ul>
</div>
<?php endif; ?>
~~~
代碼解釋:
if ($this->pageCount) 判斷分頁(yè)數(shù)量決定是否顯示分頁(yè)導(dǎo)航
if (isset($this->previous)) 判斷是否有上一頁(yè)
<a href="<?php echo $this->url($this->route) . $this->action; ?>/page/<?php echo $this->previous;?>"><<</a>上一頁(yè)鏈接
foreach ($this->pagesInRange as $page) 循環(huán)首頁(yè)鏈接頁(yè)碼
<a href="<?php echo $this->url($this->route) . $this->action; ?>/page/<?php echo $page; ?>"><?php echo $page; ?></a>生成各頁(yè)的導(dǎo)航鏈接
if (isset($this->next)) 判斷是否有下一頁(yè)
<a href="<?php echo $this->url($this->route) . $this->action; ?>/page/<?php echo $this->next; ?>">>></a>下一頁(yè)鏈接
### 6.2.4 修改新聞列表模板
打開(kāi)文件 `/module/Appliction/view/application/news/list.phtml`,在此文件末尾添加收下內(nèi)容:
~~~
<?php
echo $this->paginationControl($this->paginator,'sliding',array('application/partial/paginator.phtml','News'),array('route'=>'news','action'=>'list'));
?>
~~~
此內(nèi)容的主要功能是將分頁(yè)模板輸出。
經(jīng)過(guò)以上內(nèi)容的添加修改整合后,現(xiàn)在可以通過(guò) http://localhost/news/list 看到新的新聞列表頁(yè),與之前唯一的不同之處就是有分頁(yè)導(dǎo)航條了,各個(gè)可能點(diǎn)擊分頁(yè)的頁(yè)面數(shù)字對(duì)各個(gè)頁(yè)面進(jìn)行切換顯示。結(jié)果如下:
~~~
header
Title
Content
Add news
First news
This is the first news
Edit Delete
Second news
This is the second news
Edit Delete
Third news
This is the third news
Edit Delete
fourth news
This is the fourth news
Edit Delete
Fifth news
This is the fifth news
Edit Delete
<< 1 2 >>
footer
~~~
- 序言
- 第1章 Zend Framework2 簡(jiǎn)介
- 1.1 Zend Framework2 簡(jiǎn)介
- 1.2 下載安裝
- 1.3 搭建開(kāi)發(fā)環(huán)境
- 第2章 創(chuàng)建ZF2項(xiàng)目
- 2.1 新建一個(gè)項(xiàng)目
- 2.2 配置網(wǎng)站
- 2.3 偽靜態(tài) .htaccess文件
- 2.4 添加啟動(dòng)/入口文件
- 2.5 添加全局配置文件
- 2.6 添加自動(dòng)加載文件 init_autoloader.php
- 2.7 IndexController 控制器
- 第3章 創(chuàng)建模塊文件
- 3.1 Module 文件
- 3.2 module.config 文件
- 3.2.1 router 路由配置
- 3.2.2 controllers控制器配置
- 3.2.3 view_manager 視圖管理器
- 3.2.4 service_manager 服務(wù)管理器
- 3.2.5 translator 翻譯器
- 3.2.6 navigation 導(dǎo)航條
- 第4章 創(chuàng)建控制器
- 4.1 控制器簡(jiǎn)介
- 4.2 新建控制器
- 4.3 添加控制器的Action
- 第5章 創(chuàng)建視圖模板
- 5.1 創(chuàng)建模板
- 5.2 模板配置
- 5.3 編寫布局和錯(cuò)誤異常模板
- 5.4 編寫Action 對(duì)應(yīng)的模板文件
- 5.5 訪問(wèn) IndexAction
- 第6章 創(chuàng)建模型
- 6.1 ORM 對(duì)象映射法
- 6.2 使用分頁(yè)導(dǎo)航
- 6.3 自定模型
- 6.4 章節(jié)總結(jié)
- 第7章 實(shí)例應(yīng)用
- 7.1 建立Album 模塊
- 7.2 添加模塊文件
- 7.3 添加模塊配置文件
- 7.4 創(chuàng)建數(shù)據(jù)表 album
- 7.5 添加模型文件
- 7.6 添加表單 AlbumForm
- 7.7 添加控制器 AlbumController
- 7.8 添加模板文件
- 第8章 用戶認(rèn)證
- 8.1 建立數(shù)據(jù)表
- 8.2 新建認(rèn)證類
- 8.3 引用認(rèn)證類
- 第9章 結(jié)束語(yǔ)
