Статья о создании постраничной навигации (pagination) для Joomla!

Я покажу два способа создания постраничной навигации, с помощью модели JModelList и в обычной модели.

Для начала создадим модель для постраничной навигации:

<?php
defined( '_JEXEC' ) or die;
jimport( 'joomla.application.component.modellist' );
class ComponentNameModelModelName extends JModelList
{
	//Переопределяем методом для получения запроса
	protected function getListQuery()
	{
		//получаем объект конструктора запроса
		$query = $this->getDbo()->getQuery( true );
		//выбираем
		$query->select('*')->from('#__content');
		return $query;
	}
}

Модель очень проста, в ней единственный метод это getListQuery в котором есть запрос на выборку списка записей из таблички #__content, главное условие модель должна наследоваться от класса JModelList

Этого достаточно что бы организовать постраничную навигацию!

Для того что бы получить объект постраничной навигации нам нужно создать вид:

<?php
jimport( 'joomla.application.component.view' );
class ComponentNameViewModelName extends JViewLegacy
{
	//список записей
	protected $items;
	//объект постраничной навигации
	protected $pagination;
	//метод для отображения текущего вида
	public function display( $tpl = null )	{
		//получаем массив записей из модели
		$this->items = $this->get( 'Items' );
		//Получаем объект постраничной навигации
		$this->pagination = $this->get( 'Pagination' );
		//выводим шаблон вида
		parent::display( $tpl );
	}
}

Далее в шаблоне вида мы можем использовать объект $pagination для вывода постраничной навигации и дополнительных полей!

Например:

echo $this->pagination->getPagesLinks();

Выведет нам - В начало Вперед 1 2 3 4 5 6 7 8 9 10 Назад В конец

 

Код:

echo $this->pagination->getPagesCounter();

Выдаст - Страница 1 из 5

 

Код:

echo $this->pagination->getResultsCounter();

Выдаст - Показано 1 - 10 из 49

 

Код:

echo $this->pagination->getListFooter();

Выдаст блок с элементами как на изображении ниже: блок с getListFooter

 

Код:

echo $this->pagination->getLimitBox();

Выдаст выпадающий список для выбора количества строк выводимых на страницу:

 

Если же по каким то причинам мы не можем унаследоваться от класса JModelList то для создания постраничной навигации мы можем использовать такой код:

<?php
defined( '_JEXEC' ) or die;
jimport( 'joomla.application.component.modellegacy' );

class ComponentNameModelModelName extends JModelLegacy
{
	//текущая страница
	private $limitstart;
	//количество записей на странице
	private $limit;
	//конструктор класса
	public function __construct( $config = array() )
	{
		parent::__construct( $config );
		$app = JFactory::getApplication();
		//получаем объект для обработки пользовательского ввода
		$input = $app->input;
		//Получаем текущую страницу
		$this->limitstart = $input->get( 'start', 0 );
		//Определяем количество строк выводимых на страницу
		$this->limit = $app->getUserStateFromRequest( 'global.list.limit', 'limit', $app->getCfg( 'list_limit' ), 'uint' );
	}
	//Получение списка записей
	public function getItems()
	{
		//возвращаем список записей! первый параметр метода _getList это запрос
		//второй текущая страница последний количество записей выводимых на странице
		return $this->_getList( $this->getListQuery(), $this->limitstart, $this->limit );
	}
	//метод для получения запроса
	private function getListQuery()
	{
		//получаем объект конструктора запроса
		$query = $this->getDbo()->getQuery( true );
		//выбираем
		$query->select( '*' )->from( '#__content' );
		return $query;
	}
	//метод для получения общего количества записей по нашему запросу в таблице
	private function getTotal()
	{
		return $this->_getListCount( $this->getListQuery() );
	}
	//Метод для получения объекта пагинации
	public function getPagination()
	{
		//подключаем класс пагинации
		jimport( 'joomla.html.pagination' );
		//возвращаем объект пагинации первый параметр это общее количество записей в таблице по нашему запросу
		//второй текущая страниц и последний это количество записей выводимых на странице
		return new JPagination( $this->getTotal(), $this->limitstart, $this->limit );
	}
}

Получение пагинации в виде и вывод пагинации в шаблоне нашего вида происходит точно так же как и в примере выше!

Так же вам могут пригодиться статьи:
Переопределение постраничной навигации Joomla
Обработка пользовательского ввода в Joomla 2.5 (JInput)
Конструктор запросов в Joomla