• Теория
  • Теория

Считаем смещение

Мы использовали функцию array_slice, чтобы вывести на страницу лишь шесть товаров. После этого вручную изменили значение переменной $offset, имитируя передвижение покупателя по страницам каталога. Но нам нужно, чтобы смещение считалось автоматически, в зависимости от страницы, на которой находится покупатель.

Номер страницы указан в параметере запроса page в адресной строке мини-браузера.

catalog.php?page=1

Получим значение этого параметра с помощью $_GET и сохраним его в переменной. Мы уже работали с параметрами запроса и $_GET.

$page = $_GET['page'];

Используем значение параметра, чтобы посчитать смещение для любой страницы каталога. Формула выглядит так:

$offset = ($page - 1) * $limit;

Смещение начинается с нуля, а отсчёт страниц — с единицы. Чтобы не пропустить первые шесть товаров, сначала вычтем единицу из номера страницы. Полученное число умножим на количество товаров на странице:

// Если не вычесть единицу:
$offset = 1 * 6; // Первая страница – смещение равно 6

// Правильная формула
$offset = (1 - 1) * 6; // Первая страница – смещение равно 0
$offset = (2 - 1) * 6; // Вторая страница – смещение равно 6
$offset = (3 - 1) * 6; // Третья страница – смещение равно 12

И так далее для любой страницы каталога. То, что нужно!

Посчитаем смещение, используя формулу и параметр из адресной строки. После этого изменим значение в адресной строке и убедимся, что на страницах выводятся правильные товары.

В первых частях, до знакомства с массивами, мы для простоты называли $_GET командой, но на самом деле это суперглобальный ассоциативный массив. Суперглобальные массивы, как встроенные функции, являются частью языка PHP. Подробнее о них вы можете почитать в документации.

Минимальный вид табов
  • index.html
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Числа и строки в PHP» тренажёра «Знакомство с PHP» можно после регистрации и оформления подписки.