Разбиение на страницы в PHP это тема, которая описана во многих учебниках, и поэтому весьма насыщенна. Я не собираюсь вносить абсолютно новые концепции, но в данной статье я объясню, как можно использовать разбиение на страницы для данных, хранящихся в массиве.
Но зачем кому-то может понадобиться разбиение на страницы данных, находящихся в массиве? Как правило, разбивать данные на страницы нужно только тогда, когда их довольно много, но в этом случае вы, скорее всего, будете использовать базу данных. Конечно, с использованием систем баз данных разбить данные на страницы очень легко, указав смещение в SQL запросе. Но что, если данные поступают не из таблицы базы данных, а из обычного текстового файла?
Посмотрим на код, в котором показано как это можно сделать.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php // Данные, обычно из текстового файла или другого источника $data = "Item 1|Item 2|Item 3|Item 4|Item 5|Item 6|Item 7|Item 8|Item 9|Item 10"; // Записываем данные в массив $dataArray = explode('|', $data); // Получаем текущую страницу $currentPage = trim($_REQUEST[page]); // Настройки разбиения на страницы $perPage = 3; $numPages = ceil(count($dataArray) / $perPage); if(!$currentPage || $currentPage > $numPages) $currentPage = 0; $start = $currentPage * $perPage; $end = ($currentPage * $perPage) + $perPage; // Нужные страницы foreach($dataArray AS $key => $val) { if($key >= $start && $key < $end) $pagedData[] = $dataArray[$key]; } ?> |
Для начала я создал массив $data, который содержит длинный набор элементов, разделенных символом вертикальной черты '|'. Элементы приведены в качестве примера, массив должен содержать реальные данные. Затем с помощью функции explode() я разбил переменную $data на массив, используя '|' в качестве разделителя.
Строка 6 просто получает номер текущей страницы, если он передан.
Строки с 8 по 13 выполняют математические расчеты, которые требуются, чтобы разбиение на страницы работало. Сначала мы устанавливаем количество элементов, отображаемых на странице, в переменной $perPage. В вышеприведенном примере я установил данное значение равным 3.
В строке 9 мы просто выясняем, сколько страниц должно быть. Это можно сделать путем деления общего количества элементов (с помощью функции count()) на количество элементов на странице. Обратите внимание, что в этой строке я также использую функцию ceil(). Функция просто округляет число до большего целого (например, 5,134 становится 6).
В строках 10 и 11 находится простой условный оператор, который устанавливает в 0 номер страницы, если он не был передан или номер страницы больше общего количества страниц. Это предотвращает доступ к страницам, для которых нет элементов.
Ценные советы и основы маркетинга в социальных сетях Вы найдете на pricesmm.com. Здесь представлен широкий спектр различной информации о том, как платно или бесплатно продвигать свои аккаунты, научиться не только быть популярным в сети, но и получать от этого стабильный и внушительный доход.
В строках 12 и 13 устанавливаем переменные $start и $end, которые вы могли узнать, если работали с SQL запросами раньше. Переменные $start и $end содержат наименьший и наибольший идентификатор элемента, который должен отображаться на данной странице.
Теперь в строке 15 обрабатываем каждый элемент данных в цикле foreach. Внутри цикла условный оператор проверяет, что идентификатор текущего элемента данных больше или равен значению $start и меньше значения $end. Если условие выполняется, то записываем копию элемента в массив $pagedData.
После завершения цикла foreach массив $pagedData содержит все элементы, которые должны отображаться на текущей странице. Теперь нужно вывести элементы с помощью цикла, как показано в следующем фрагменте кода.
1 2 3 4 |
<?php foreach($pagedData AS $item) echo $item . "<br>"; ?> |
Теперь, всё что осталось сделать, это отобразить страничные ссылки для перехода между страницами.
1 2 3 4 5 6 |
<?php if($currentPage > 0 && $currentPage < $numPages) echo '<a href="?page=' . ($currentPage - 1) . '">« Предыдущая страница</a><br>'; if($numPages > $currentPage && ($currentPage + 1) < $numPages) echo '<a href="?page=' . ($currentPage + 1) . '" class="right">Следующая страница »</a><br>'; ?> |
Приведенный выше фрагмент кода состоит из двух простых операторов if, которые отображают ссылки на предыдущую и следующую страницы.
Первый оператор if проверяет, что текущая страница больше 0 (на первой странице не должно быть ссылки на предыдущую страницу) и меньше общего количества страниц (чтобы не отображать страницы без данных).
Второй условный оператор проверяет, что общее число страниц больше номера текущей страницы (и вы не просматриваете последнюю страницу ) и после текущей страницы есть другие.
Просто, не так ли? Это всё, что нужно сделать, чтобы простое разбиение страниц на PHP работало.