Вы не зашли.
Главная » PHP » Функция навигации по страницам
#1. tipsun Off (19)
Moderator
2011.03.23 22:10
Код:
span style="color: #0000BB"><?php/* Навигация по страницам by TiPsun * Подходит и для базы (0) и для массива (1) * Еще надо форму для быстрой навигации, как-нибудь займусь*/function pages($all, $onpage, $page, $url=null, $array=0) { $url = htmlspecialchars(trim($url), ENT_QUOTES); $pages = ceil($all / $onpage); $page = min(max(1, (int)$page), $pages); $start = ($page - 1) * $onpage; $bar = '<div class="navbar">'; if($all > $onpage) { $bar .= 'Страницы: '; if($page > 1) { $bar .= '<a href="?'.$url.'page='.($page - 1).'">«</a>'; } else { $bar .= '«'; } $bar .= ' '.$page.'/'.$pages.' '; if($page < $pages) { $bar .= '<a href="?'.$url.'page='.($page + 1).'">»</a>'; } else { $bar .= '»'; } $bar .= '<br/>'; } $bar .= 'Записей: '.$all.'</div>'; return array($start, (($array) ? min(($start + $onpage), $all) : $onpage), $bar); }//Использование$pg = pages($count, 4, $_GET['page'], 'sort='.$_GET['sort'].'&', 1);//$pg[0] - с//$pg[1] - по//$pg[2] - ссылки для навигации?>
Отредактировано tipsun (2011.03.27 23:11)
#2. tipsun Off (19)
Moderator
2011.03.23 23:11
Код:
span style="color: #0000BB"><?php /* Навигация по страницам by TiPsun * Подходит и для базы (0) и для массива (1) * Версия с формой быстрого перехода*/ function pages($all, $onpage, $page, $url=null, $array=0) { $url = htmlspecialchars(trim($url), ENT_QUOTES); $pages = ceil($all / $onpage); $page = min(max(1, (int)$page), $pages); $start = ($page - 1) * $onpage; if($pages > 4) { $bar = '<form action="?'.$url.'" method="post"> <div> <input size="3" type="text" name="page" value="'.$page.'" /> <input type="submit" value="стр." /> </div> </form>'; } $bar .= '<div class="navbar">'; if($all > $onpage) { $bar .= 'Страницы: '; if($page > 1) { $bar .= '<a href="?'.$url.'page='.($page - 1).'">«</a>'; } else { $bar .= '«'; } $bar .= ' '.$page.'/'.$pages.' '; if($page < $pages) { $bar .= '<a href="?'.$url.'page='.($page + 1).'">»</a>'; } else { $bar .= '»'; } $bar .= '<br/>'; } $bar .= 'Записей: '.$all.'</div>'; return array($start, (($array) ? min(($start + $onpage), $all) : $onpage), $bar); } //Использование$page = isset($_POST['page']) ? $_POST['page'] : $_GET['page']; //указывать всегда, чтоб форма работала$pg = pages($count, 4, $page, 'sort='.$_GET['sort'].'&', 1); //$pg[0] - с//$pg[1] - по//$pg[2] - ссылки для навигации ?>
Отредактировано tipsun (2011.03.27 23:11)
#3. tipsun Off (19)
Moderator
2011.03.27 23:11
ГовноКод?
#2 можно форму по человечески в принципе сделать (сделал), эт я под разметку делал себе.
Отредактировано tipsun (2011.03.27 23:11)
#4. Gemorroj Off (107)
Administrator
2011.03.28 00:12
ну да... не очень) намешано все в кучу. нет разделения логики и представления.
#5. tipsun Off (19)
Moderator
2011.08.21 17:05
Вот попытался под разделение логики сделать.

Еще вот че интересно:
Разумно ли сделать, чтоб функция использовала define(); ?
Мне кажется это будет для пользователя (или посто меня smile ) удобней.

