Авторизация







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

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











< Назад

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





< Назад

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

Выход


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

Главная >> 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
Опубликовал: Сергей Кашурин
Просмотров: 532
Правила перепечатки

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

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

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


110 бесплатных PSD элементов, для ваших слайдеров, лент, выпадающих меню навигации и аудио видео проигрывателей
Используйте бесплатно распространяемую графику, вместо того, чтобы тратить ваше драгоценное время, особенно, когда дело доходит до веб дизайна. Ведь его вы можете потратить на более нужные вещи, такие как проявление творчества. Чтобы сделать из вашего проекта конфетку, ниже приведены 110 бесплатных PSD элементов для создания слайдеров, лент, выпадающих меню навигации и аудио видео проигрывателей, полученных нами с различных веб-сайтов и отдельных лиц, которые вносят вклад в графику для дизайнеров, абсолютно бесплатно.
5 прекраснейших дизайнерских решений для ваших форм входа
Уважаемые друзья, в этом уроке, собраны 5 красивейших форм регистрации/авторизации, с пошаговым объяснением, и с возможность бесплатно скачать. Вы всё ещё думаете читать или нет? А кто-то уже вовсю пользуется ими!
100 бесплатных PSD элементов для веб-дизайна и мобильных устройств.
Всем привет! Давайте сегодняшний день сделаем исключением, и вместо урока, посмотрим очень классные PSD заготовки для веб-сайтов и мобильных приложений которые вы сможете бесплатно скачать!
таль электрическая г п 2т
Всем привет! Давайте сегодняшний день сделаем исключением, и вместо урока, посмотрим очень классные PSD заготовки для веб-сайтов и мобильных приложений которые вы сможете бесплатно скачать!
www.ean-com.ru схема адаптера юнискан
Всем привет! Давайте сегодняшний день сделаем исключением, и вместо урока, посмотрим очень классные PSD заготовки для веб-сайтов и мобильных приложений которые вы сможете бесплатно скачать!
sic marking e1 p123
Всем привет! Давайте сегодняшний день сделаем исключением, и вместо урока, посмотрим очень классные PSD заготовки для веб-сайтов и мобильных приложений которые вы сможете бесплатно скачать!

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

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

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

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

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

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

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