Php пагинация с точками

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

Часто при разработке и выводе контента появляется необходимость использования постраничной навигации. Кто-то скорее всего использует готовые решения от своего фреймворка. Кто-то, возможно, не заморачивается и лупит страницы просто циклом. У кого-то есть свои наработки в этом направлении. Вот я как раз и хочу поделиться своим решением данной задачи.

Существует множество вариаций расположения и отображения кнопок, лично я пришел к следующему решению, которое по моему мнению наиболее наглядно и удобно. Подходит как для 5 страниц так и для 5000.

Пример HTML кода

Не буду ходить вокруг да около, сразу приложу пример сформированного скриптом html кода:

 
Назад 1 . 4 5 6 7 8 9 10 . 17 Вперед

Логика построения

По настройкам параметров я остановлюсь чуть позже после приведения кода, сейчас опишу логику формирования самих номеров.

С кнопками «Назад» и «Вперед» думаю все понятно, к тому же их можно просто отключить, поэтому на них не буду заострять внимания.

Первый и последний номер страницы отображается всегда, своего рода кнопки «В начало» и «В конец».

Середина формируется уже по простому алгоритму. Отображается просматриваемая страница и по N страниц по бокам. На примере отображается по N=3 страницы. В принципе все просто и понятно, но особая хитрость используется при приближении к краям. Опишу на примерах:

Читайте также:  Простая php mysql админка

Страница 1-3 (где 3 = N)

Отображаются первые N*2 страниц и последняя.

Отображается первая и дальше сформированная строка от 4-3=1 до 4+3=7. Первая страница зарезервирована поэтому формируются номера от 2 до 7.

Пожалуй во всех навигациях что я видел (включая хабр) строка была бы сформирована с пропуском, т.е. 1… 3 4 5 6 7 8 9… 17
Но ведь это не логично, отображать многоточие вместо одного числа. При построении второго многоточия выполняется аналогичная проверка.

Формирование окончания аналогично началу

Редиректы

Помимо этого из особенностей хочу выделить еще 2 момента, это проверка существования страницы и редирект на «правильный» адрес. Т.е. к примеру, тут же на хабре первая страница может быть доступна сразу по 2м адресам:
habrahabr.ru/sandbox/page1
habrahabr.ru/sandbox

Скрипт не дает зайти на адрес page/1/ и выполняет редирект на «чистый» адрес
Так же если указан слишком большой номер страницы будет выполнен редирект на последнюю существующую. К примеру были удалены материалы или изменено количество записей на страницу. Не могу правда однозначно сказать полезно ли это будет с точки зрения СЕО, но для пользователей мне кажется так будет удобнее.

PHP код и его использование

class PaginateNavigationBuilder < /** * Чистый URL по умолчанию * В адресе может быть указано место для размещения блока с номером страницы, тег * Пример: * /some_url.html * В итоге адрес будет: * /some_url.html * /some_url/page_2.html * Если тег не указан, то страницы будут дописываться в конец адреса * * @var string */ private $baseUrl = '/'; /** * Шаблон ссылки навигации * * @var string */ public $tpl = 'page//'; /** * Обертка кнопок * * @var string */ public $wrap = "baseUrl = $baseUrl; > /** * Строим навигации и формируем шаблон * * @param integer $limit количество записей на 1 страницу * @param integer $count_all общее количество всех записей * @param integer $currentPage номер просматриваемой страницы * @return mixed Сформированный шаблон навигации готовый к выводу */ public function build($limit, $count_all, $currentPage = 1) < if( $limit < 1 OR $count_all $count_pages ) < header( "HTTP/1.0 301 Moved Permanently" ); header( "Location: " . $this->getUrl( $count_pages ) ); die( "Redirect" ); > if( $currentPage == 1 AND $_SERVER['REQUEST_URI'] != $this->getUrl( $currentPage ) ) < header( "HTTP/1.0 301 Moved Permanently" ); header( "Location: " . $this->getUrl( $currentPage ) ); die( "Redirect" ); > $this->currentPage = intval( $currentPage ); if( $this->currentPage < 1 ) $this->currentPage = 1; $shift_start = max( $this->currentPage - $this->spread, 2 ); $shift_end = min( $this->currentPage + $this->spread, $count_pages-1 ); if( $shift_end < $this->spread*2 ) < $shift_end = min( $this->spread*2, $count_pages-1 ); > if( $shift_end == $count_pages - 1 AND $shift_start > 3 ) < $shift_start = max( 3, min( $count_pages - $this->spread*2 + 1, $shift_start ) ); > $list = $this->getItem( 1 ); if ($shift_start == 3) < $list .= $this->getItem( 2 ); > elseif ( $shift_start > 3 ) < $list .= $this->separator; > for( $i = $shift_start; $i getItem( $i ); > $last_page = $count_pages - 1; if( $shift_end == $last_page-1 )< $list .= $this->getItem( $last_page ); > elseif( $shift_end < $last_page ) < $list .= $this->separator; > $list .= $this->getItem( $count_pages ); if( $this->nextPrev ) < $list = $this->getItem( $this->currentPage > 1 ? $this->currentPage - 1 : 1, $this->prevTitle, true ) . $list . $this->getItem( $this->currentPage < $count_pages ? $this->currentPage + 1 : $count_pages, $this->nextTitle, true ); > return str_replace( "", $list, $this->wrap ); > /** * Формирование адреса * @param int $page_num номер страницы * @return string сформированный адрес */ private function getUrl( $page_num = 0 ) < $page = $page_num >1 ? str_replace( '', $page_num, $this->tpl ) : ''; if( stripos( $this->baseUrl, '' ) !== false )< return str_replace( '', $page, $this->baseUrl ); > else < return $this->baseUrl . $page; > > /** * Формирование кнопки/ссылки * @param int $page_num номер страницы * @param string $page_name если указано, будет выводиться текст вместо номера страницы * @param bool $noclass * @return - span блок с активной страницей или ссылку. */ private function getItem( $page_num, $page_name = '', $noclass = false ) < $page_name = $page_name ?: $page_num; $className = $noclass ? '' : $this->activeClass; if( $this->currentPage == $page_num ) < return "else < return "getUrl($page_num)>\"> "; > > >

