#61 2011.12.13 23:29

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Набросок.

Код:

1
span style="color: #0000BB"><?php /** * pageMan::getPageRange() * Получение ближайшего отрезка номеров страниц для создания навигации вида: (10 11 [12] 13 14). * @return array */ public function getPageRange() { $this->getPages(); $this->getPage(); $min = $this->_page - 4; //or user number. $min = 1 < $min ? $min : 1; $max = $this->_page + 4; //or user number. $max = $this->_pages > $max ? $max : $this->_pages; /* for ($page=$min; $page<=$max; $page++) { if ($this->_page == $page) { $range[] = '[' . $page . ']'; continue; } if (1 <= $page and $this->_pages >= $page) { $range[] = $page; } } */ return range($min, $max); }?>

Отредактировано tipsun (2011.12.14 18:40)

Неактивен

#62 2011.12.13 23:36

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Функция навигации по страницам

что это такое? где phpDoc?

Неактивен

#63 2011.12.14 15:27

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Добавил phpDoc.

Неактивен

#64 2011.12.14 18:37

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Поправил код.
В принципе можно и в шаблоне отметить текущую страницу.

Неактивен

#65 2011.12.15 19:31

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Код:

1
span style="color: #0000BB"><?php class pageMan { private $_count = null, $_page = null, $_tmpPage = 1, $_items = 10, $_pages = null, $_start = null; /** * pageMan::setCount() * Регистрация общего количества записей. * @param mixed $count * @return object */ public function setCount($count) { if (is_numeric($count) and 0 < $count) { $this->_count = (int)$count; } else { trigger_error('Value must be integer', E_USER_ERROR); } return $this; } /** * pageMan::setPage() * Регистрация текущей страницы. * @param mixed $page * @return object */ public function setPage($page) { if (is_numeric($page) and 0 < $page) { $this->_tmpPage = (int)$page; } return $this; } /** * pageMan::setItems() * Регистрация количества записей на страницу. * @param mixed $items * @return object */ public function setItems($items) { if (is_numeric($items)) { if (0 < $items) { $this->_items = (int)$items; } else if ($this->_count) { $this->_items = $this->_count; } } return $this; } /** * pageMan::getPages() * Расчет общего кол-ва страниц. * @return float */ public function getPages() { if (null === $this->_count) { trigger_error('Not enough data', E_USER_ERROR); } if (null === $this->_pages) { $this->_pages = ceil($this->_count / $this->_items); } return $this->_pages; } /** * pageMan::_corrPage() * Коррекция текущей страницы. * @return integer */ private function _corrPage() { if (null === $this->_page) { $this->_page = min($this->_tmpPage, $this->getPages()); } return $this->_page; } /** * pageMan::getPage() * Получение номера корректной текущей страницы. * @return integer */ public function getPage() { return $this->_corrPage(); } /** * pageMan::_setStart() * Расчет начальной точки отсчета показа записей в вашем цикле. * @return integer */ private function _setStart() { if (null === $this->_start) { $this->_start = ($this->_corrPage() - 1) * $this->_items; } return $this->_start; } /** * pageMan::getArray() * Расчет конечной точки отсчета показа записей в цикле для массива данных. * @return array */ public function getArray() { if (null === $this->_count) { trigger_error('Not enough data', E_USER_ERROR); } return array( 'start' => $this->_setStart(), 'stop' => min(($this->_start + $this->_items), $this->_count)); } /** * pageMan::getTable() * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB). * @return array */ public function getTable() { return array( 'start' => $this->_setStart(), 'stop' => $this->_items); } /** * pageMan::getPageRange() * Получение ближайшего отрезка номеров страниц для создания навигации вида: (10 11 [12] 13 14). * @return array */ public function getPageRange($range=null) { $range = (is_numeric($range) and 0 < $range) ? (int)$range : 4; $min = $this->getPage() - $range; $max = $this->_page + $range; $min = 1 < $min ? $min : 1; $max = $this->getPages() > $max ? $max : $this->_pages; return range($min, $max); } }?>

Отредактировано tipsun (2011.12.15 19:43)

Неактивен

#66 2011.12.15 19:54

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

А может быть даже просто "схитрить" smile
Чем делать в цикле лишнее условие, лучше в стиле a:active просто по-другому пометить и все smile
Вот мне и активная/текущая страница.

Отредактировано tipsun (2011.12.15 19:56)

Неактивен

#67 2011.12.15 21:07

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Функция навигации по страницам

не понял. покажи)

Неактивен

#68 2011.12.15 21:19

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Ну вроде цвет активной ссылки должен меняться ведь? Если я не ошибся, то должно сработать.

CSS

Код:

1
2
a { color: #000; }
a:active { color: #888; }

PHP

Код:

1
span style="color: #0000BB"><?php//run class, insert data...$links = $obj->getPageRange(3);foreach ($links as $page) { echo '<a href="?a=1&amp;b=5&amp;page=' . $page . '">' . $page . '</a> '; }?>

Добавлено спустя   1 минуту  4 секунды:
Сейчас проверю. ~_~
Добавлено спустя   8 минут  21 секунду:
Эх, не то. Это при клике работает.

Код:

1
2
3
4
:active - при клике на ссылку
:link - не посещенная ссылка
:hover - при наведении
:visited - посещенная

Вроде чет было типа активная ссылка (на которой ты сейчас находишься) другим цветом отображается, или это я ступил?

Отредактировано tipsun (2011.12.15 21:35)

Неактивен

#69 2011.12.16 11:39

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

PHP file

Код:

1
span style="color: #0000BB"><?php$pg = new pageMan();$pg->setCount(1000)->setPage($_GET['p']);define('NOW_PAGE', $pg->getPage());define('LAST_PAGE', $pg->getPages());?>

TPL file

Код:

1
span style="color: #0000BB"><?php foreach ($links = $pg->getPageRange(3) as $page):?><?php if (NOW_PAGE == $page):?><?php echo $page;?>&#160;<?php else:?><a href="?a=someValue&amp;b=5&amp;p=<?php echo $page;?>"><?php echo $page;?></a>&#160;<?php endif; endforeach;?><br/><a href="?a=someValue&amp;p=1">Begin</a> | <a href="?a=someValue&amp;p=<?php echo LAST_PAGE;?>">End</a>

- - - -
А если записей слишком мало, то как быть?
В логике сделать так, чтоб подключался шаблон без навигации?

Отредактировано tipsun (2011.12.16 11:57)

Неактивен

#70 2011.12.16 11:53

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Функция навигации по страницам

<?=$page;?> - короткие теги нахуй.
&nbsp; - заменить на & #160; (без пробела)

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.016 s