CakePHP 2.x Pagination Tutorial: Helper, Conditions, Limit, Sorting and More!
CakePHP Pagination is one of the fastest thing you can code with this amazing framework. In this post I’m gonna show you how you can create a pagination script in matter of few minutes, or even seconds! Cool? Let’s get started.
This post is part of my CakePHP tutorial series, before you proceed to this, make sure you already installed your CakePHP poperly, know the CakePHP classes and naming conventions, and much better if you can code the CakePHP CRUD operations.
Video Demo
Here’s a video demo of what will be our code ouput.
Controller Code
On our controller, we are going to have a query the cakePHP way, we are going to have the following conditions:
- Won’t include the record with an ID of 6 (‘conditions’ => array(‘User.id !=’ => ’6′))
- We will limit to 3 records per page (‘limit’ => 3)
- Order the result by ID (‘order’ => array(‘id’ => ‘desc’)) in descending order
So here’s the code that will be added in our UsersController.php
public function view() {
// we prepare our query, the cakephp way!
$this->paginate = array(
'conditions' => array('User.id !=' => '6'),
'limit' => 3,
'order' => array('id' => 'desc')
);
// we are using the 'User' model
$users = $this->paginate('User');
// pass the value to our view.ctp
$this->set('users', $users);
}
The $users variable gives us an array that look like this:
View Code
On our view.ctp, our data is presented with a table. The table header contains the paginator sort() method for sorting the data using any fields you want (and you won’t have to create another query!)
The $this->Paginator object (pagination helper) also has lots of methods for paging, please see the ‘pagination section’ on the code block below.
Also we used the <div class=’paging’> which uses the CakePHP generic CSS. You can change that if you want and be creative with your paging UI design.
<?php
// so we use the paginator object the shorter way.
// instead of using '$this->Paginator' everytime, we'll use '$paginator'
$paginator = $this->Paginator;
if($users){
//creating our table
echo "<table>";
// our table header, we can sort the data user the paginator sort() method!
echo "<tr>";
// in the sort method, ther first parameter is the same as the column name in our table
// the second parameter is the header label we want to display in the view
echo "<th>" . $paginator->sort('id', 'ID') . "</th>";
echo "<th>" . $paginator->sort('firstname', 'Firstname') . "</th>";
echo "<th>" . $paginator->sort('lastname', 'Lastname') . "</th>";
echo "<th>" . $paginator->sort('username', 'Username') . "</th>";
echo "</tr>";
// loop through the user's records
foreach( $users as $user ){
echo "<tr>";
echo "<td>{$user['User']['id']}</td>";
echo "<td>{$user['User']['firstname']}</td>";
echo "<td>{$user['User']['lastname']}</td>";
echo "<td>{$user['User']['username']}</td>";
echo "</tr>";
}
echo "</table>";
// pagination section
echo "<div class='paging'>";
// the 'first' page button
echo $paginator->first("First");
// 'prev' page button,
// we can check using the paginator hasPrev() method if there's a previous page
// save with the 'next' page button
if($paginator->hasPrev()){
echo $paginator->prev("Prev");
}
// the 'number' page buttons
echo $paginator->numbers(array('modulus' => 2));
// for the 'next' button
if($paginator->hasNext()){
echo $paginator->next("Next");
}
// the 'last' page button
echo $paginator->last("Last");
echo "</div>";
}
// tell the user there's no records found
else{
echo "No users found.";
}
?>
Thanks for reading this tutorial code for pagination in CakePHP!
Hi! I'm Mike Dalisay, the co-founder of codeofaninja.com, a site that helps you build web applications with PHP and JavaScript. Need support? Comment below or contact [email protected]
I'm also passionate about technology and enjoy sharing my experience and learnings online. Connect with me on LinkedIn, Twitter, Facebook, and Instagram.