Перейти к содержимому

Сервис обмена электронных валют


Качественная паджинация

#1 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0
0

Отправлено 20 Июнь 2010 - 01:54

Как организовать паджинацию, чтобы не просто подряд все номера страниц выводились. А например которые до 3 в обе стороны, а дальше многоточия и последняя и первая страница соответственно.

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 20 Июнь 2010 - 07:02

gaaarfild, Ничего сложного, просто у тебя в модуле навигации должна быть функция, которая отвечает за вывод ссылок - номеров страниц. Вот её надо доработать, она должна выводить от номера текущей страницы, несколько до, и несколько после. Для этого можно добавить в модуль либо одну, либо 2 функции, которые будут относительно текущего номера печатать 3 ссылки до, и которые будут печатать 3 ссылки после.

Не понимаю, в чем сложность реализации...
А если приглядеться, то лучше стоило бы засунуть эти функции навигации в отдельный класс, навигатор. Используя классы, намного удобнее держать состояния объекта (номер текущей страницы, сколько всего страниц, сколько всего записей, сколько записей на страницу, сколько страниц распечатать от текущей и др.) и методы, совершаемые над ним.
1) Проверка валидности переданных количества страниц, как "сколько всего записей/сколько записей на страницу == сколько всего страниц"
2) Вывод ссылок навигатора
3) Множество внутренних методов, недоступных извне, используемых для формирования нужного оформительского представления:
Есть ли ссылка на первую страницу и кликабельна ли она
Есть ли ссылка на последнюю страницу и кликабельна ли она
Есть ли ссылка на предыдущую страницу и кликабельна ли она
Есть ли ссылка на последующую страницу и кликабельна ли она

Много чего можно придумать, главное всё это для себя на бумажке представить, что откуда вызывается и что от чего зависит.
А класс навигации я уже выкладывал, там реализовано то, что тебе нужно :rolleyes:
  • 0

#3 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 21 Июнь 2010 - 09:22

Ну у меня она и есть в классе. Правда в статическом.Поэтому, не сильно отличается от функции.
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 21 Июнь 2010 - 11:20

gaaarfild, Тогда покажу тебе как это реализовано в одном классе:
Класс имеет параметры, некоторые из них:
	var $currentstartpage; // первая страница в выводе
var $currentendpage; // последняя страница в выводе
var $currentpage; // текущая страница
var $totalpages; // общее количество страниц (высчитывается в конструкторе и заносится)
var $maxpagesshown; // какой разброс в количестве страниц от текущей (дисперсия xD)

В конструкторе, при создании объекта вызываются методы, вот некоторые из них:
		$this->calculateCurrentStartPage(); // метод пересчитывает с какой страницы начать вывод навигации
$this->calculateCurrentEndPage(); // метод пересчитывает какой страницой закончить вывод навигации

Вот эти методы:
	 function calculateCurrentStartPage(){
$this->currentstartpage = $this->currentpage - $this->maxpagesshown;
if($this->currentstartpage < 0)
$this->currentstartpage = 0;
}

function calculateCurrentEndPage(){
$this->currentendpage = $this->currentpage + $this->maxpagesshown;
if($this->currentendpage > $this->totalpages)
$this->currentendpage = $this->totalpages;
}


А вывод ссылок осуществляется в цикле public методом getNavigate в цикле
for($x = $this->currentstartpage; $x < $this->currentendpage; $x++){
...
}

  • 0

#5 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 22 Июнь 2010 - 08:30

А сам этот один класс есть на земле? =)
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 22 Июнь 2010 - 11:36

gaaarfild, есть и я его уже кучу раз выкладывал.
Лови.

Прикрепленные файлы

  • Прикрепленный файл  pages.class.zip   1,47К   Количество загрузок: 72

  • 0


Оформление форума – IPBSkins.ru