Авторизация







Регистрация / Забыли пароль?

Регистрация нового пользователя











< Назад

Восстановление пароля





< Назад

Добро пожаловать

Выход


Ежедневное обновление статей и уроков, будь в курсе, держи руку на пульсе событий!

Главная >> PHP

Постраничная навигация php


Для инфобизнеса и для ведения сайта своими руками, постраничная навигация просто необходима, она является важным инструментом в навигации ваших читателей. Ещё его называют пагинатор , механизмом разбиения большого куска информации на более мелкие и удобные для восприятия, а так же нумерации страниц.


  Я оформил её с помощью вот такой функции:
function paginator($mySql) {   }
  Входным параметром для неё будет MySql запрос, например такой
"SELECT COUNT(*) AS `id` FROM `LESSONS`"
  Далее создаём переменную $num в ней мы будем хранить количество статей, которое должно находиться на странице, в нашем примере я установлю 2, но число 10 мне кажется более лучшим, или кому как нравится) и установим правило для переменной GET с помощью которой мы будем скрипту передавать информацию о том, какую страницу выбрал пользователь. 
$nums = 2;

# Формируем входные данные
if (isset($_GET['PAGE'])) {
    $page = intval($_GET['PAGE']);
}
else {
    $page = 1;
}
  Сначала мы проверили на существование переменной if (isset($_GET['PAGE'])) если она есть, то приводим её в целочисленное значение стандартной функцией PHP intval(), это делается для того, чтобы человек который хочет нам навредить, не смог сделать это простым способом. Если же $_GET['PAGE'] не имеет значения, то переменная $page принимает 1, чтобы начать показ с первой страницы.
  Далее мы выполняем переданный нами функции MySql запрос
# Считаем количество записей в таблице
$sql = mysql_query($mySql) or die(mysql_error());
$row = mysql_fetch_assoc($sql);
$elements = $row['id'];

$pages = ceil($elements/$nums);
  В нём мы посчитали все записи (поля ID каждой из них) функцией MySql COUNT(*) AS `id` и получили результат в переменную  $row['id'], мы смело можем посчитать сколько страниц будет отображено внизу, для этого воспользуемся функцией ceil(кол-во всех элементов($elements) мы делим на то кол-во статей которые должны быть видимы на одной странице ($nums)) - она округляет дробь в большую сторону и запишем это значение в переменную $pages.
# Защищаемся от отрицательных значений
if ($page < 1) {
    $page = 1;
}
elseif ($page > $pages) {
    $page = $pages;
}


$start = ($page-1)*$nums;

# Если записей в базе пока нет
if ($start < 0) $start = 0;
  Для предотвращения ошибок, мы узнаем, является ли переменная $page отрицательным числом, если да, то приравниваем к 1, если она больше количества страниц, то делаем равным ему.
   Переменная $start нам пригодится когда мы будем переключаться по страницам, передадим её в запрос MySql который будет вытаскивать статьи из базы и правильно отображать их согласно переключателям. Для её формирования мы отнимаем от $page  1, это делается для MySql, так как его функция LIMIT отсчёт начинает с 0, т.е. для показа первой записи, запрос будет выглядеть так 
SELECT * FROM `LESSONS` ORDER BY `id` DESC LIMIT 0, 1
 где 0, это порядковый номер записи, а 1, это шаг. Чтобы вывести первую и вторую запись, можно изменить LIMIT 0, 2. После умножаем на количество страниц которое должно быть видно единовременно, то есть на $nums
# Показываем сами странички
$neighbours = 3;
$left_neighbour = $page - $neighbours;
if ($left_neighbour < 1) $left_neighbour = 1;

$right_neighbour = $page + $neighbours;
if ($right_neighbour > $pages) $right_neighbour = $pages;

$P;
if ($page > 1) {
    $P .= ' начало ... ←сюда ';
}

for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
    if ($i != $page) {
        $P .= ' ' . $i . ' ';
    }
    else {
        # Активная страница
        $P .= ' ' . $i . ' ';
    }
}

if ($page < $pages) {
    $P .= ' туда→ ... конец ';
}
  Переменная $neighbours отвечает за количество выводимых страниц до и после активной, вы можете ввести любое значение которое вам нравится. Для того, чтобы они выводились правильно, я ввёл ещё 2 переменных $left_neighbour и $right_neighbour, в них содержится разница значений, на каком мы удалении от первой страницы минус количество выводимых страниц до активной $left_neighbour = $page - $neighbours если значение получилось отрицательным, мы делаем его равным единицы чтобы не уходить в минус. 
  Так же дело обстоит и с переменной $right_neighbour за той лишь разницей, что мы ищем максимальное удаление от активной страницы $right_neighbour = $page + $neighbours, затем так же проверяем, если мы перешагнули максимум страниц, то $right_neighbour равно максимум, то есть $pages.
  И так, последние шаги, 2 условия if что находятся по обе стороны цикла for выполняют следующие проверки, верхний: если активная страничка не первая в списке, то добавляем ссылку на первую страницу, второе условие обратное и проверяет условие, если мы не дошли до конечной странички, то показывать ссылку на неё.
  И в середине цикл for который получает начальное и конечное значение генерируя ссылки с номерами страниц, а так же показывает активную, всё очень просто. Внутри цикла стоит одно условие if ($i != $page) до тех пор, пока количество страниц не дойдёт до той на которой мы сейчас, показываются ссылки с цифрами страниц, когда же дойдёт, то её мы выделяем жирным шрифтом и продолжаем движение пока не переберем всё. 
$arr = Array(0 => $P, 1 => $start.",".$nums);
return $arr; }
  Последний шаг, выводим результат. Здесь для вывода я использую функцию return и возвращаю массив, в котором первый элемент $arr[0] и будут наши странички, собственно наш пагинатор, $arr[1] содержит в себе начальное и конечное значение для MySql блока вывода миниатюр статей, и всё, закрывающаяся скобочка в конце }
  Использую данную функцию я следующим образом:
