А за одно и спросить как лучше организовать подключение шаблона для ссылок.
Ведь что бы в шаблон устанавливались переменные приходится его инклудить каждый раз, а если страниц слишком много?
А как использовать буфферизацию для этих целей у меня пока башка не догоняет
/**
* Pagination
* @author Screamer <nwotnbm@gmail.com>
*/
class Pagination
{
/**
* @var (array) Parameters
*/
protected $_parameters = array(
// Current page
'current_page' => 1,
// Deal of items on page
'per_page' => 1,
// Base URL
'base_url' => '',
// Deal of all items
'total_rows' => 0,
);
/**
* @var (int) First page
*/
protected $_base_page = 1;
/**
* @var (int) Deal of pages
*/
protected $_num_pages = 0;
/**
* Constructor
* @return (void)
*/
public function __construct()
{
}
/**
* Prepare parameters for links
* @param (array) $parameters array with parameters
* @return (array) Start and end values
*/
public function prepare(array $parameters)
{
$allowed_keys = $this->_parameters;
if (!empty($parameters)) {
foreach ($parameters as $key => $value) {
if (in_array($key, $allowed_keys) && !empty($value)) {
$this->_parameters[$key] = $value;
unset($allowed_keys[$key]);
}
}
if (isset($allowed_keys['per_page'])) {
unset($allowed_keys['per_page']);
}
}
if (!empty($allowed_keys)) {
throw new Exception(__CLASS__ . ":Unable to prepare parameters");
}
// Detect base url
$this->_parameters['base_url'] = rtrim($this->_parameters['base_url'], '/') .'/';
// Detect current page
$this->_parameters['current_page'] = intval($this->_parameters['current_page']);
// Set current page to base page
if ($this->_parameters['current_page'] == 0) {
$this->_parameters['current_page'] = $this->_base_page;
}
// Calculate the deal of pages
$this->_num_pages = ceil($this->_parameters['total_rows'] / $this->_parameters['per_page']);
// If the page number beyond the result range the show last page
if ($this->_parameters['current_page'] > $this->_num_pages) {
$this->_parameters['current_page'] = $this->_num_pages;
}
// Return start and end values
return array(
'start' => ($this->_parameters['current_page'] * $this->_parameters['per_page'] - $this->_parameters['per_page']),
'end' => intval($this->_parameters['per_page']),
);
}
/**
* Create links
* @return (string)
*/
public function create_links()
{
if ($this->_parameters['total_rows'] == 0 || $this->_parameters['per_page'] == 0 || $this->_num_pages == 1) {
return '';
}
$output = array();
for ($i = 1; $i <= $this->_num_pages; $i++) {
if ($i >= $this->_base_page) {
if ($this->_parameters['current_page'] == $i) {
// Current page
$output[] = $i;
} else {
$output[] = '<a href="' . $this->_parameters['base_url'] . $i . '">' . $i . '</a>';
}
}
}
return implode(' | ', $output);
}
}