承接上一篇基本留言板教學,本文示範如何整合 Zend_Paginator 元件為留言列表加入分頁,提升大量資料時的瀏覽體驗與效能。
於 IndexController.php 的 indexAction() 中建立分頁器:
<?php
public function indexAction() {
$message = new Message();
$this->view->arrReviews = $message->getAllReMessage(); // 回覆資料不分頁
$page = 1;
$numPerPage = 3; // 每頁 3 筆
if (isset($_GET['page']) && is_numeric($_GET['page'])) {
$page = $_GET['page'];
}
$allMessages = $message->getAllMessage(); // 取得所有主留言陣列
$paginator = Zend_Paginator::factory($allMessages);
$paginator->setCurrentPageNumber($page)
->setItemCountPerPage($numPerPage);
$this->view->paginator = $paginator;
echo $this->view->render('header.phtml');
echo $this->view->render('message/index.phtml');
echo $this->view->render('footer.phtml');
}
?>
於 views/scripts/pagestyle.phtml 定義分頁 HTML 結構(採用 Elastic 模式):
<?php if ($this->pageCount): ?>
<div class="paginationControl">
<?php if (isset($this->previous)): ?>
<a href="/index/index/?page=previous; ?>">< 上一頁</a> |
<?php else: ?>
<span class="disabled">< 上一頁</span> |
<?php endif; ?>
<?php foreach ($this->pagesInRange as $page): ?>
<?php if ($page != $this->current): ?>
<a href="/index/index/?page="></a> |
<?php else: ?>
<span class="current"></span> |
<?php endif; ?>
<?php endforeach; ?>
<?php if (isset($this->next)): ?>
<a href="/index/index/?page=next; ?>">下一頁 ></a>
<?php else: ?>
<span class="disabled">下一頁 ></span>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if (count($this->paginator)): ?>
<?php $i = 1; foreach ($this->paginator as $message): ?>
<!-- 輸出單筆留言 HTML -->
<?php endforeach; ?>
<?php echo $this->paginationControl($this->paginator, 'Elastic', 'pagestyle.phtml'); ?>
<?php else: ?>
<p>目前沒有留言</p>
<?php endif; ?>
index.php 需定義常數 WEB_ROOT 供分頁連結生成絕對路徑。Zend_Paginator 也支援 Sliding、Jumping 等其他捲動模式,可依設計需求切換。含分頁功能的完整留言板專案可至 本站下載區 取得。