A PHP Error was encountered

Severity: 8192

Message: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead.

Filename: mysql/mysql_driver.php

Line Number: 303

PHP: Постраничная навигация - вывод данных с использованием массива

PHP: Постраничная навигация - вывод данных с использованием массива

Автор: Mowshon.
Опубликовано 4 августа 2011
в рубрике PHP, Примеры

Просмотров: 5686.
Подписаться на комментарии по RSS.

PHP: Постраничная навигация - вывод данных с использованием массива

Разбиение на страницы в PHP это тема, которая описана во многих учебниках, и поэтому весьма насыщенна. Я не собираюсь вносить абсолютно новые концепции, но в данной статье я объясню, как можно использовать разбиение на страницы для данных, хранящихся в массиве.

Но зачем кому-то может понадобиться разбиение на страницы данных, находящихся в массиве? Как правило, разбивать данные на страницы нужно только тогда, когда их довольно много, но в этом случае вы, скорее всего, будете использовать базу данных. Конечно, с использованием систем баз данных разбить данные на страницы очень легко, указав смещение в SQL запросе. Но что, если данные поступают не из таблицы базы данных, а из обычного текстового файла?

Посмотрим на код, в котором показано как это можно сделать.

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

В строках 12 и 13 устанавливаем переменные $start и $end, которые вы могли узнать, если работали с SQL запросами раньше. Переменные $start и $end содержат наименьший и наибольший идентификатор элемента, который должен отображаться на данной странице.

Теперь в строке 15 обрабатываем каждый элемент данных в цикле foreach. Внутри цикла условный оператор проверяет, что идентификатор текущего элемента данных больше или равен значению $start и меньше значения $end. Если условие выполняется, то записываем копию элемента в массив $pagedData.

После завершения цикла foreach массив $pagedData содержит все элементы, которые должны отображаться на текущей странице. Теперь нужно вывести элементы с помощью цикла, как показано в следующем фрагменте кода.

<?php
foreach($pagedData AS $item)   
    echo $item . "<br>";
?>

Теперь, всё что осталось сделать, это отобразить страничные ссылки для перехода между страницами.

<?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 работало.

Оставьте комментарий!

Гость
Комментатор / хотите им стать

Чтобы стать комментатором введите email и пароль. Напишите комментарий. В дальшейшем ваша связка email-пароль, позволит вам комментировать и редактировать свои данные. Не забудьте про активацию (инструкция придет на ящик, указанный при регистрации).

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)