Pagination, without (database) dependencies.
composer require voku/pagination- include the composer-autoloader
- instantiate a new object pass in the number of items per page and the instance identifier, this is used for the GET parameter such as ?p=2
- pass the set_total method the total number of records
- show the records
- call the page_links method to create the navigation links
use voku\helper\Paginator;
// include the composer-autoloader
require_once __DIR__ . '/vendor/autoload.php';
$pages = new Paginator(10, 'p');
$pages->set_total(100); // or a number of records
// display the records here
echo $pages->page_links();if using a database you limit the records by placing $pages->get_limit() in your query, this will limit the number of records
SELECT * FROM table $pages->get_limit()by default the page_links method created links starting with ? this can be changed by passing in a parameter to the method:
echo $pages->page_links('&');The method also allows you to pass in extra data such as a series of GET's
echo $pages->page_links('?' . 'status=' . $_GET['status'] . '&active=' . $_GET['active'] . '&');use voku\helper\Paginator;
// include the composer-autoloader
require_once __DIR__ . '/vendor/autoload.php';
// create new object pass in number of pages and identifier
$pages = new Paginator(10, 'p');
// get number of total records
$rowCount = $db->query('SELECT count(*) FROM table');
// pass number of records to
$pages->set_total($rowCount);
$data = $db->query('SELECT * FROM table ' . $pages->get_limit());
foreach($data as $row) {
// display the records here
}
// create the page links
echo $pages->page_links();using this class in an MVC environment its almost the same, only the database or dataset calls come from the model instead of the page directly.
in the controller:
use voku\helper\Paginator;
// create a new object
$pages = new Paginator(10, 'p');
// set the total records, calling a method to get the number of records from a model
$pages->set_total( $this->_model->get_all_count() );
// calling a method to get the records with the limit set
$data['records'] = $this->_model->get_all( $pages->get_limit() );
// create the nav menu
$data['page_links'] = $pages->page_links();
// then pass this to the view, may be different depending on the system
$this->_view->render('index', $data);use voku\helper\Paginator;
// include the composer-autoloader
require_once __DIR__ . '/vendor/autoload.php';
// create new object pass in number of pages and identifier
$pages = new Paginator(10, 'p');
// get number of total records
$rowCount = $db->query('SELECT COUNT(*) FROM table');
// pass number of records to
$pages->set_total($rowCount);
$data = $db->query('SELECT * FROM table ' . $pages->get_limit());
foreach($data as $row) {
// display the records here
}
// create the api-call
header('Content-Type: application/json');
echo json_encode($pages->page_links_raw());use voku\helper\Paginator;
// include the composer-autoloader
require_once __DIR__ . '/vendor/autoload.php';
$page = (int)$_GET['page'];
$perPage = (int)$_GET['per_page'];
$data = array('some', 'kind', 'of', 'data');
// use the helper-class to reduce the number of pages
$result = PaginatorHelper::reduceData($data, $perPage, $page);
// create the api-call
header('Content-Type: application/json');
echo json_encode($pages->page_links_raw());