Код:
span style="color: #0000BB"><?php/*/ ** Функция навигации по страницам * Автор: TiPsun * E-mail: tipsun@bk.ru * ICQ: 34142776 ** Использование * @pager(COUNT, ON_PAGE, $_REQUEST['page'], 1);/*/function pager($all=0, $onpage=7, $page=1, $array=0, $pre=0) { $all = (int)$all; $onpage = 0 < (int)$onpage ? (int)$onpage : 1; $bar = array(); $bar['pages'] = ceil($all / $onpage); //0 $bar['page'] = $page = min(max(1, (int)$page), $bar['pages']); $bar['start'] = ($page - 1) * $onpage; $bar['stop'] = ($array) ? min(($bar['start'] + $onpage), $all) : $onpage; if ($all > $onpage) { if ($page > 1) { $bar['down'] = $page-1; } else { $bar['down'] = $page; } if ($page < $bar['pages']) { $bar['up'] = $page+1; } else { $bar['up'] = $page; } } else { $bar['down'] = $bar['up'] = 1; } if(isset($pre)) { define($pre.'ALL', $bar['pages']); define($pre.'NOW', $bar['page']); define($pre.'ST', $bar['start']); define($pre.'SP', $bar['stop']); define($pre.'DWN', $bar['down']); define($pre.'UP', $bar['up']); return; } else { return $bar; } }?>
Отредактировано tipsun (2011.08.21 17:05)
#6. tipsun Off (19)
Moderator
2011.08.21 20:08
>_> Что, опять говнокод?
Отредактировано tipsun (2011.08.21 20:08)
#7. Gemorroj Off (107)
Administrator
2011.08.21 20:08
https://github.com/zendframework/zf2/tr … /Paginator
#8. tipsun Off (19)
Moderator
2011.08.21 21:09
big_smile Ухаха: testMarkingOneSessionObjectImmutableShouldMarkOtherInstancesImmutable
- - - -
Там все есть что-ли?
А че тогда делать в PHP вообще?
- - - -
И еще главное все так аккуратно написано и с cache sad
Отредактировано tipsun (2011.08.21 21:09)
#9. tipsun Off (19)
Moderator
2011.10.28 21:09
Не оставляю надежды написать толковый навигатор по страницам. smile

Код:
span style="color: #0000BB"><?phpclass pager { /** * $items - кол-во элементов в массиве/таблице выводимых на страницу. * $methods - методы вычисления начальной и конечной точек при переборе элементов в массиве/таблице. Может принимать 2 значения: array или table. * $count - принимаемое классом, заранее подсчитанное вашим кодом, кол-во элементов в массиве/таблице. * $page - номер текущей страницы. * $pages - кол-во всех страниц, получаемое в результате деления $count на $items. * $start - точка начала перебора элементов. * $stop - точка конца перебора элементов. **/ private $count, $page, $pages, $start, $stop, $items = 10, $methods = array( 'array'=>0, 'table'=>0); //фукнция расчитывает общее кол-во страниц. public function __construct($count='', $page='', $items='') { if (is_numeric($count) and 0 < $count) { $this->count = $count; } else { trigger_error('Count of items is not numeric', E_USER_ERROR); } if (is_numeric($items) and 0 < $items and $this->count >= $items) { $this->items = $items; } $this->pages = ceil($this->count / $this->items); $this->page = min(max(1, (int)$page), $this->pages); } //функция вычисляющая точки начала и конца согласно указанному методу в функцию method() private function calc($method) { $this->start = ($this->page -1) * $this->items; $this->stop = 0; if('array' == $method) $this->stop = min(($this->start +$this->items), $this->count); if('table' == $method) $this->stop = $this->items; } //функция принимает указанный метод вычисления... public function method($method='undefined') { if (array_key_exists($method, $this->methods)) { self::calc($method); } else { trigger_error('Nonexistent method', E_USER_ERROR); } } //функция возвращает номер текущей страницы. public function page() { return $this->page; } //функция возвращает кол-во всех страниц. public function pages() { return $this->pages; } //функция возвращает начальную точку перебора элементов. public function start() { if ($this->start) return $this->start; else trigger_error('Missed to indicate calculation method', E_USER_ERROR); } //функция возвращает конечную точку перебора элементов. public function stop() { if ($this->stop) return $this->stop; else trigger_error('Missed to indicate calculation method', E_USER_ERROR); } //функция возвращает номер предыдущей страницы. public function down() { return 1 < $this->page ? $this->page -1 : $this->page; } //функция возвращает номер следующей страницы. public function up() { return $this->pages > $this->page ? $this->page +1 : $this->page; } }//Использование$count = 87;$page = 5;$items = 7;$pg = new pager($count, $page, $items);$pg->method('array'); //array or tableecho $pg->start() . '->' . $pg->stop();?>
Отредактировано tipsun (2011.10.28 23:11)
#10. Gemorroj Off (107)
Administrator
2011.10.28 22:10
а документация где?
Страниц: 1 2 316 Все
Главная
WEB
PunBB Mod v0.6.2
0.016 s