Наверх

Постраничная навигация

Модуль предназначен для формирования постраничной навигации контента. Модуль состоит только из подключаемой части и шаблона.

Подключение

Подключаемая часть – файл modules/paginator/paginator.inc.php. В нем описан класс Paginator_inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_paginator. Экземпляр класса создается при первом вызове переменной.

Свойства

var nastr – количество элементов, показанных на странице.

Пример:

// определение переменной в коде программы имеет больший приоритет,
// чем определение соотвествующего поля в настройках модуля
$this->diafan->_paginator->nastr = 30;

var variable = 'page' – название переменной, содержащей номер страницы.

Если одновременно нужно подключить две постраничные навигации, то задаем свойство variable для дополнительной навигации отличное от page.

Пример:

Комментарии, подключенные к категории новостей не могу быть разбиты на странице с помощью переменной page (http://site.ru/news/page2/), так как эта переменная используется постраничной навигации новостей в категории. Поэтому исопльзуется дополнительная переменная dpage (http://site.ru/news/dpage2/).

$this->diafan->_paginator->variable = 'dpage';

var navnastr = 10 – количество ссылок постраничной навигации, показанных на одной страние.

Пример:

// сокращаем количество ссылок в постраничной навигации
$this->diafan->_paginator->navnastr = 3;

// выведет:
// 1 2 3 ...» или « 6 7 8 »
// вместо
// 1 2 3 4 5 6 7 8 9 10 »

var navlink – ссылка на первую страницу.

Пример:

// адрес первой страницы счетчика просмотров фотографий
$this->diafan->_paginator->navlink = 'photo/counter/'.($this->diafan->_route->cat ? 'cat'.$this->diafan->_route->cat.'/' : '');

var page – номер страницы.

Пример:

// в особых случая постраничная навигации можно использовать свою переменную для постраничной навигации, заданную в виде GET переменной
$this->diafan->_paginator->page = !empty( $_GET["page"] ) ? intval($_GET["page") : 0;

var get_nav – GET переменные, участвующие в навигации для постраничного вывода.

Пример:

// добавляем ко всем ссылкам постраничной навигации
// GET-переменную с поисковым словом
if(! empty($_GET["searchword"])))
{
    
$this->diafan->_paginator->get_nav =
    
'?searchword='.$this->diafan->filter($_GET, "url", "searchword");
}

var urlpage = 'page%d/' – шаблон части ссылки, отвечающей за передачу номера страницы.

Пример:

//вместо переменной &nbsnavlink_tplp;можно задать utlpage, тогда navlink_tpl будет равна navlink + urlpage
$this->diafan->_paginator->urlpage = 'page%d/';

var polog – порядковый номер элемента, с которого начинается вывод элементов.

Пример:

// получаем список ссылок в постраничной навигации
$links = $this->diafan->_paginator->get();

// отправляем запрос к базе данных для получения списка новостей, ограниченных данной страницей
$result = DB::query_range("SELECT * FROM {news}",
$this->diafan->_paginator->polog, $this->diafan->_paginator->nastr);

var nen – количество элементов в списке.

Пример:

// количество новостей
$this->diafan->_paginator->nen = DB::query_result("SELECT COUNT(*) FROM {news}");

Методы

array get () – Формирует строку навигации.

Пример:

// получаем список ссылок в постраничной навигации
$links = $this->diafan->_paginator->get();

// подставляем полученные данные в шаблон
$this->result["paginator"] = $this->diafan->_tpl->get('get', 'paginator', $links);

Самый простой пример использования постраничной навигации.

Пример:

// общее количество новостей
$this->diafan->_paginator->nen = DB::query_result("SELECT COUNT(*) FROM {news}");

// постраничная навигация
$this->result["paginator"] = $this->diafan->_tpl->get('get', 'paginator', $this->diafan->_paginator->get());

// получение новостей для текущей страницы
$rows = DB::query_range_fetch_all("SELECT * FROM {news}", $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr);

Остальные свойства нужно добавлять по необходимости. Например, при поиске по товарам, чтобы добавить в навигацию условия поиска. Или для того, чтобы сделать дополнительную постраничную навигацию, как в комментариях.

Шаблон

В модуле имеется два шаблона: paginator.view.get.php и paginator.view.get_admin.php. Первый используется для пользовательской части, второй для административной. Вы можете создать свой шаблон и использовать его в своем модуле.

Файлы

  1. modules/paginator/paginator.inc.php – подключение для работы с постраничной навигацией;

  2. modules/paginator/paginator.install.php – установка модуля;

  3. modules/paginator/views/paginator.view.get.php – шаблон постраничной навигации для пользовательской части;

  4. modules/paginator/views/paginator.view.get_admin.php – шаблон постраничной навигации для административной части.

Ваши комментарии и дополнения

Добрый день. У нас на сайте строка с номерами страницы выводится внизу страницы. Подскажите, как сделать, чтобы строка с номерами страниц была как внизу страницы, так и наверху?
Здравствуйте!
Это в шаблоне модуля, где используется пагинация, нужно прописывать. Нампример, если речь про товары, то в шаблоне списка товаров modules/shop/views/shop.view.list.php. Код, который выводит пагинацию нужно над списком указать:
Код
//постраничная навигация
if (!empty($result["paginator"]))
{
echo $result["paginator"];
}
Марина добрый день, спасибо за ответ, но это не помогло, я так пробовал. Нужна такая конструкция страницы:
___________________________
номера страниц: << 1 2 3 4 >>

[ вывод списка товаров]

номера страниц: << 1 2 3 4 >>
___________________________

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

Возможно, не работает из-за того, что не тот файл правите. Скорее всего у Вас есть примененная тема и этот файл находится в ней. Посмотрите в папке custom/название_темы.
custom/ - такой папки у нас нет
Все, разобрался наконец, это была моя ошибка. Еще раз изучил страницу modules/shop/views/shop.view.list.php - я выставлял код пагинации в неправильном месте - перед выводом подкатегорий, а надо после них (это если у кого похожая задача встанет). Спасибо за помощь
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.