Функция cot_import_pagenav в Cotonti
Функция cot_import_pagenav используется для обработки и импорта индексов пагинации на основе переданных параметров из URL, таких как номер страницы или смещение в запросе. Функция возвращает информацию, необходимую для реализации навигации по страницам.
Разбор функции cot_import_pagenav
Функция cot_import_pagenav используется для обработки и импорта индексов пагинации на основе переданных параметров из URL, таких как номер страницы или смещение в запросе. Функция возвращает информацию, необходимую для реализации навигации по страницам.
Код функции cot_import_pagenav
/**
* Imports pagination indexes
*
* @param string $varName URL parameter name, e.g. 'pg' or 'd'
* @param int $maxItems Max items per page
* @return array{0: int, 1: int, 2: ?int} Array containing 3 items: page number, database offset and argument for URLs
*/
function cot_import_pagenav($varName, $maxItems = 0)
{
if ($maxItems <= 0) {
$maxItems = Cot::$cfg['maxrowsperpage'];
}
if ($maxItems <= 0) {
throw new Exception('Invalid $max_items (' . $maxItems . ') for pagination.');
}
if (Cot::$cfg['easypagenav']) {
$page = (int) cot_import($varName, 'G', 'INT');
if ($page < 0) {
cot_die_message(404);
} elseif ($page == 0) {
$page = 1;
}
$offset = ($page - 1) * $maxItems;
$urlnum = $page <= 1 ? null : $page;
} else {
$offset = (int) cot_import($varName, 'G', 'INT');
if ($offset < 0) {
cot_die_message(404);
}
if ($offset % $maxItems != 0) {
$offset -= $offset % $maxItems;
}
$page = floor($offset / $maxItems) + 1;
$urlnum = $offset;
$urlnum = ($urlnum > 0) ? $urlnum : null;
}
return [$page, $offset, $urlnum];
}
Описание:
cot_import_pagenav($varName, $maxItems = 0)
Параметры:
$varName (string): Имя параметра в URL, который будет использоваться для указания номера страницы или смещения. Например, 'pg' или 'd'.
$maxItems (int): Максимальное количество элементов на странице. Если параметр не задан или равен 0, используется значение по умолчанию из конфигурации Cot::$cfg['maxrowsperpage'].
Возвращаемое значение:
Функция возвращает массив с тремя элементами:
Номер страницы (int).
Смещение в базе данных (int).
Аргумент для использования в URL (может быть null или int, зависит от настройки).
Логика работы:
Проверка значений:
Если $maxItems меньше или равно 0, то оно будет установлено в значение по умолчанию из конфигурации
(Cot::$cfg['maxrowsperpage']).
Если после этого значение $maxItems по-прежнему меньше или равно 0, выбрасывается исключение.
Обработка пагинации в зависимости от конфигурации:
Если в конфигурации включена easypagenav (Cot::$cfg['easypagenav']), то функция предполагает использование номера страницы:
Извлекается значение параметра $varName из URL с помощью cot_import.
Если значение страницы меньше 0, выводится ошибка 404.
Если значение страницы равно 0, оно будет преобразовано в 1.
Смещение вычисляется как (page - 1) * maxItems.
Если страница равна 1, то в URL параметр страницы может быть опущен (будет null).
В противном случае предполагается использование смещения:
Извлекается значение параметра $varName как целое число.
Если смещение меньше 0, выводится ошибка 404.
Если смещение не кратно $maxItems, оно округляется вниз до ближайшего значения, которое кратно $maxItems.
Номер страницы вычисляется как floor(offset / maxItems) + 1.
В URL будет передано именно значение смещения.
Возвращаемое значение:
Функция возвращает массив, состоящий из:
Номер страницы — это либо номер страницы (если используется easypagenav), либо вычисленный номер страницы на основе смещения.
Смещение — вычисленное смещение для базы данных.
Аргумент для URL — либо null (если страница 1), либо переданный номер страницы или смещение.
Пример использования:
$maxPageRowsPerPage = (int) Cot::$cfg['page']['cat___default']['maxrowsperpage'];
if ($maxPageRowsPerPage <= 0) {
$maxPageRowsPerPage = Cot::$cfg['maxrowsperpage'];
}
if (
!empty($c)
&& !empty(Cot::$cfg['page']['cat_' . $c])
&& !empty(Cot::$cfg['page']['cat_' . $c]['maxrowsperpage'])
) {
$maxPageRowsPerPage = (int) Cot::$cfg['page']['cat_' . $c]['maxrowsperpage'];
}
//page number for pages list
list($pg, $d, $durl) = cot_import_pagenav('d', $maxPageRowsPerPage);
// page number for cats list
list($pgc, $dc, $dcurl) = cot_import_pagenav('dc', Cot::$cfg['page']['maxlistsperpage']);
list($page, $offset, $urlnum) = cot_import_pagenav('pg', 10);
В этом примере:
'pg' — это имя параметра в URL, который будет указывать номер страницы.
10 — максимальное количество элементов на странице.
Если в URL будет передан параметр pg=3, то функция вернёт:
$page = 3
$offset = 20 (потому что (3 - 1) * 10 = 20)
$urlnum = 3 (так как это страница 3, и параметр страницы в URL не опускается).
Примечания:
Эта функция полезна для обработки пагинации на страницах с большим количеством элементов, например, на форумах, в списках товаров и так далее.
Включение easypagenav позволяет использовать более простой подход с номерами страниц, в то время как без этого требуется работать с смещением.
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-21 11:13
- Last update: 2025-01-21 11:18