$startStop = paginator("SELECT COUNT(*) AS `id` FROM `LESSONS`");
getShortLessons($startStop[1]);
echo $startStop[0];

  В качестве примера приведу пример функции getShortLessons
function getShortLessons($startStop) {

$this->row = mysql_query("SELECT * FROM `LESSONS` ORDER BY `id` DESC LIMIT {$startStop}");
    while($this->res = mysql_fetch_array($this->rowt)) {
        echo $this->res['MY_TEXT'];
    }
}
  Весь код целиком:
//================================================
#На вход подаю MySQL запрос, выходит так -> paginator("SELECT COUNT(*) AS `id` FROM `LESSONS`")

function paginator($mySql) {

	$nums = 1;

# Формируем входные данные
if (isset($_GET['PAGE'])) {
    $page = intval($_GET['PAGE']);
}
else {
    $page = 1;
}

# Считаем количество записей в таблице
$sql = mysql_query($mySql) or die(mysql_error());
$row = mysql_fetch_assoc($sql);
$elements = $row['id'];

$pages = ceil($elements/$nums);

# Защищаемся от отрицательных значений
if ($page < 1) {
    $page = 1;
}
elseif ($page --> $pages) {
    $page = $pages;
}


$start = ($page-1)*$nums;

# Если записей в базе пока нет
if ($start < 0) $start = 0;

# Показываем сами странички
$neighbours = 3;
$left_neighbour = $page - $neighbours;
if ($left_neighbour < 1) $left_neighbour = 1;

$right_neighbour = $page + $neighbours;
if ($right_neighbour > $pages) $right_neighbour = $pages;

$P;
if ($page > 1) {
    $P .= ' начало ... ←сюда ';
}

for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
    if ($i != $page) {
        $P .= ' ' . $i . ' ';
    }
    else {
        # Активная страница
        $P .= ' ' . $i . ' ';
    }
}

if ($page < $pages) {
    $P .= ' туда→ ... конец ';
}

# Формируем сами странички и данные для основного запроса LIMIT $start.",".$nums)
$arr = Array(0 => $P, 1 => $start.",".$nums);
return $arr; }

//================================================
# Пример функции getShortLessons
function getShortLessons($startStop) {

$this->row = mysql_query("SELECT * FROM `LESSONS` ORDER BY `id` DESC LIMIT {$startStop}");
    while($this->res = mysql_fetch_array($this->rowt)) {
        echo $this->res['MY_TEXT'];
    }
}
//================================================
# Пример использования
$startStop = paginator("SELECT COUNT(*) AS `id` FROM `LESSONS`");
getShortLessons($startStop[1]);
echo $startStop[0];
Приятного использования данной функции, надеюсь она пригодится вам.
Дата публикации: 16.01.2013
Опубликовал: Сергей Кашурин
Просмотров: 531
Правила перепечатки

Правила перепечатки

Уважаемый посетитель сайта!
Ниже преведены условия использования и перепечатки материалов сайта /
Все материалы данного сайта подготовлены для Вас лично мной.

Большая часть материалов сайта - это авторские уроки, остальные, это переводы уроков с английского языка на русский.
Если Вы решили использовать материалы данного сайта где-то на своих ресурсах или в рассылке, то соблюдайте следующие требования:
1. Урок или статья должны перепечатываться «как есть» с сохранением всех ссылок на источник урока, а если это перевод, то и на сайт, авторы которого подготовили его.
2. Ссылки на сайт источника и переводчика обязательно должны быть работоспособными (при нажатии по ссылке человек должен перейти на сайт автора/переводчика). Если Вы перепечатали какой-либо документ, обязательно проверьте ссылку на работоспособность.
3. Искажение информации об авторе, источнике, переводчике при перепечатке материалов запрещено!
4. Содержание урока или статьи при перепечатке не должно подвергаться модификациям и переделке. Все уроки и статьи, размещенные на сайте, должны перепечатываться как есть. Вы не имеете права урезать, исправлять или иным образом коверкать републикуемый документ.
С уважением, Сергей Кашурин– владелец сайта /


25 поразительных анимаций CSS3, которые улучшат внешний вид вашего сайта
CSS3, сокращение от английского Cascading Style Sheets 3, третье поколение таблиц стилей, которые используются для визуального представления сайта, при минимальном размере кода. Этот последний многообещающий набор стандартов, состоит из большого числа функций и инструментов, которые позволяют улучшить и контролировать дизайн и увеличивать скорость загрузки сайта.
arcticModal - простые модальные окна jQuery
В поисках простого плагина для создания модальных окон, я перепробовал кучу вариантов, наткнувшись на arcticModal я остановился. Простота работы, вес самого плагина меня очень порадовали, поэтому поделюсь с вами я именно им, так как сам его проверял.
23 jQuery плагина для организации слайд-шоу и галерей на сайте
Дорогие Друзья! Сегодня, я хочу познакомить вас с подборкой замечательных jQuery плагинов для создания слайд-шоу и галерей. Все они являются бесплатными и очень просты в установке и настройке.

Уроки и статьи

«Найден Самый Дешевый и Эффективный Способ Рекламы в Интернете!»

Доказанo: ведение своей почтовой рассылки - это самый действенный и дешевый метод рекламы в Интернете.

Используете ли Вы его?

Если нет, то Вы давно теряете свои деньги! Если да, то пришло время вести Вашу почтовую рассылку на самом эффективном инструменте в Рунете - сервисе рассылок SmartResponder.ru

Узнать об этом подробнее >>

Быть в курсе всех событий: