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

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

Подключение

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

Свойства

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

Пример:

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

var navnastr = 10

массив названий переменных, содержащих номера страниц */ public static $variables = array();

/**
* @var integer количество ссылок постраничной навигации, показанных на одной странице
.

Пример:

// сокращаем количество ссылок в постраничной навигации
$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 last_page – номер последней страницы.

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}");

var show_more = false – ссылка "Показать ещё".

Методы

array get ([string $module = false], [string $action = false], [array $attributes = false]) – Формирует строку навигации.

  • string $module: имя модуля, обрабатывающего action события show_more
  • string $action: имя функции, обрабатывающей action события show_more
  • array $attributes: аргументы функции, обрабатывающей action события show_more

Пример:

// получаем список ссылок в постраничной навигации
$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/js/paginator.show_more.js – JS-сценарий модуля;

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

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

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

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

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

База знаний

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

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

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

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

01 июля 2017 г.
Возможно, не работает из-за того, что не тот файл правите. Скорее всего у Вас есть примененная тема и этот файл находится в ней. Посмотрите в папке custom/название_темы.
03 июля 2017 г.
Все, разобрался наконец, это была моя ошибка. Еще раз изучил страницу modules/shop/views/shop.view.list.php - я выставлял код пагинации в неправильном месте - перед выводом подкатегорий, а надо после них (это если у кого похожая задача встанет). Спасибо за помощь
03 сентября 2021 г.
Добрый день
В поиск лезут страницы с ложной пагинацией
То-есть
Последняя страница пагинации
/page26/
но в поиске есть страницы
/page28/
/page29/
Как они попадают в поиск?
В чём может быть проблема?
03 сентября 2021 г.
Цитата
Как они попадают в поиск?
В чём может быть проблема?

Например, в настройках модуля было 10 элементов на страницу, а сделали 12. Количество страниц закономерно сократилось.
Откройте сохранённую копию в поисковой системе и посмотрите, что там было
08 сентября 2021 г. , редакция: 08 сентября 2021 г.
Цитата
в настройках модуля было 10 элементов на страницу, а сделали 12

Ни как не могу найти где это меняется

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.