For creating pagination in zend framework 1 you have to perform several steps:
1) Set up pagination template.
Create file application/views/scripts/pagination.phtml:
For instance, you can create method getPaginator in your table model:
Add to application.ini:
Add in view template:
1) Set up pagination template.
Create file application/views/scripts/pagination.phtml:
<div> <ul class="pagination"> <?php if (isset($this->previous)): ?> <li><a href="<?= $this->url(array('page' => $this->first)); ?>"><span>«</span></a> <?php else: ?> <li class="disabled"><span>«</span></li> <?php endif; ?> <?php if (isset($this->previous)): ?> <li><a href="<?= $this->url(array('page' => $this->previous)); ?>">←</a></li> <?php else: ?> <li class="disabled"><span>←</span></li> <?php endif; ?> <!-- Numbered page links --> <?php foreach ($this->pagesInRange as $page): ?> <?php if ($page != $this->current): ?> <li><a href="<?= $this->url(array('page' => $page)); ?>"><?= $page; ?></a></li> <?php else: ?> <li class="active"><span><?= $page; ?></span></li> <?php endif; ?> <?php endforeach; ?> <!-- Next page link --> <?php if (isset($this->next)): ?> <li><a href="<?= $this->url(array('page' => $this->next)); ?>">→</a></li> <?php else: ?> <li class="disabled"><span>→</span></li> <?php endif; ?> <!-- Last page link --> <?php if (isset($this->next)): ?> <li><a href="<?= $this->url(array('page' => $this->last)); ?>">»</a></li> <?php else: ?> <li class="disabled"><span>»</span></li> <?php endif; ?> </ul> </div>2) Create an instance of Zend_Paginator with paginator adapter.
For instance, you can create method getPaginator in your table model:
/** * Class Application_Model_DbTable_Task */ class Application_Model_DbTable_Task extends Zend_Db_Table_Abstract { protected $_name = 'task'; protected $_rowClass = 'Application_Model_Task'; public function getPaginator(array $where = []) { $db = $this->getAdapter(); $select = $db->select(); $select->from($this->_name); foreach ($where as $key => $value) { $select->where($key, $value); } $select->order('created_at DESC'); $adapter = new Zend_Paginator_Adapter_DbSelect($select); $paginator = new Zend_Paginator($adapter); return $paginator; } }and in your controller:
$user = Application_Model_User::getCurrent(); $tableTask = new Application_Model_DbTable_Task(); $paginator = $tableTask->getPaginator(['id_user = ?' => $user->id]); $page = $this->getRequest()->getParam('page', 1); $paginator->setCurrentPageNumber($page); $config = $this->getInvokeArg('bootstrap')->getOptions(); $paginator->setItemCountPerPage($config['pagination']['per_page']); $this->view->paginator = $paginator;3) Configure pagination in settings file and in your bootstrap.
Add to application.ini:
pagination.per_page = 10and in bootstrap:
protected function _initPagination() { Zend_Paginator::setDefaultScrollingStyle('Sliding'); Zend_View_Helper_PaginationControl::setDefaultViewPartial( 'pagination.phtml' ); }4) Print pagination html.
Add in view template:
<?php if (count($this->paginator)): ?>where $item - a row from db
<?php foreach ($this->paginator as $item): ?>
<div class="item">
<?= $item['value'] ?> (<?= $item['state'] ?>)
</div>
<?php endforeach; ?>
<?php else: ?>
<div class="empty">
Nothing is found.
</div>
<?php endif; ?>
<?= $this->paginator ?>