class PostModel extends Model
{
public function findAll(array $options = array())
{
// merge defaults and options
$options = $this->getDefaultOptions($options);
$sql = "SELECT * FROM post ORDER BY id DESC";
// add limit
$sql = $this->limit($sql, $options);
try {
$stmt = $this->execute($sql);
return $stmt->fetchAll();
} catch (Exception $e) {
throw new ModelException($e->getMessage());
}
}
}
class PostsController extends Controller
{
public function indexAction($request)
{
$page = (int) $request->getParam('page', 1);
$options = array('page'=>$page, 'count'=>10);
$postModel = $this->getModel('Post');
$posts = $postModel->findAll($options);
$view = $this->getView();
$view->posts = $posts;
$view->pages = $postModel->paginate($options);
return $view;
}
}
views/posts/index.phtml
-------------------------------
<?php foreach ($view->posts as $post): ?>
<h2><?php echo $post->title ?></h2>
<p><?php echo $post->description; ?></p>
<?php endforeach; ?>
<?php include APP_DIR . '/views/partials/pagination.phtml'; ?>
views/partials/pagination.phtml
-------------------------------
<?php if ($view->pages->pageCount): ?>
<div class="pagination">
<ul>
<!-- Previous page link -->
<?php if (isset($view->pages->previous)): ?>
<li class="prev"><a href="<?php echo $view->pageUrl.$view->pages->previous ?>">Previous</a></li>
<?php endif; ?>
<!-- Numbered page links -->
<?php foreach ($view->pages->pagesInRange as $page): ?>
<?php if ($page != $view->pages->current): ?>
<li><a href="<?php echo $view->pageUrl.$page ?>"><?php echo $page; ?></a></li>
<?php else: ?>
<li class="active"><a href="#"><?php echo $page; ?></a></li>
<?php endif; ?>
<?php endforeach; ?>
<!-- Next page link -->
<?php if (isset($view->pages->next)): ?>
<li class="next"><a href="<?php echo $view->pageUrl.$view->pages->next ?>">Next</a></li>
<?php endif; ?>
</ul>
</div>
<?php endif; ?>