Функция 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 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 11:13
  • Последнее обновление: 21.01.2025 11:18