Функция 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 позволяет использовать более простой подход с номерами страниц, в то время как без этого требуется работать с смещением.

4 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Article multicategories

Additional categories where this article is shown as similar.

Content author

Administrator

Offline

Administrator

Last logged: 2026-09-13 14:50

  • Page published: 2025-01-21 11:13
  • Last update: 2025-01-21 11:18