#1 2011.03.23 22:25

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

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?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($count4$_GET['page'], 'sort='.$_GET['sort'].'&'1);
 
//$pg[0] - с
//$pg[1] - по
//$pg[2] - ссылки для навигации
 
?>

Отредактировано tipsun (2011.03.27 23:50)

Неактивен

#2 2011.03.23 23:47

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

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?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($count4$page'sort='.$_GET['sort'].'&'1);
 
//$pg[0] - с
//$pg[1] - по
//$pg[2] - ссылки для навигации
 
?>

Отредактировано tipsun (2011.03.27 23:50)

Неактивен

#3 2011.03.27 23:31

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

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

ГовноКод?
#2 можно форму по человечески в принципе сделать (сделал), эт я под разметку делал себе.

Отредактировано tipsun (2011.03.27 23:41)

Неактивен

#4 2011.03.28 00:17

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

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

ну да... не очень) намешано все в кучу. нет разделения логики и представления.

Неактивен

#5 2011.08.21 17:11

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

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

Вот попытался под разделение логики сделать.

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?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       < (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:50)

Неактивен

#6 2011.08.21 20:28

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

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

>_> Что, опять говнокод?

Отредактировано tipsun (2011.08.21 20:29)

Неактивен

#7 2011.08.21 20:40

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

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

Неактивен

#8 2011.08.21 21:03

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

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

big_smile Ухаха: testMarkingOneSessionObjectImmutableShouldMarkOtherInstancesImmutable
- - - -
Там все есть что-ли?
А че тогда делать в PHP вообще?
- - - -
И еще главное все так аккуратно написано и с cache sad

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

Неактивен

#9 2011.10.28 21:52

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

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

Не оставляю надежды написать толковый навигатор по страницам. smile

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
 
class 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 $count) {
                
                $this->count $count;
            } else {
                
                trigger_error('Count of items is not numeric'E_USER_ERROR);
            }
            
            if (is_numeric($items) and $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 $this->page $this->page -$this->page;
        }
        
        //функция возвращает номер следующей страницы.
        public function up() {
            
            return $this->pages $this->page $this->page +$this->page;
        }
    }
 
//Использование
$count 87;
$page  5;
$items 7;
 
$pg = new pager($count$page$items);
$pg->method('array'); //array or table
 
echo $pg->start() . '->' $pg->stop();
 
 
?>

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

Неактивен

#10 2011.10.28 22:43

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

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

а документация где?

Неактивен

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.017 s