Для наглядности, приведу пример построения навигации песочницы:
habrahabr.ru/sandbox/page12

$navi = new PaginateNavigationBuilder( "/sandbox/" ); $navi->tpl = "page/"; $navi->spread = 4; $template = $navi->build( $limit, $count_all, $page_num );

Или же если номер страницы прописан внутри URL:
example.com/some_url/1.html — первая страница
example.com/some_url/1-page2.html — вторая страница

$navi = new PaginateNavigationBuilder( "/some_url/1.html" ); $navi->tpl = "-page"; $template = $navi->build( $limit, $count_all, $page_num );

$limit — количество записей на страницу
$count_all — общее количество записей
$page_num — номер страницы на которой находится пользователь

На этом, пожалуй, всё. Буду рад любой конструктивной критике.

PS. Огромное спасибо всем отписавшимся, особенно тем кто ругает (и правильно делает).
Обещаю со всем ознакомиться, принять во внимание и исправиться.

Источник

Php пагинация с точками

Learn Latest Tutorials

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • Classroom and Online Training
  • Data Entry

Training For College Campus

JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week

Like/Subscribe us for latest updates or newsletter RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Пагинация на PHP

простая пагинация на php

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

Подключение БД:

Первым делом как обычно нужно подключить базу данных, для этого видите этот код.

В этом коде первым делом у нас идут переменные для настройки при подключение БД, потом уже подключаемся, после пишем условии для проверки подключения базы данных, если его нет, то выводим надпись «Не удается подключиться к серверу базы данных!», и запрещаем дальше работать скрипту.

Создание пагинации на PHP:

Теперь перейдём к самому созданию основного кода, первым делом настроим номер страницы.

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

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

Теперь нужно вычислить сколько всего мы имеем страниц.

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

Здесь мы создаём SQL запрос и в нём после слова LIMIT назначаем от какого элемента брать и сколько, потом делаем запрос к БД, и вывод данные которые получили, закрываем соединение с MySQL.

Последние нужно добавить кнопки пагинации, для этого вот что пишем.

То есть тут добавляем пару кнопок и всё, также стоит сказать, что я использовал bootstrap, для более красивого отображения, его думаю сами сможете подключить, так мы сделали скрипт простой пагинации на PHP, вот результат.

скрипт простой пагинации на php

Если мы нажмём на кнопку «Next», то у нас переключится, вот это всё что нужно знать.

Вывод:

В этой статье вы прочитали как делается простая пагинация на PHP, также вы можете скачать скрипт, что больше понять как это всё работает.

Ещё стоит сказать, что я брал код с этого сайта, по ссылке.

Источник

Постраничная навигация php: простой скрипт

Постраничная навигация php: простой скрипт

С проблемой создания постраничной навигации на языке php сталкиваются многие новички-программисты и не все понимают, как она должна работать. Рассмотрим подробно и по пунктам, как создать самую простую пагинацию.

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

// Подключение к бд $db = mysql_connect("localhost","root",""); mysql_select_db("phpsite",$db); // Вывод записей из таблицы $result = mysql_query("SELECT * FROM `lessons`", $db); $myrow = mysql_fetch_array($result); do< echo "

".$myrow['title']."

"; echo "

".$myrow['text']."

"; > while ($myrow = mysql_fetch_array($result));

Разбиваем страницы на нужное количество

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

$result = mysql_query("SELECT * FROM `lessons` LIMIT $art,$kol",$db);

Отлично, теперь создадим переменную $page, она будет показывать текущею страницу, на который мы находимся.

К примеру, мы выводим по две записи на страницу, то есть если мы находимся на 1 странице — выводим первые две записи.

$page = 1; // текущая страница $kol = 3; //количество записей для вывода $art = ($page * $kol) - $kol; // определяем, с какой записи нам выводить $result = mysql_query("SELECT * FROM `lessons` LIMIT $art,$kol",$db);

Переменную $art мы получаем по формуле — количество записей умножаются на текущую страницу, тем самым мы получаем последнюю запись на текущей странице. И вычитаем «количество записей на страницу».

Определяем страницу, на которой находимся

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

if (isset($_GET['page']))< $page = $_GET['page']; >else $page = 1;

Мы получаем текущую страницу через переменную $_GET, а если мы этой переменной нет, то у нас по умолчанию первая страница.

Формируем постраничную навигацию

Для формирования и вывода пагинации нам нужно узнать количество всех записей, найдём это через простой запрос:

$res = mysql_query("SELECT COUNT(*) FROM `lessons`"); $row = mysql_fetch_row($res); $total = $row[0]; // всего записей

Затем нужно узнать, сколько у нас будет страниц:

Делим количество записей на количество выводимых на страницу и округляем до большего числа

Теперь у нас есть всё, чтобы сформировать наши ссылки для навигации, выведем через цикл:

Источник

Php пагинация с точками

Learn Latest Tutorials

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • Classroom and Online Training
  • Data Entry

Training For College Campus

JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week

Like/Subscribe us for latest updates or newsletter RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Оцените статью