#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: Функция навигации по страницам

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

Неактивен

#11 2011.10.28 22:47

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

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

Дык сыро еще же, не?
Или надо описать код/переменные/мое_восприятие_кода?
- - - -
Понял, описать код надо...
- - - -
Описал, поймите меня правильно smile

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

Неактивен

#12 2011.10.28 23:24

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

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

есть стандартизованный стиль описания кода. называется phpDoc... )

Неактивен

#13 2011.10.28 23:27

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

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

Ок, буду знать.
Хотя я и так еле описал код. Сам код понимаю, а вот описать сложно.

Неактивен

#14 2011.10.30 21:59

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

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

Есть замечания по классу моему?
- - - -
Я еще думаю может через static тоже принимать/отдавать значения.

Код:

1
2
3
4
5
6
7
8
<?php
 
pager::setItems(10);
pager::setMethod('array');
 
//или так путаница будет? типа лишнее?
 
?>

Отредактировано tipsun (2011.10.30 22:05)

Неактивен

#15 2011.10.30 23:22

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

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

tipsun, сделай документацию в phpDoc стиле. Ориентироваться по ней проще будет для анализа.

Неактивен

#16 2011.11.06 19:30

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
 
/**
 * pager
 * 
 * @access public
 */
class pager {
        
       private
        $count,
        $page,
        $pages,
        $start,
        $stop,
        $items   10,
        $methods = array('array'=>0'table'=>0);
        
        /**
         * pager::__construct()
         * 
         * @param string $count
         * @param string $page
         * @param string $items
         * @return null
         */
        public function __construct($count=''$page=''$items='') {
            
            if (is_numeric($count) and $count) {
                
                $this->count $count;
            } else {
                
                trigger_error('Count number of the 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);
        }
        
        /**
         * pager::calc()
         * 
         * @param mixed $method
         * @return null
         */
        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;
        }
        
        /**
         * pager::method()
         * 
         * @uses function pager::calc()
         * 
         * @param string $method
         * @return null
         */
        public function method($method='undefined') {
            
            if (array_key_exists($method$this->methods)) {
                
                self::calc($method);
            } else {
                
                trigger_error('Nonexistent method'E_USER_ERROR);
            }
        }
        
        /**
         * pager::page()
         * 
         * @return integer param pager::page
         */
        public function page() {
            
            return $this->page;
        }
        
        /**
         * pager::pages()
         * 
         * @return integer param pager::pages
         */
        public function pages() {
            
            return $this->pages;
        }
        
        /**
         * pager::start()
         * 
         * @return integer param pager::start
         */
        public function start() {
            
            if ($this->start) return $this->start;
            else trigger_error('Missing indication of method of calculation'E_USER_ERROR);
        }
        
        /**
         * pager::stop()
         * 
         * @return integer param pager::stop
         */
        public function stop() {
            
            if ($this->stop) return $this->stop;
            else trigger_error('Missing indication of method of calculation'E_USER_ERROR);
        }
        
        /**
         * pager::down()
         * 
         * returns the number of the previous page
         * 
         * @return integer
         */
        public function down() {
            
            return $this->page $this->page -$this->page;
        }
        
        /**
         * pager::up()
         * 
         * returns the number of the next page
         * 
         * @return integer
         */
        public function up() {
            
            return $this->pages $this->page $this->page +$this->page;
        }
    }
 
?>

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

Неактивен

#17 2011.11.09 21:15

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

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

Такое ощущение появилось, что я давно уже изобретаю велосипед (Zend Paginator). big_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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
 
class pageMan {
        
        private
        $count null,
        $page  null$tmp_page 1,
        $pages null,
        $start null,
        $stop  null;
        
        private static
        $items   10,
        $methods = array('array'=>0'table'=>0);
        
        public function __construct($method$count$page$items=null) {
            
            if (array_key_exists($methodself::$methods)) {
                
                $this->$method $method;
            }
            else {
                
                trigger_error('Nonexistent method'E_USER_ERROR);
            }
            
            if (is_int($count) and $count) {
                
                $this->count $count;
            }
            else {
                
                trigger_error('Value must be integer'E_USER_ERROR);
            }
            
            if (is_int($page) and $page) {
                
                $this->tmp_page $page;
            }
            
            if (is_int($items)) {
                
                if ($items$this->items $items;
                else            $this->items $this->count;
            }
            else {
                
                $this->items self::$items;
            }
        }
        
        private function countPages() {
            
            if (null === $this->pages) {
                
                $this->pages $this->count $this->items;
            }
            
            return $this->pages;
        }
        
        public function getPages() {
            
            return self::countPages();
        }
        
        private function setPage() {
            
            if (null === $this->page) {
                
                $this->page min($this->tmp_pageself::countPages());
            }
            
            return $this->page;
        }
        
        public function getPage() {
            
            return self::setPage();
        }
        
        private function setStart() {
            
            if (null === $this->start) {
                
                $this->start = (self::setPage() - 1) * $this->items;
            }
            
            return $this->start;
        }
        
        public function getStart() {
            
            return self::setStart();
        }
        
        private function setStop() {
            
            if('array' == $this->method$this->stop min((self::setStart() + $this->items), $this->count);
            if('table' == $this->method$this->stop $this->items;
            
            return $this->stop;
        }
        
        public function getStop() {
            
            return self::setStop();
        }
        
        public function prevPage() {
            
            if (null === $this->page) {
                
                self::setPage();
            }
            
            return $this->page $this->page $this->page;
        }
        
        public function nextPage() {
            
            if (null === $this->pages) {
                
                self::countPages();
            }
            
            if (null === $this->page) {
                
                self::setPage();
            }
            
            return $this->pages $this->page $this->page $this->page;
        }
    }
/**/
 
?>

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

Неактивен

#18 2011.11.09 22:17

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

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

ну так да.. это главная цель велосипедов)

Неактивен

#19 2011.11.10 20:58

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

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

Сделал через:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
//__construct
if (method_exists(__CLASS__'method_' $method)) $this->method $method;
 
private function method_array() { /* CODE */ }
private function method_table() { /* CODE */ }
 
public function getStop() {
 
return call_user_method($this->method$this);
}
 
?>

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

Неактивен

#20 2011.11.11 15:31

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

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

Какой способ лучше?


Вложения

Отредактировано tipsun (2011.11.11 15:32)

Неактивен

#21 2011.11.12 16:20

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

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

мне кажется 2, просто из-за того, что при расширении класса, не нужно будет следить за массивом доступных методов

Неактивен

#22 2011.11.12 22:27

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

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

СПС. smile Ну для этого и переписал. smile

Неактивен

#23 2011.11.23 21:57

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

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

Ошибка. По невнимательности. sad

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
private function countPages() {
        
        if (null === $this->pages) {
            
            //$this->pages = $this->count / $this->items;
            $this->pages ceil($this->count $this->items);
        }
        
        return $this->pages;
    }
 
?>

Добавлено спустя   5 минут  26 секунд:
Хочу/пытаюсь реализовать: 1 .. 5 6 [7] 8 6 .. 100 такую фишку.

Отредактировано tipsun (2011.11.23 22:00)

Неактивен

#24 2011.11.23 22:45

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

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

И надо было указывать в условии is_numeric(), чтоб с типами не возиться. А при занесении в свойство = (int).

Отредактировано tipsun (2011.11.23 22:45)

Неактивен

#25 2011.12.11 13:06

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<?php
 
/**
 * pageMan
 * 
 * @package   
 * @author TiPsun
 * @copyright TiPsun
 * @version 2011
 * @access public
 */
class pageMan {
        
        private
        $count null,
        $page  null$_page 1,
        $pages null,
        $start null;
        
        private static
        $items   10;
        
        /**
         * pageMan::__construct()
         * 
         * @param mixed $method - метод расчета.
         * @param mixed $count  - количество записей.
         * @param mixed $page   - указанная/текущая страница.
         * @param mixed $items  - кол-во записей на страницу.
         * 
         * @return void
         */
        public function __construct($method$count$page$items=null) {
            
            if (method_exists(__CLASS__'method_' $method)) {
                
                $this->method 'method_' $method;
            }
            else {
                
                trigger_error('Nonexistent method'E_USER_ERROR);
            }
            
            if (is_numeric($count) and $count) {
                
                $this->count = (int)$count;
            }
            else {
                
                trigger_error('Value must be integer'E_USER_ERROR);
            }
            
            if (is_numeric($page) and $page) {
                
                $this->_page = (int)$page;
            }
            
            if (is_numeric($items)) {
                
                if ($items$this->items = (int)$items;
                else            $this->items $this->count;
            }
            else {
                
                $this->items self::$items;
            }
        }
        
        /**
         * pageMan::countPages()
         * 
         * Расчет общего кол-ва страниц.
         * 
         * @return integer
         */
        private function countPages() {
            
            if (null === $this->pages) {
                
                $this->pages ceil($this->count $this->items);
            }
            
            return $this->pages;
        }
        
        /**
         * pageMan::getPages()
         * 
         * Получение общего числа страниц.
         * 
         * @return integer
         */
        public function getPages() {
            
            return self::countPages();
        }
        
        /**
         * pageMan::setPage()
         * 
         * Корректировка указанной/текущей страницы.
         * 
         * @return integer
         */
        private function setPage() {
            
            if (null === $this->page) {
                
                $this->page min($this->_pageself::countPages());
            }
            
            return $this->page;
        }
        
        /**
         * pageMan::getPage()
         * 
         * Получение корректной текущей страницы.
         * 
         * @return integer
         */
        public function getPage() {
            
            return self::setPage();
        }
        
        /**
         * pageMan::setStart()
         * 
         * Расчет начальной точки отсчета показа записей в вашем цикле.
         * 
         * @return integer
         */
        private function setStart() {
            
            if (null === $this->start) {
                
                $this->start = (self::setPage() - 1) * $this->items;
            }
            
            return $this->start;
        }
        
        /**
         * pageMan::getStart()
         * 
         * Получение начальной точки отсчета показа записей в цикле.
         * 
         * @return integer
         */
        public function getStart() {
            
            return self::setStart();
        }
        
        /**
         * pageMan::method_array()
         * 
         * Расчет конечной точки отсчета показа записей в цикле для массива данных.
         * 
         * @return integer
         */
        private function method_array() {
            
            return min((self::setStart() + $this->items), $this->count);
        }
        
        /**
         * pageMan::method_table()
         * 
         * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB).
         * 
         * @return integer
         */
        private function method_table() {
            
            return $this->items;
        }
        
        /**
         * pageMan::getStop()
         * 
         * Получение конечной точки отсчета показа записей в цикле.
         * 
         * @return integer
         */
        public function getStop() {
            
            return call_user_method($this->method$this);
        }
        
        /**
         * pageMan::prevPage()
         * 
         * Получение номера предыдущей страницы.
         * 
         * @return integer
         */
        public function prevPage() {
            
            if (null === $this->page) {
                
                self::setPage();
            }
            
            return $this->page $this->page $this->page;
        }
        
        /**
         * pageMan::nextPage()
         * 
         * Получение номера следующей страницы.
         * 
         * @return integer
         */
        public function nextPage() {
            
            if (null === $this->pages) {
                
                self::countPages();
            }
            
            if (null === $this->page) {
                
                self::setPage();
            }
            
            return $this->pages $this->page $this->page $this->page;
        }
    }
 
?>

tipsun написал:

Хочу/пытаюсь реализовать: 1 .. 5 6 [7] 8 6 .. 100 такую фишку.

Такой вид:
1 .. 5 [6] 7 .. 15
Можно сделать вручную, условиями.

А такой:
1 .. 3 4 5 [6] 7 8 9 .. 15
Наверно лучше циклом или вложенной функцией.

Отредактировано tipsun (2011.12.11 13:46)

Неактивен

#26 2011.12.11 13:14

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

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

без phpDoc не нужно.

Неактивен

#27 2011.12.11 13:50

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

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

Еще надо это все: 1 .. 3 4 5 [6] 7 8 9 .. 15; в массиве возвращать, чтоб потом, например в шаблоне, все это удобно можно было вытащить и сделать ссылки.

Неактивен

#28 2011.12.11 14:00

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

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

у тебя не описано какие методы статические, а какие нет. будет кидать strict ошибки.

Неактивен

#29 2011.12.11 14:07

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
<?php
 
/*
 
pageCheck()
 
@param mixed var
 
@return integer
 
*/
 
function pageCheck($var) {
        
        if ($var == 'begin') {
            
            return 1;
        }
        
        if ($var == 'end') {
            
            return /* последняя страница */;
        }
        
        if ($begin < (int)$var and $end > (int)$var) {
            
            return $var;
        }
    }
 
?>

Добавлено спустя   1 минуту  39 секунд:

Gemorroj написал:

у тебя не описано какие методы статические, а какие нет. будет кидать strict ошибки.

Это мне просто описать надо (phpDoc) или чего в коде не так?

Отредактировано tipsun (2011.12.11 14:13)

Неактивен

#30 2011.12.11 14:31

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

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

private function countPages() {
private static function countPages() {
и еще, если метод или свойство приватное или защищенное, название должно начинаться с подчеркивания.

Неактивен

#31 2011.12.11 14:33

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

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

Ок. Понял. СПС.
Хотя не совсем понял, в гугле посмотрю...

Отредактировано tipsun (2011.12.11 14:44)

Неактивен

#32 2011.12.11 15:35

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

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

Вот насчет этого вроде понял, типа:

Код:

1
2
3
4
5
6
7
<?php
 
self::countPages();
 
//если будешь так использовать, значит надо эту функцию пометить как static
 
?>

Отредактировано tipsun (2011.12.11 15:39)

Неактивен

#33 2011.12.11 16:27

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

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

Private, protected переменную называть: $_name;
big_smile А я думал в phpdoc комментарии просто @param mixed _$var;
- - - -
Так теперь надо это все дело сделать...

Отредактировано tipsun (2011.12.11 16:28)

Неактивен

#34 2011.12.11 16:33

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

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

да, phpDoc - это просто комментарии. А Private, protected - это базовый ООП.

Неактивен

#35 2011.12.11 16:45

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<?php
 
/**
 * pageMan
 * 
 * @package   
 * @author TiPsun
 * @copyright TiPsun
 * @version 2011
 * @access public
 */
class pageMan {
        
        private
        $_method  null,
        $_count   null,
        $_page    null,
        $_tmpPage 1,
        $_pages   null,
        $_start   null;
        
        private static
        $_items 10;
        
        /**
         * pageMan::__construct()
         * 
         * @param mixed $method
         * @param mixed $count
         * @param mixed $page
         * @param mixed $items
         * 
         * @return void
         */
        public function __construct($method$count$page$items=null) {
            
            if (method_exists(__CLASS__'_method' $method)) {
                
                $this->_method '_method' $method;
            }
            else {
                
                trigger_error('Nonexistent method'E_USER_ERROR);
            }
            
            if (is_numeric($count) and $count) {
                
                $this->_count = (int)$count;
            }
            else {
                
                trigger_error('Value must be integer'E_USER_ERROR);
            }
            
            if (is_numeric($page) and $page) {
                
                $this->_tmpPage = (int)$page;
            }
            
            if (is_numeric($items)) {
                
                if ($items$this->_items = (int)$items;
                else            $this->_items $this->_count;
            }
            else {
                
                $this->_items self::$_items;
            }
        }
        
        /**
         * pageMan::_countPages()
         * Расчет общего кол-ва страниц.
         * @return integer
         */
        private static function _countPages() {
            
            if (null === $this->_pages) {
                
                $this->_pages ceil($this->_count $this->_items);
            }
            
            return $this->_pages;
        }
        
        /**
         * pageMan::getPages()
         * Получение общего числа страниц.
         * @return integer
         */
        public function getPages() {
            
            return self::_countPages();
        }
        
        /**
         * pageMan::_setPage()
         * Коррекция указанной/текущей страницы.
         * @return integer
         */
        private static function _setPage() {
            
            if (null === $this->_page) {
                
                $this->_page min($this->_tmpPageself::_countPages());
            }
            
            return $this->_page;
        }
        
        /**
         * pageMan::getPage()
         * Получение корректной текущей страницы.
         * @return integer
         */
        public function getPage() {
            
            return self::_setPage();
        }
        
        /**
         * pageMan::_setStart()
         * Расчет начальной точки отсчета показа записей в вашем цикле.
         * @return integer
         */
        private static function _setStart() {
            
            if (null === $this->_start) {
                
                $this->_start = (self::_setPage() - 1) * $this->_items;
            }
            
            return $this->_start;
        }
        
        /**
         * pageMan::getStart()
         * Получение начальной точки отсчета показа записей в цикле.
         * @return integer
         */
        public function getStart() {
            
            return self::_setStart();
        }
        
        /**
         * pageMan::_methodArray()
         * Расчет конечной точки отсчета показа записей в цикле для массива данных.
         * @return integer
         */
        private function _methodArray() {
            
            return min((self::_setStart() + $this->_items), $this->_count);
        }
        
        /**
         * pageMan::_methodTable()
         * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB).
         * @return integer
         */
        private function _methodTable() {
            
            return $this->_items;
        }
        
        /**
         * pageMan::getStop()
         * Получение конечной точки отсчета показа записей в цикле.
         * @return integer
         */
        public function getStop() {
            
            return call_user_method($this->_method$this);
        }
        
        /**
         * pageMan::prevPage()
         * Получение номера предыдущей страницы.
         * @return integer
         */
        public function prevPage() {
            
            if (null === $this->_page) {
                
                self::_setPage();
            }
            
            return $this->_page $this->_page $this->_page;
        }
        
        /**
         * pageMan::nextPage()
         * Получение номера следующей страницы.
         * @return integer
         */
        public function nextPage() {
            
            if (null === $this->_pages) {
                
                self::_countPages();
            }
            
            if (null === $this->_page) {
                
                self::_setPage();
            }
            
            return $this->_pages $this->_page $this->_page $this->_page;
        }
    }
 
?>

Отредактировано tipsun (2011.12.11 16:58)

Неактивен

#36 2011.12.11 18:15

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

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

Gemorroj написал:

А Private, protected - это базовый ООП.

В курсе smile Иначе я бы не применял все это.

Насколько я знаю...
protected/private - это если указать, то действует только в самом классе.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
//т.е. его нельзя так вызвать:
$myClass = new someClass();
$myClass->myVar;      //- со свойством
$myClass->myMethod(); //- с методом
 
//static типа вызывать вот так:
self::myVar;    //- внутри класса и
myClass::myVar//- вне класса, если не private/protected и если $this не было использовано.
self::myMethod(); //и
myClass::myMethod(); //если не private/protected и если $this не было использовано.
 
?>

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

Неактивен

#37 2011.12.11 20:51

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

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

Бле... Чет я не то сделал.
Там же при static нельзя $this использовать...

Gemorroj, А где надо было static ставить?
До этого разве все правильно не было?

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

Неактивен

#38 2011.12.11 21:04

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

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

либо вызывай метод как динамический, либо делай его статическим.

Неактивен

#39 2011.12.11 21:06

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

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

Gemorroj, ты про такой вызов?

Код:

1
2
3
4
5
6
7
8
<?php
 
public function getPages() {
            
            return self::_countPages();
        }
 
?>

И его надо переделать под это?

Код:

1
2
3
4
5
6
<?php
public function getPages() {
            
            return call_user_method('_countPages'$this);
        }
?>

А под статический придется и переменные все переделать под self::

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

Неактивен

#40 2011.12.11 21:53

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

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

Да блять.
смотри свой код из 25 поста.

Код:

1
2
3
4
public function getPages() {
return self::countPages();
}

отсюда следует, что метод countPages у тебя должен быть статическим.
если ты не хочешь делать его статическим, то вызывай его не как статический, а динамический. Т.е. $this->countPages();

Неактивен

#41 2011.12.11 21:55

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

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

Так бы сразу. Спс.
Добавлено спустя   6 минут  26 секунд:
Я уже и забыл, что так метод вызвать можно big_smile
Мда, жестко я туплю...

Отредактировано tipsun (2011.12.11 22:07)

Неактивен

#42 2011.12.12 16:10

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<?php
 
class pageMan {
        
        private
        $_method  null,
        $_count   null,
        $_page    null,
        $_tmpPage 1,
        $_pages   null,
        $_start   null;
        
        private static
        $_items 10;
        
        /**
         * pageMan::__construct()
         * Обработка входящих данных в класс.
         * @param mixed $method
         * @param mixed $count
         * @param mixed $page
         * @param mixed $items
         * 
         * @return void
         */
        public function __construct($method$count$page$items=null) {
            
            if (method_exists(__CLASS__'_method' $method)) {
                
                $this->_method '_method' $method;
            }
            else {
                
                trigger_error('Nonexistent method'E_USER_ERROR);
            }
            
            if (is_numeric($count) and $count) {
                
                $this->_count = (int)$count;
            }
            else {
                
                trigger_error('Value must be integer'E_USER_ERROR);
            }
            
            if (is_numeric($page) and $page) {
                
                $this->_tmpPage = (int)$page;
            }
            
            if (is_numeric($items)) {
                
                if ($items$this->_items = (int)$items;
                else            $this->_items $this->_count;
            }
            else {
                
                $this->_items self::$_items;
            }
        }
        
        /**
         * pageMan::_countPages()
         * Расчет общего кол-ва страниц.
         * @return integer
         */
        private function _countPages() {
            
            if (null === $this->_pages) {
                
                $this->_pages ceil($this->_count $this->_items);
            }
            
            return $this->_pages;
        }
        
        /**
         * pageMan::getPages()
         * Получение общего числа страниц.
         * @return integer
         */
        public function getPages() {
            
            return call_user_method('_countPages'$this);
        }
        
        /**
         * pageMan::_setPage()
         * Коррекция указанной/текущей страницы.
         * @return integer
         */
        private function _setPage() {
            
            if (null === $this->_page) {
                
                $this->_page min($this->_tmpPage$this->_countPages());
            }
            
            return $this->_page;
        }
        
        /**
         * pageMan::getPage()
         * Получение корректной текущей страницы.
         * @return integer
         */
        public function getPage() {
            
            return $this->_setPage();
        }
        
        /**
         * pageMan::_setStart()
         * Расчет начальной точки отсчета показа записей в вашем цикле.
         * @return integer
         */
        private function _setStart() {
            
            if (null === $this->_start) {
                
                $this->_start = ($this->_setPage() - 1) * $this->_items;
            }
            
            return $this->_start;
        }
        
        /**
         * pageMan::getStart()
         * Получение начальной точки отсчета показа записей в цикле.
         * @return integer
         */
        public function getStart() {
            
            return $this->_setStart();
        }
        
        /**
         * pageMan::_methodArray()
         * Расчет конечной точки отсчета показа записей в цикле для массива данных.
         * @return integer
         */
        private function _methodArray() {
            
            return min(($this->_setStart() + $this->_items), $this->_count);
        }
        
        /**
         * pageMan::_methodTable()
         * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB).
         * @return integer
         */
        private function _methodTable() {
            
            return $this->_items;
        }
        
        /**
         * pageMan::getStop()
         * Получение конечной точки отсчета показа записей в цикле.
         * @return integer
         */
        public function getStop() {
            
            return call_user_method($this->_method$this);
        }
        
        /**
         * pageMan::prevPage()
         * Получение номера предыдущей страницы.
         * @return integer
         */
        public function prevPage() {
            
            if (null === $this->_page) {
                
                $this->_setPage();
            }
            
            return $this->_page $this->_page $this->_page;
        }
        
        /**
         * pageMan::nextPage()
         * Получение номера следующей страницы.
         * @return integer
         */
        public function nextPage() {
            
            if (null === $this->_pages) {
                
                $this->_countPages();
            }
            
            if (null === $this->_page) {
                
                $this->_setPage();
            }
            
            return $this->_pages $this->_page $this->_page $this->_page;
        }
    }
 
?>

Вот... первые шаги к ::10 11 [12] 13 14::

Код:

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
<?php
 
$pageNum 5;
 
$pg = new pageMan('array'1768$pageNum);
 
define('NOWPAGE',  $pg->getPage());
define('ALLPAGES'$pg->getPages());
 
for ($i=-4$i<=4$i++) {
        
        $page NOWPAGE $i;
        
        if (NOWPAGE == $page) {
            
            printf('[%d] '$page);
            continue;
        }
        
        if (<= $page and ALLPAGES >= $page) {
            
            printf('%d '$page);
        }
    }
 
?>

Наверно все-таки придется делать в классе отдельный метод и возвращать массив.
А то в шаблоне столько катать каждый раз не то.
А в шаблоне уже сделать еще foreach() цикл и закреплять там ссылки.

Хотя по идее можно было бы принять этот адрес,
обработать htmlspecialchars() и нормально, наверно.

Отредактировано tipsun (2011.12.12 16:47)

Неактивен

#43 2011.12.12 18:07

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

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

Еще чтоб в холостую циклы не гонять, можно заранее наверно расчитать количество повторений.

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

Неактивен

#44 2011.12.12 19:46

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

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

Сам интерфейс класса не нравится.

* @param mixed $method
         * @param mixed $count
         * @param mixed $page
         * @param mixed $items

new pageMan('array', 1768, $pageNum);

откуда я узнаю что 1 параметром нужно передать строку array ? O_o
и так же про остальные параметры.

Продумай сначала как внешне твой класс будет работать.
Например, удобно было бы как-то так:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$obj = new pageMan();
 
// задаем настройки
$obj->setPage(1);
$obj->setItems(10);
// или так
$obj->setPage(1)->setItems(10);
 
// вывод
print_r($obj->getArray());
echo $obj->getTable();
 
// или вообще вот так
echo $obj->setPage(1)->setItems(10)->getTable();
 
// а с php 5.4
echo (new pageMan())->setPage(1)->setItems(10)->getTable();

Неактивен

#45 2011.12.12 20:07

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

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

Ойбле smile
А мануал для чего? smile
- - - -
Ладно, переделаю.
Так еще надо будет следить ввел ли вообще пользователь параметр или нет. sad
- - - -

Код:

1
2
3
4
5
6
7
8
<?php
 
echo $obj->setPage(1)->setItems(10)->getTable();
//это вроде не проблема.
//надо в методе:
return $this;
 
?>

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

Неактивен

#46 2011.12.12 21:14

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
<?php
 
//BEGIN 'New code'
        
        public function setMethod($method) {
            
            if (method_exists(__CLASS__'_method' $method)) {
                
                $this->_method '_method' $method;
            }
            else {
                
                trigger_error('Nonexistent method'E_USER_ERROR);
            }
            
            return $this;
        }
        
        public function setCount($count) {
            
            if (is_numeric($count) and $count) {
                
                $this->_count = (int)$count;
            }
            else {
                
                trigger_error('Value must be integer'E_USER_ERROR);
            }
            
            return $this;
        }
        
        public function setPage($page) {
            
            if (is_numeric($page) and $page) {
                
                $this->_tmpPage = (int)$page;
            }
            
            return $this;
        }
        
        public function setItems($items) {
            
            if (is_numeric($items)) {
                
                if ($items$this->_items = (int)$items;
                else            $this->_items $this->_count;
            }
            else {
                
                $this->_items self::$_items;
            }
            
            return $this;
        }
        
        //END 'New code'
?>

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

Неактивен

#47 2011.12.12 21:27

Gemor
Гость

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

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

#48 2011.12.12 21:38

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

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

А, типа как ты показал getArray()/getTable().
Но там тогда надо будет массивом возвращать.
- - - -
Т.к. у меня там getStart точка отсчета.
Знач если getStop не будет, то просто все в одном вернуть и все.

Отредактировано tipsun (2011.12.12 22:10)

Неактивен

#49 2011.12.12 22:10

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

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

вот в зависимости от get* возвращай как просят.

Неактивен

#50 2011.12.12 22:11

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

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

И так и так короче...

Неактивен

#51 2011.12.12 23:16

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
 
class pageMan {
        
        private
        $_count   null,
        $_page    null,
        $_tmpPage 1,
        $_pages   null,
        $_start   null;
        
        private static
        $_items 10;
        
        public function setCount($count) {
            
            if (is_numeric($count) and $count) {
                
                $this->_count = (int)$count;
            }
            else {
                
                trigger_error('Value must be integer'E_USER_ERROR);
            }
            
            return $this;
        }
        
        public function setPage($page) {
            
            if (is_numeric($page) and $page) {
                
                $this->_tmpPage = (int)$page;
            }
            
            return $this;
        }
        
        public function setItems($items) {
            
            if (is_numeric($items)) {
                
                if ($items$this->_items = (int)$items;
                //else            $this->_items = $this->_count;
            }
            else {
                
                $this->_items self::$_items;
            }
            
            return $this;
        }
        
        /**
         * pageMan::getPages()
         * Расчет общего кол-ва страниц.
         * @return integer
         */
        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::_methodArray()
         * Расчет конечной точки отсчета показа записей в цикле для массива данных.
         * @return integer
         */
        public function getArray() {
            
            if (null === $this->_count) {
                
                trigger_error('Not enough data'E_USER_ERROR);
            }
            
            return array('start'=>$this->_setStart(), 'stop'=>min(($this->_setStart() + $this->_items), $this->_count));
        }
        
        /**
         * pageMan::_methodTable()
         * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB).
         * @return integer
         */
        public function getTable() {
            
            return array('start'=>$this->_setStart(), 'stop'=>$this->_items);
        }
    }
 
?>

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

Неактивен

#52 2011.12.12 23:31

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

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

Хотя в принципе там только за count следить надо smile

Неактивен

#53 2011.12.13 00:29

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

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

почему у тебя _items объявлена статическим свойством, а работаешь ты с ним как с динамическим?

Неактивен

#54 2011.12.13 12:21

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
<?php
 
        const ITEMS 10;
        
        private
        $_count   null,
        $_page    null,
        $_tmpPage 1,
        $_items   null,
        $_pages   null,
        $_start   null;
        
        public function setItems($items) {
            
            if (is_numeric($items)) {
                
                if ($items$this->_items = (int)$items;
                //else            $this->_items = $this->_count;
            }
            else {
                
                $this->_items self::ITEMS;
            }
            
            return $this;
        }
 
?>

Отредактировано tipsun (2011.12.13 12:25)

Неактивен

#55 2011.12.13 12:26

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

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

а переопределять ты ее тогда как собираешься?

Неактивен

#56 2011.12.13 12:28

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

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

Код:

1
2
3
4
5
6
<?php
 
const ITEMS 10//это как дефолтное значение, можно тупо без нее 10 написать и все, если пользователь не указал ниче.
private $_items null//там есть =)
 
?>

Добавлено спустя   3 минуты  2 секунды:
Еще если условию 0 < не удовлетворяет, то надо опять присвоить из константы

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

Неактивен

#57 2011.12.13 12:35

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

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

почему бы просто не работать с динамическим свойством?

Неактивен

#58 2011.12.13 15:09

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<?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 $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 $page) {
                
                $this->_tmpPage = (int)$page;
            }
            
            return $this;
        }
        
        /**
         * pageMan::setItems()
         * Регистрация количества записей на страницу.
         * @param mixed $items
         * @return object
         */
        public function setItems($items) {
            
            if (is_numeric($items)) {
                
                if ($items) {
                    
                    $this->_items = (int)$items;
                }
                else if ($this->_count) {
                    
                    $this->_items $this->_count;
                }
            }
            
            return $this;
        }
        
        /**
         * pageMan::getPages()
         * Расчет общего кол-ва страниц.
         * @return integer
         */
        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 integer
         */
        public function getArray() {
            
            if (null === $this->_count) {
                
                trigger_error('Not enough data'E_USER_ERROR);
            }
            
            return array(
            'start' => $this->_setStart(),
            'stop'  => min(($this->_setStart() + $this->_items), $this->_count));
        }
        
        /**
         * pageMan::getTable()
         * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB).
         * @return integer
         */
        public function getTable() {
            
            return array(
            'start' => $this->_setStart(),
            'stop'  => $this->_items);
        }
    }
 
?>

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

Неактивен

#59 2011.12.13 22:53

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

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

* pageMan::getPages()
* Расчет общего кол-ва страниц.
* @return float, а не int...

Отредактировано tipsun (2011.12.13 22:54)

Неактивен

#60 2011.12.13 23:05

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

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

Вот еще заметил. Зачем 2 раза к методу обращаться, если свойство с 1 запуска метода будет определено. smile

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
/*
return array(
'start' => $this->_setStart(),
'stop'  => min(($this->_setStart() + $this->_items), $this->_count));
*/
 
return array(
'start' => $this->_setStart(),
'stop'  => min(($this->_start $this->_items), $this->_count));
 
?>

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

Неактивен

#61 2011.12.13 23:29

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
<?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 $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
Сообщений: 6549
Карма: 108
Профиль Веб-сайт

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

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

Неактивен

#63 2011.12.14 15:27

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

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

Добавил phpDoc.

Неактивен

#64 2011.12.14 18:37

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

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

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

Неактивен

#65 2011.12.15 19:31

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<?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 $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 $page) {
                
                $this->_tmpPage = (int)$page;
            }
            
            return $this;
        }
        
        /**
         * pageMan::setItems()
         * Регистрация количества записей на страницу.
         * @param mixed $items
         * @return object
         */
        public function setItems($items) {
            
            if (is_numeric($items)) {
                
                if ($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 $range) ? (int)$range 4;
            
            $min $this->getPage() - $range;
            $max $this->_page $range;
            
            $min $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
Сообщений: 2279
Карма: 19
Профиль

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

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

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

Неактивен

#67 2011.12.15 21:07

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

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

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

Неактивен

#68 2011.12.15 21:19

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

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

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

CSS

Код:

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

PHP

Код:

1
2
3
4
5
6
7
8
9
10
11
12
<?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
Сообщений: 2279
Карма: 19
Профиль

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

PHP file

Код:

1
2
3
4
5
6
7
8
<?php
 
$pg = new pageMan();
$pg->setCount(1000)->setPage($_GET['p']);
define('NOW_PAGE'$pg->getPage());
define('LAST_PAGE'$pg->getPages());
 
?>

TPL file

Код:

1
2
3
4
5
6
7
8
<?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
Сообщений: 6549
Карма: 108
Профиль Веб-сайт

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

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

Неактивен

#71 2011.12.16 11:58

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

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

Исправил.

Неактивен

#72 2011.12.16 18:13

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

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

Пытаюсь сделать типа если недостает ранжировка до (2 * $range + 1) то перебросить значения с начала в конец. И наоборот.
Пока чет не соображу.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
$range 3;
 
/*
[1] 2 3 4 5 6 7
 
3 4 5 [6] 7 8 9
 
3 4 5 6 7 8 [9]
*/
 
?>

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

Неактивен

#73 2011.12.17 10:11

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

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

Кажется получилось!!!

Смотрел при 10-100 записях (10 записей = 1стр.) нормально.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
        public function getPageRange($range=null) {
            
            $range = (is_numeric($range) and $range) ? (int)$range 4;
            
            $prev $this->getPage() - $range;
            $next $this->_page     $range;
            
            $start $this->getPages() < $next $this->_pages $next $prev $prev;
            $stop  =                 $prev $next $prev 1             $next;
            
            $start =             $start $start 1;
            $stop  $this->_pages $stop  $stop  $this->_pages;
            
            return range($start$stop);
        }
 
?>

Отредактировано tipsun (2011.12.17 12:10)

Неактивен

#74 2011.12.18 22:01

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

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

без каментов ничего не понимаю =ь
а так с ходу видно, что 4 нужно в настройки вынести.

Неактивен

#75 2011.12.18 22:12

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

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

Ну это предназначалось для перекидывания значений между начальной и конечной точкой.
Т.е. вместо:
- 1) [1] 2 3 4
будет:
[1] 2 3 4 5 6 7
т.е. минусовая ранжировка превратилась в плюсовую.
Для чего это?
Для плавной прокрутки.
Вместо:
- 2) 1 [2] 3 4 5
будет:
1 [2] 3 4 5 6 7
И чо?
Ну если посмотреть в пункт (1) там 4 элемента. А в (2) уже 5.
В принципе это все не так уж необходимо. big_smile
- - - -
Еще думаю добавить начальную и конечную страницу,
но при этом нарушается плавность.

Отредактировано tipsun (2011.12.18 22:25)

Неактивен

#76 2011.12.19 16:41

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

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

Получилось! http://wapinet.ru/forum/download.php?aid=949

Строго 7 элементов/квадратиков с номерами страниц, при использовании -2/+2 ранжировки.

Код:

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
<?php
 
        /**
         * pageMan::getPageRange()
         * Получение ближайшего отрезка номеров страниц для создания навигации вида: (1 10 11 [12] 13 14 n).
         * @return array
         */
        public function getPageRange($range=null) {
            
            if (== $this->getPages()) return array(1);
            
            $range = (is_numeric($range) and $range) ? (int)$range 4//про 4 не забыл. =) В константу её.
            
            $prev $this->getPage() - $range;
            $next $this->_page     $range;
 
            $start $this->getPages() < $next $this->_pages $next $prev $prev;
            $stop  =                 $prev $next $prev 1             $next;
            
            $start -= $this->_pages <= $stop 0;
            $stop  += >= $start 0;
            
            $start $start $start 1;
            $stop  $this->_pages $stop $stop $this->_pages;
            
            $array range($start$stop);
            
            if ($start) {
                
                array_unshift($array1);
            }
            
            if ($this->_pages $stop) {
                
                $array[] = $this->_pages;
            }
            
            return $array;
        }
 
?>

Вложения

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

Неактивен

#77 2011.12.20 09:55

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

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

В ZF надо посмотреть есть ли такой же метод ранжировки. Скорее всего конечно же есть. И наверно проще сделано. sad

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

Неактивен

#78 2011.12.20 22:02

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

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

Вот, для наглядности.


Вложения

Неактивен

#79 2011.12.20 22:16

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

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

phpDoc не совсем верные
@return object замени на @return pageMan
@param mixed $count на @param integer $count
и тд. так же убери pageMan::getTable() и проч, как будто ты описываешь статические методы.
а так, не вдаваясь в подробности выглядит норм.

Неактивен

#80 2011.12.20 22:24

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

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

Ок, спс.

Неактивен

#81 2011.12.20 23:19

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

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

Математика у меня в pageMan::pageRange() неправильная, мне кажется.
Хотя там все работает верно.
Если расчитать все четко не получится, то увы. Будет как есть.

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

Неактивен

#82 2011.12.21 09:13

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 867
Карма: 11
Профиль Веб-сайт

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

Я с телефона, и половины темы не осилил! Код обрезает ппц! Убери для вап версии, в стиле (забыл как называеется) скроулинг


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#83 2011.12.21 12:02

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

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

Nu3oN, уберу

Неактивен

#84 2011.12.23 15:54

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

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

Нет, чет лучше и проще никак не могу придумать. sad

Отредактировано tipsun (2011.12.23 16:01)

Неактивен

#85 2011.12.23 19:28

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
<?php
 
        /**
         * pageMan::getPageRange()
         * Получение ближайшего отрезка номеров страниц для создания навигации вида: (10 11 [12] 13 14).
         * @return array
         */
        public function getPageRange($range=null) {
            
            if (== $this->getPages()) return array(1);
            
            $range = (is_numeric($range) and $range) ? (int)$range DEF_RANGE//CONST DEF_RANGE = 3;
            
            $prev $this->getPage() - $range;
            $next $this->_page     $range;
 
            $start $this->getPages() < $next $this->_pages $next $prev $prev;
            $stop  =                 $prev $next $prev 1             $next;
            
            $start -= $this->_pages <= $stop  0;
            $stop  +=             >= $start 0;
            
            $start =             $start $start 1;
            $stop  $this->_pages $stop  $stop  $this->_pages;
            
            //не то! ^_^ я уже лучше придумал. if ($start == $stop) return array(1);
            $array range($start$stop);
            
            if ($start) {
                
                array_unshift($array1);
            }
            
            if ($this->_pages $stop) {
                
                $array[] = $this->_pages;
            }
            
            return $array;
        }
?>

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

Неактивен

#86 2012.01.04 11:24

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

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

Akdmehp написал:


255, tipsun, смотрю навигацию в "живом" режиме.
Приятно, что используется
phpDoc - это плюс.
Итак, не совсем понял, зачем
делать так: $_count=null;
приравнивание переменной значению null равно её
удалению. То есть, ты
создаешь переменную, удаляя
её. Проще либо приравнивать
нулю или значениям по-
умолчанию, либо так: private $_count, $_page,
$_pages, $_start, $_tmpPage =
1, $_items = 10;
Не хватает для наглядности
примера использования.
Плохо, что нету конструктора, так было бы намного
нагляднее, советую добавить
конструктор.
Также по правилам хорошего
тона имя класса делаем с
большой. в phpDoc после * @param mixed
$count указываем что эта
переменная значит - по
правилам хорошего тона, ну и
после return указываем, что
именно возвращает. Советую использовать в
классе систему try/catch, это
будет намного логичнее, чем
генерировать ошибки.
Пример конструктора на твоем
коде, хотя я все равно бы код рефакторил:
__construct($count, $page,
$items);
Просмотрел. В принципе,
работы очень много, все можно
переделать короче и лучше, используя в два раза меньше
методов, так как это в свою
очередь запутывает код. В общем, работай дальше!

Благодаря Gemorroj'ю (насчет phpDoc) плюс заработал smile
Добавлено спустя   5 минут  51 секунду:
Я вот уже думаю насчет рефактора кода и конструктор, в принципе, добавить не проблема.
Добавлю конструктор а переменные буду обрабатывать методами, которые принимают данные.
try/catch даже не знаю че такое, придется учить.
Насчет $var = null; даже не знал.

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

Неактивен

#87 2012.01.04 11:31

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

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

>> приравнивание переменной значению null равно её
удалению.
нет, это не так. если переменная существует (даже со значением null), под нее уже выделена память.
в остальном все так.
ссылки на стандарты кодирования
http://pear.php.net/manual/ru/standards.php
http://framework.zend.com/manual/ru/cod … ndard.html
я бы советовал придерживаться зендовских соглашений. PEAR отличается в мелочах.

Неактивен

#88 2012.01.04 11:41

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

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

Gemorroj, ок. Спс. smile

Неактивен

#89 2012.01.04 12:54

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

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

С телефона не комфортно читать... Потом с компа еще раз прочту.

Неактивен

#90 2012.01.04 19:40

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

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

Gemorroj написал:

phpDoc не совсем верные
@return object замени на @return pageMan
@param mixed $count на @param integer $count
и тд. так же убери pageMan::getTable() и проч, как будто ты описываешь статические методы.
а так, не вдаваясь в подробности выглядит норм.

Сделано.


Вложения

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

Неактивен

#91 2012.01.05 12:01

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

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

а зачем ты пишешь в доках название метода а потом описание?
по правилам сначала короткое описание, а потом развернутое. дублировать название метода не надо
Добавлено спустя    55 секунд:

Код:

1
2
3
4
5
6
/**
* getPageRange()
* Получение ближайшего отрезка номеров страниц для создания навигации вида: (10 11 [12] 13 14).
* @return array
*/
public function getPageRange($range=null)

@param нету

Неактивен

#92 2012.01.05 12:36

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

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

А точно, вчера же тоже читал про это. sad Сейчас.

Неактивен

#93 2012.01.05 13:23

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

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

Мдэ... 2011.10.28 21:52 - первый вид класса навигации моего... и до сих пор мучаюсь big_smile

Отредактировано tipsun (2012.01.05 15:31)

Неактивен

#94 2012.01.05 17:20

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

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

Чет никак.
Может как тогда сделать, через __construct($count, $page, $items)
Сделать параметры обязательными, и убрать все эти setCount(), и т.д.
Тогда и ошибки ловить не надо будет.
Я вообще их ловить не умею, ну через try/catch

Неактивен

#95 2012.01.05 18:26

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

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

я не понимаю проблемы.

Неактивен

#96 2012.01.05 18:27

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

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

Ну ловить тоже че,

Код:

1
2
3
4
5
<?php
 
try {
    throw new Exception('about error');
} catch(Exception $e) { echo $e->getMessage(); }

Это понятно, а как в коде, куда это все.

Неактивен

#97 2012.01.05 18:31

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

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

в каком коде?

Неактивен

#98 2012.01.05 18:35

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

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
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));
 
}

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

Неактивен

#99 2012.01.05 18:55

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

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

__construct() и типа рефакторинг. Все вытекающие последствия.
Если чего тут (в теме) архив есть, с него заново начну.

Код:

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
<?php
 
class PageMan
{
 
    const
    DEFAULT_RANGE 3;
 
    private
    $_count   0,
    $_page    1,
    $_items   10,
    $_pages   0,
    $_start   0;
 
    /**
     * Проверка, является ли число натуральным.
     * @param integer $var
     * @return bool
     */
    public function isNatural($var)
    {
 
        if (is_numeric($var) and $var)
        return true;
        return false;
    }
 
    /**
     * @param integer $count
     * @param integer $page
     * @param integer $items
     */
    public function __construct($count=null$page=null$items=null)
    {
 
        if ($count and $this->isNatural($count)) $this->_count = (int)$count;
        if ($page  and $this->isNatural($page))  $this->_page  = (int)$page;
        if ($items and $this->isNatural($items)) $this->_items = (int)$items;
    }
 
    /**
     * Регистрация общего количества записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
 
        $this->__construct($count);
        return $this;
    }
 
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
 
        $this->__construct(0$page);
        return $this;
    }
 
    /**
     * Регистрация количества записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
 
        $this->__construct(00$items);
        return $this;
    }

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

Неактивен

#100 2012.01.05 19:27

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

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

это полный ахтунг! весь смысл конструктора просто катится в говно)
зачем ты в getArray делаешь такую проверку? if (null === $this->_count) {
что мешает делать ее в сеттере, а по дефолту задать нормальные значения?

Неактивен

#101 2012.01.05 20:21

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

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

Ну так если пользователь ниче не введет, то с чем работать? >_>

Неактивен

#102 2012.01.05 20:55

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

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

с дефолтовыми данными!

Неактивен

#103 2012.01.05 21:36

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
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
115
116
117
118
119
120
<?php
 
class PageMan
{
 
    const
    DEFAULT_RANGE 3;
 
    private
    $_count   0,
    $_page    1,
    $_items   10,
    $_pages   null,
    $_start   null;
    
    public function __construct()
    {
    }
    
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $var
     * @return bool
     */
    public function isNatural($var)
    {
        
        return (is_numeric($var) and $var);
    }
    
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
 
        if ($this->isNatural($count)) {
            
            $this->_count = (int)$count;
        }
 
        return $this;
    }
 
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
 
        if ($this->isNatural($page)) {
            
            $this->_page -= (int)$page 1;
        }
        
        return $this;
    }
 
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
 
        if ($this->isNatural($items)) {
            
            $this->_items = (int)$items;
        }
        else if($this->_count) {
            
            $this->_items $this->_count;
        }
 
        return $this;
    }
 
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        
        if (null === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            if (== $this->_pages$this->_pages += 1;
        }
 
        return $this->_pages;
    }
 
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
 
        if ($this->_page) {
            
            $this->_page = -$this->_page;
            
            if ($this->_page $this->getPages()) {
                
                $this->_page $this->_pages;
            }
        }
 
        return $this->_page;
    }
 
//продолжение следует...
}

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

Неактивен

#104 2012.01.05 21:42

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

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

убери из конструктора передачу параметров и мб сделай класс сингелтоном.
так же исправь вызовы isNatural
сам isNatural можно сделать таким:
return (is_numeric($var) and 0 < $var);

Неактивен

#105 2012.01.05 22:20

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

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

Gemorroj написал:


сам isNatural можно сделать таким:
return (is_numeric($var) and 0 < $var);

Круто. Тоже true/false возвращает. smile

Неактивен

#106 2012.01.05 23:05

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

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

Gemorroj написал:

так же исправь вызовы isNatural

ты запускал свой класс вообще?)

Неактивен

#107 2012.01.05 23:09

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

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

Неа smile
Я все редактиру, да редактирую.
Сейчас. Секунду.
- - - -
Синглтон (Singleton) тоже посмотрел, завтра добавлю, надеюсь.

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

Неактивен

#108 2012.01.05 23:22

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

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

Хмм, я её даже переименовал, все. Все равно ошибку дает. sad
Fatal error: Call to undefined function kakaxa() in /usr/home/tipsun/ext/pageman/index.php on line 44
Если её убрать. То на следующий вызов так же говорит.
Чудеса и только...

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

Неактивен

#109 2012.01.05 23:35

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

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

Ой. Совсем уже!!! $this->isNatural()
Добавлено спустя   2 минуты  55 секунд:
Ща фишку тоже напишу и спать срочно.

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

Неактивен

#110 2012.01.05 23:48

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

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

Все написал фишку #103, связана с $this->_page и $this->getPage()
Не хотел использовать $_tmpPage
Расчитана на повторное использование getPage() чтоб лишний раз лишние функции не трогать
Оригинальный дебилизм big_smile
Все таки $_tmpPage проще намного. Потом переделаю.

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

Неактивен

#111 2012.01.06 11:26

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
<?php
 
class PageMan
{
    const
    DEFAULT_RANGE 3;
    
    private static $instance;
    
    private
    $_count 0,
    $_page  null$_tmpPage 1,
    $_items 10,
    $_pages null,
    $_start null;
    
    public function __construct()
    {
    }
    
    /**
     * Singleton
     * @link http://php.net/manual/en/language.oop5.patterns.php
     */
    public static function singleton()
    {
        if (! isset(self::$instance)) {
            
            self::$instance = new PageMan;
        }
        
        return self::$instance;
    }
    
    public function __clone()
    {
        trigger_error('Clone is not allowed.'E_USER_ERROR);
    }
    
    public function __wakeup()
    {
        trigger_error('Unserializing is not allowed.'E_USER_ERROR);
    }
    
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $var
     * @return bool
     */
    public function isNatural($var)
    {
        
        return (is_numeric($var) and $var);
    }
    
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
        
        if ($this->isNatural($count)) {
            
            $this->_count = (int)$count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
        
        if ($this->isNatural($page)) {
            
            $this->_tmpPage = (int)$page;
        }
        
        return $this;
    }
    
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
        
        if ($this->isNatural($items)) {
            
            $this->_items = (int)$items;
        }
        else if($this->_count) {
            
            $this->_items $this->_count;
        }
        
        return $this;
    }
    
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        
        if (null === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            if (== $this->_pages$this->_pages += 1;
        }
        
        return $this->_pages;
    }
    
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
        
        if (null === $this->_page) {
            
            $this->_page min($this->_tmpPage$this->getPages());
        }
        
        return $this->_page;
    }
    
    /**
 
     * Расчет начальной точки отсчета показа записей в вашем цикле.
 
     * @return integer
 
     */
 
    private function _setStart() {
 
        
 
        if (null === $this->_start) {
 
            
 
            $this->_start = ($this->getPage() - 1) * $this->_items;
 
        }
 
        
 
        return $this->_start;
 
    }
    
    /**
 
     * Расчет конечной точки отсчета показа записей в цикле для массива данных.
 
     * @return array
 
     */
 
    public function getArray() {
 
        
 
        return array(
 
        'start' => $this->_setStart(),
 
        'stop'  => min(($this->_start $this->_items), $this->_count));
 
    }
 
    
 
    /**
 
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
 
     * @return array
 
     */
 
    public function getTable() {
 
        
 
        return array(
 
        'start' => $this->_setStart(),
 
        'stop'  => $this->_items);
 
    }
    
    /**
 
     * Получение ближайшего отрезка номеров страниц для создания навигации
     * вида: (1 p-2 p-1 [p] p+1 p+2 N).
 
     * @return array
 
     */
 
    public function getPageRange($range=null) {
 
        
        if (== $this->getPages()) return array(1);
        
 
        $range $this->isNatural($range) ? (int)$range DEFAULT_RANGE;
 
        
 
        $prev $this->getPage() - $range;
 
        $next $this->_page     $range;
 
        
 
        $start $this->_pages $next $this->_pages $next $prev $prev;
 
        $stop  =             $prev $next $prev 1             $next;
 
        
 
        $start -= $this->_pages <= $stop  0;
 
        $stop  +=             >= $start 0;
 
        
 
        $start =             $start $start 1;
 
        $stop  $this->_pages $stop  $stop  $this->_pages;
 
        
 
        $array range($start$stop);
 
        
 
        if ($start) {
 
            
 
            array_unshift($array1);
 
        }
 
        
 
        if ($this->_pages $stop) {
 
            
 
            $array[] = $this->_pages;
 
        }
 
        
 
        return $array;
 
    }
}

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

Неактивен

#112 2012.01.06 11:52

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

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

Может __clone() и __wakeup() переназвачить на:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
/**
     * Singleton
     * @link http://php.net/manual/en/language.oop5.patterns.php
     */
    public static function singleton()
    {
        if (! isset(self::$instance)) {
            
            self::$instance = new PageMan;
        }
        
        return self::$instance;
    }
    
    public function __clone()
    {
        return singleton();
    }
    
    public function __wakeup()
    {
        return singleton();
    }

Неактивен

#113 2012.01.06 12:02

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

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

нет. обычно их делают приватными просто. так же как и конструктор.
и назови метод не singleton, а getInstance.
вообще, я тут подумал, может это и плохая идея сингелтон для пагинатора. т.к. на странице может быть несколько разных пагинаций, и в случае с сингелтоном реализовать их будет не оч удобно, т.к. мы будем работать с 1 объектом.

Неактивен

#114 2012.01.06 21:25

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?php
 
class PageMan
{
    const
    DEFAULT_RANGE 3;
    
    private
    $_count 0,
    $_page  null$_tmpPage 1,
    $_items 10,
    $_pages null,
    $_start null;
    
    private function __construct()
    {}
    
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $var
     * @return bool
     */
    public function isNatural($var)
    {
        return (is_numeric($var) and $var);
    }
    
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
        if ($this->isNatural($count)) {
            
            $this->_count = (int)$count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
        if ($this->isNatural($page)) {
            
            $this->_tmpPage = (int)$page;
        }
        
        return $this;
    }
    
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
        if ($this->isNatural($items)) {
            
            $this->_items = (int)$items;
        }
        else if($this->_count) {
            
            $this->_items $this->_count;
        }
        
        return $this;
    }
    
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (null === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            if (== $this->_pages$this->_pages += 1;
        }
        
        return $this->_pages;
    }
    
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
        if (null === $this->_page) {
            
            $this->_page min($this->_tmpPage$this->getPages());
        }
        
        return $this->_page;
    }
    
    /**
     * Расчет начальной точки отсчета показа записей в вашем цикле.
     * @return integer
     */
    private function _setStart()
    {
        if (null === $this->_start) {
            
            $this->_start = ($this->getPage() - 1) * $this->_items;
        }
        
        return $this->_start;
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для массива данных.
     * @return array
     */
    public function getArray()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => min(($this->_start $this->_items), $this->_count));
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
     * @return array
     */
    public function getTable()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => $this->_items);
    }
    
    /**
     * Получение ближайшего отрезка номеров страниц для создания навигации
     * вида: (1 p-2 p-1 [p] p+1 p+2 N).
     * @return array
     */
    public function getPageRange($range=null)
    {
        if (== $this->getPages()) return array(1);
        
        $range $this->isNatural($range) ? (int)$range DEFAULT_RANGE;
        
        $prev $this->getPage() - $range;
        $next $this->_page     $range;
        
        $start $this->_pages $next $this->_pages $next $prev $prev;
        $stop  =             $prev $next $prev 1             $next;
        
        $start -= $this->_pages <= $stop  0;
        $stop  +=             >= $start 0;
        
        $start =             $start $start 1;
        $stop  $this->_pages $stop  $stop  $this->_pages;
        
        $array range($start$stop);
        
        if ($startarray_unshift($array1);
        if ($this->_pages $stop$array[] = $this->_pages;
        
        return $array;
    }
}

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

Неактивен

#115 2012.01.06 21:39

Akdmeh
Участник
Откуда: Киев и рядом;)
Зарегистрирован: 2008.11.30
Сообщений: 257
Карма: 9
Профиль Веб-сайт

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

Да прекрати ты использовать наконец $_pages = null, $_start = null;, это глупо!
Я же говорил, просто назови их, да дело в шляпе: private $_pages, $_start.
Или я не прав?


Желание стать программистом из-за того, что вам нравляться компьютерные игры-это все равно, что желание стать гинекологом из-за того, что вам нравиться сексwink

Неактивен

#116 2012.01.06 21:44

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?php
 
class PageMan
{
    const
    DEFAULT_RANGE 3;
    
    private
    $_count 0,
    $_page  false$_tmpPage 1,
    $_items 10,
    $_pages false,
    $_start false;
    
    private function __construct()
    {}
    
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $var
     * @return bool
     */
    public function isNatural($var)
    {
        return (is_numeric($var) and $var);
    }
    
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
        if ($this->isNatural($count)) {
            
            $this->_count = (int)$count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
        if ($this->isNatural($page)) {
            
            $this->_tmpPage = (int)$page;
        }
        
        return $this;
    }
    
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
        if ($this->isNatural($items)) {
            
            $this->_items = (int)$items;
        }
        else if($this->_count) {
            
            $this->_items $this->_count;
        }
        
        return $this;
    }
    
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (false === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            if (== $this->_pages$this->_pages += 1;
        }
        
        return $this->_pages;
    }
    
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
        if (false === $this->_page) {
            
            $this->_page min($this->_tmpPage$this->getPages());
        }
        
        return $this->_page;
    }
    
    /**
     * Расчет начальной точки отсчета показа записей в вашем цикле.
     * @return integer
     */
    private function _setStart()
    {
        if (false === $this->_start) {
            
            $this->_start = ($this->getPage() - 1) * $this->_items;
        }
        
        return $this->_start;
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для массива данных.
     * @return array
     */
    public function getArray()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => min(($this->_start $this->_items), $this->_count));
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
     * @return array
     */
    public function getTable()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => $this->_items);
    }
    
    /**
     * Получение ближайшего отрезка номеров страниц для создания навигации
     * вида: (1 p-2 p-1 [p] p+1 p+2 N).
     * @return array
     */
    public function getPageRange($range='')
    {
        if (== $this->getPages()) return array(1);
        
        $range $this->isNatural($range) ? (int)$range DEFAULT_RANGE;
        
        $prev $this->getPage() - $range;
        $next $this->_page     $range;
        
        $start $this->_pages $next $this->_pages $next $prev $prev;
        $stop  =             $prev $next $prev 1             $next;
        
        $start -= $this->_pages <= $stop  0;
        $stop  +=             >= $start 0;
        
        $start =             $start $start 1;
        $stop  $this->_pages $stop  $stop  $this->_pages;
        
        $array range($start$stop);
        
        if ($startarray_unshift($array1);
        if ($this->_pages $stop$array[] = $this->_pages;
        
        return $array;
    }
}

Отредактировано tipsun (2012.01.06 22:07)

Неактивен

#117 2012.01.07 10:32

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

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

Akdmeh, да пофик на самом деле. И так, и так переменная будет со значением null. Если мы явно это указываем, мб, так нагляднее, если не указываем - экономим несколько символов кода)
tipsun, false - это худший вариант.
isNatural сделай приватным или защищенным.
getPageRange($range='') не документирован параметр $range.
$range = $this->isNatural($range) ? (int)$range : DEFAULT_RANGE; не верно. вместо DEFAULT_RANGE нужно self::DEFAULT_RANGE.
сам DEFAULT_RANGE тоже документируй.
думаю, параметр $range лучше в объявлении метода указать так public function getPageRange($range = PageMan::DEFAULT_RANGE).
Да и вообще, константу лучше переназвать как минимум RANGE_DEFAULT. Чтобы если добавятся новые RANGE_* у них был один префикс.

Неактивен

#118 2012.01.07 10:47

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

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

Ок. Но я думал, что задав getPageRange($range='')
'' - это уже (string).
(-хотя это не совсем то, наверно false лучше или тот же null-)
При проверке на натуральность первая проверка даст ошибку, второе условие даже не будет проверяться.
Значит и само условие даст ошибку. И обойдемся без (int), которое тоже вроде время забирает. Хотя по умолчанию (RANGE_DEFAULT) у нас и так (int). Сделаю без = null;
ну так: private $var1, $var2;

Отредактировано tipsun (2012.01.07 10:54)

Неактивен

#119 2012.01.07 10:56

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

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

tipsun написал:

Ок. Но я думал, что задав getPageRange($range='') '' - это уже (string).

да стринг, но человека использующего твой код этот стринг введет в замешательство. Если тебя так беспокоит явное приведение к инту, то можешь его убрать вообще, isNatural уже говорит о том, что использование переменной будет безопасным.

Неактивен

#120 2012.01.07 17:21

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?php
 
class PageMan
{
    private
    $_count   0,
    $_tmpPage 1,
    $_items   10,
    $_range   2,
    $_page,
    $_pages,
    $_start;
    
    private function __construct()
    {}
    
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $var
     * @return bool
     */
    private function _isNatural($var)
    {
        return (is_numeric($var) and $var);
    }
    
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
        if ($this->_isNatural($count)) {
            
            $this->_count = (int)$count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
        if ($this->_isNatural($page)) {
            
            $this->_tmpPage = (int)$page;
        }
        
        return $this;
    }
    
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
        if ($this->_isNatural($items)) {
            
            $this->_items = (int)$items;
        }
        else if($this->_count) {
            
            $this->_items $this->_count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация масштаба ранжировки.
     * @param integer $range
     * @return pageMan
     */
    public function setRange($range)
    {
        if ($this->_isNatural($range)) {
            
            $this->_range = (int)$range;
        }
        
        return $this;
    }
    
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (null === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            if (== $this->_pages$this->_pages += 1;
        }
        
        return $this->_pages;
    }
    
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
        if (null === $this->_page) {
            
            $this->_page min($this->_tmpPage$this->getPages());
        }
        
        return $this->_page;
    }
    
    /**
     * Расчет начальной точки отсчета показа записей в вашем цикле.
     * @return integer
     */
    private function _setStart()
    {
        if (null === $this->_start) {
            
            $this->_start = ($this->getPage() - 1) * $this->_items;
        }
        
        return $this->_start;
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для массива данных.
     * @return array
     */
    public function getArray()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => min(($this->_start $this->_items), $this->_count));
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
     * @return array
     */
    public function getTable()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => $this->_items);
    }
    
    /**
     * Получение ближайшего отрезка номеров страниц для создания навигации
     * вида: (1 p-2 p-1 [p] p+1 p+2 N).
     * @return array
     */
    public function getRange()
    {
        if (== $this->getPages()) return array(1);
        
        $prev $this->getPage() - $this->_range;
        $next $this->_page     $this->_range;
        
        $start $this->_pages $next $this->_pages $next $prev $prev;
        $stop  =             $prev $next $prev 1             $next;
        
        $start -= $this->_pages <= $stop  0;
        $stop  +=             >= $start 0;
        
        $start =             $start $start 1;
        $stop  $this->_pages $stop  $stop  $this->_pages;
        
        $array range($start$stop);
        
        if ($startarray_unshift($array1);
        if ($this->_pages $stop$array[] = $this->_pages;
        
        return $array;
    }
}

Неактивен

#121 2012.01.07 21:42

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

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

наверное, метод getRange лучше переименовать, т.к. он не является геттером переменной range (сеттер setRange).

Неактивен

#122 2012.01.07 22:07

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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?php
 
class PageMan
{
    private
    $_count   0,
    $_tmpPage 1,
    $_items   10,
    $_range   2,
    $_page,
    $_pages,
    $_start;
    
    private function __construct()
    {}
    
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $var
     * @return bool
     */
    private function _isNatural($var)
    {
        return (is_numeric($var) and $var);
    }
    
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
        if ($this->_isNatural($count)) {
            
            $this->_count = (int)$count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
        if ($this->_isNatural($page)) {
            
            $this->_tmpPage = (int)$page;
        }
        
        return $this;
    }
    
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
        if ($this->_isNatural($items)) {
            
            $this->_items = (int)$items;
        }
        else if($this->_count) {
            
            $this->_items $this->_count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация масштаба ранжировки.
     * @param integer $range
     * @return pageMan
     */
    public function setRange($range)
    {
        if ($this->_isNatural($range)) {
            
            $this->_range = (int)$range;
        }
        
        return $this;
    }
    
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (null === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            if (== $this->_pages$this->_pages += 1;
        }
        
        return $this->_pages;
    }
    
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
        if (null === $this->_page) {
            
            $this->_page min($this->_tmpPage$this->getPages());
        }
        
        return $this->_page;
    }
    
    /**
     * Расчет начальной точки отсчета показа записей в вашем цикле.
     * @return integer
     */
    private function _setStart()
    {
        if (null === $this->_start) {
            
            $this->_start = ($this->getPage() - 1) * $this->_items;
        }
        
        return $this->_start;
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для массива данных.
     * @return array
     */
    public function getArray()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => min(($this->_start $this->_items), $this->_count));
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
     * @return array
     */
    public function getTable()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => $this->_items);
    }
    
    /**
     * Получение ближайшего отрезка номеров страниц для создания навигации
     * вида: (1 p-2 p-1 [p] p+1 p+2 N).
     * @return array
     */
    public function getPageRange()
    {
        if (== $this->getPages()) return array(1);
        
        $prev $this->getPage() - $this->_range;
        $next $this->_page     $this->_range;
        
        $start $this->_pages $next $this->_pages $next $prev $prev;
        $stop  =             $prev $next $prev 1             $next;
        
        $start -= $this->_pages <= $stop  0;
        $stop  +=             >= $start 0;
        
        $start =             $start $start 1;
        $stop  $this->_pages $stop  $stop  $this->_pages;
        
        $array range($start$stop);
        
        if ($startarray_unshift($array1);
        if ($this->_pages $stop$array[] = $this->_pages;
        
        return $array;
    }
}

Отредактировано tipsun (2012.01.07 22:09)

Неактивен

#123 2012.01.07 22:27

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

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

Happy End? smile
Или еще чего осталось?

Отредактировано tipsun (2012.01.07 22:31)

Неактивен

#124 2012.01.07 22:43

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

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

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

Неактивен

#125 2012.01.07 22:50

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

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

Ура! smile

Неактивен

#126 2012.01.07 23:17

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

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

Код:

1
Fatal error: Call to private PageMan::__construct() from invalid context in L:\home\tt.php\www\PageMan.php on line 187

Надо конструкт публичным сделать.

Отредактировано tipsun (2012.01.08 02:07)

Неактивен

#127 2012.01.08 01:32

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
<?php
public function getPageRange()
{
    if (== $this->getPages()) return array(1);
    
    $prev $this->getPage() - $this->_range;
    $next $this->_page     $this->_range;
    //+сделаю отдельный метод может
    $start $this->_pages $next $this->_pages $next $prev $prev;
    $stop  =             $prev $next $prev 1             $next;
    
    $start -= $this->_pages <= $stop  0;
    $stop  +=             >= $start 0;
    //-сделаю отдельный метод может
        
    if(>= $start$start 1;
    else $array[] = 1;
 
    if($stop $this->_pages$stop $this->_pages;
            
    for ($i=$start$i<=$stop$i++) {
        $array[] = $i;
    }
    
    if ($stop $this->_pages$array[] = $this->_pages;
    
    return $array;
}

Отредактировано tipsun (2012.01.08 02:12)

Неактивен

#128 2012.01.08 04:02

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

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

tipsun написал:

Надо конструкт публичным сделать.

так да. закрывали его для синглтона же)

Неактивен

#129 2012.01.08 08:34

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
<?php
/**
 * Как бы будет сразу 2 метода в 1.
 * При вызове getPageRange() будет расчитываться простая ранжировка.
 * При вызове getPageRange(1)/getPageRange(true) будет расчитываться сложная ранжировка.
 */
public function getPageRange($complex=null)
{
    if (== $this->getPages()) return array(1);
    
    $prev $this->getPage() - $this->_range;
    $next $this->_page     $this->_range;
    
    if ($complex) {
        
        $start $this->_pages $next $this->_pages $next $prev $prev;
        $stop  =             $prev $next $prev 1             $next;
    
        if ($this->_pages <= $stop$start -= 1;
        if (>= $start$stop += 1;
    }
    else {
        
        $start $prev;
        $stop  $next;
    }
        
    if(>= $start$start 1;
    else $array[] = 1;
 
    if($stop $this->_pages$stop $this->_pages;
            
    for ($i=$start$i<=$stop$i++) {
        $array[] = $i;
    }
    
    if ($stop $this->_pages$array[] = $this->_pages;
    
    return $array;
}

Отредактировано tipsun (2012.01.08 08:44)

Неактивен

#130 2012.01.08 09:44

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

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

tipsun написал:

Как бы будет сразу 2 метода в 1.

никогда так не делай

Неактивен

#131 2012.01.08 09:48

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

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

Тогда getPageRange()
надо сделать управляющим.
В нем вызывать определенные методы со своими расчетами/математикой.
После устранять неточности и строить ранжировку.
- - - -
Или сделать _buildRange();
В котором так же устраняются неточности.

Отредактировано tipsun (2012.01.08 09:59)

Неактивен

#132 2012.01.08 11:35

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

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

так да. типовая ситуация. в самом простом случае, делается 2 публичных метода с отличающимся кодом и 1 приватный с общим для этих 2-х методов.

Неактивен

#133 2012.01.08 21:12

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

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

Gemorroj написал:

так да. типовая ситуация. в самом простом случае, делается 2 публичных метода с отличающимся кодом и 1 приватный с общим для этих 2-х методов.

Как ты говорил, так, в итоге, и вышло все таки big_smile

Код:

1
2
3
4
<?php
//Часто повторяется
if (== $this->getPages()) return array(1);
//Может его только в методе: _buildRange() оставить?

Код:

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<?php
 
class PageMan
{
    private
    $_count   0,
    $_tmpPage 1,
    $_items   10,
    $_range   2,
    $_page,
    $_pages,
    $_start;
    
    private function __construct()
    {}
    
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $var
     * @return bool
     */
    private function _isNatural($var)
    {
        return (is_numeric($var) and $var);
    }
    
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
        if ($this->_isNatural($count)) {
            
            $this->_count = (int)$count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация текущей страницы.
     * @param integer $page
     * @return pageMan
     */
    public function setPage($page)
    {
        if ($this->_isNatural($page)) {
            
            $this->_tmpPage = (int)$page;
        }
        
        return $this;
    }
    
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $items
     * @return pageMan
     */
    public function setItems($items)
    {
        if ($this->_isNatural($items)) {
            
            $this->_items = (int)$items;
        }
        else if($this->_count) {
            
            $this->_items $this->_count;
        }
        
        return $this;
    }
    
    /**
     * Регистрация масштаба ранжировки.
     * @param integer $range
     * @return pageMan
     */
    public function setRange($range)
    {
        if ($this->_isNatural($range)) {
            
            $this->_range = (int)$range;
        }
        
        return $this;
    }
    
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (null === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            
            if (== $this->_pages) {
                
                $this->_pages 1;
            }
        }
        
        return $this->_pages;
    }
    
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
        if (null === $this->_page) {
            
            $this->_page min($this->_tmpPage$this->getPages());
        }
        
        return $this->_page;
    }
    
    /**
     * Расчет начальной точки отсчета показа записей в вашем цикле.
     * @return integer
     */
    private function _setStart()
    {
        if (null === $this->_start) {
            
            $this->_start = ($this->getPage() - 1) * $this->_items;
        }
        
        return $this->_start;
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для массива данных.
     * @return array
     */
    public function getArray()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => min(($this->_start $this->_items), $this->_count));
    }
    
    /**
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
     * @return array
     */
    public function getTable()
    {
        return array(
        'start' => $this->_setStart(),
        'stop'  => $this->_items);
    }
    
    /**
     * Построение ряда.
     * @param integer $lower
     * @param integer $upper
     * @return array
     */
    private function _rangeBuild($lower$upper)
    {
        if (== $this->getPages()) return array(1);
        
        $array = array();
        
        if (>= $lower) {
            
            $lower 1;
        }
        else {
            
            $array[] = 1;
        }
        
        if ($this->_pages $upper) {
            
            $upper $this->_pages;
        }
        
        for ($i $lower$i <= $upper$i++) {
            
            $array[] = $i;
        }
        
        if ($this->_pages $upper) {
            
            $array[] = $this->_pages;
        }
        
        return $array;
    }
    
    public function getPageRangeSimple()
    {
        if (== $this->getPages()) return array(1);
        
        $lower $this->getPage() - $this->_range;
        $upper $this->_page     $this->_range;
        
        return $this->_rangeBuild($lower$upper);
    }
    
    public function getPageRangeComplex()
    {
        if (== $this->getPages()) return array(1);
        
        $lower $this->getPage() - $this->_range;
        $upper $this->_page     $this->_range;
        
        $lower $this->getPages() < $upper $this->_pages $upper $lower $lower;
        $upper =                 $lower $upper        $lower 1      $upper;
        
        if ($this->_pages <= $upper$lower -= 1;
        if (>= $lower)             $upper += 1;
        
        return $this->_rangeBuild($lower$upper);
    }
}

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

Неактивен

#134 2012.01.10 14:05

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

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

Хмм. Зачем так далеко было идти?
Просто надо было в setCount сделать так:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $count
     * @return pageMan
     */
    public function setCount($count)
    {
        if ($this->_isNatural($count)) {
            
            $this->_count = (int)$count;
        }
        else {
            
            $this->pages $this->page 1;
        }
        
        return $this;
    }

А если так, то можно убрать лишнее:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (null === $this->_pages) {
            
            $this->_pages = (int)ceil($this->_count $this->_items);
            
            //if (0 == $this->_pages) {
            //    
            //    $this->_pages = 1;
            //}
        }
        
        return $this->_pages;
    }

Отредактировано tipsun (2012.01.10 14:12)

Неактивен

#135 2012.01.10 15:19

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

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

Все, правку у себя тоже делаю сейчас.
Добавлено спустя   4 минуты  44 секунды:
Нет. Ошибаюсь.
А если метод вообще не будет вызван, а? Ну я Петросян.
Расскоментировать надо закомментированное.

Отредактировано tipsun (2012.01.10 15:26)

Неактивен

#136 2012.01.10 16:22

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

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

Еще можно в конструкте сделать так:
Или метод сделать такой.

Код:

1
2
3
4
5
6
7
8
9
<?php
//private
public function __construct($array)
{
    if ($array['count']) $this->setCount($array['count']);
    if ($array['page'])  $this->setPage($array['page']);
    if ($array['items']) $this->setItems($array['items']);
    if ($array['range']) $this->setRange($array['range']);
}

А еще так можно.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (null === $this->_pages) {
            
            if (== $this->count) {
                
                $this->_pages 1;
            }
            else {
                
                $this->_pages = (int)ceil($this->_count $this->_items);
            }
        }
        
        return $this->_pages;
    }

Отредактировано tipsun (2012.01.18 00:58)

Неактивен

#137 2012.01.18 00:54

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
<?php
 
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages()
    {
        if (null === $this->_pages) {
            //++++
            if (== $this->_count) {
                
                $this->_pages $this->_page 1;
            }
            else {
                
                $this->_pages = (int)ceil($this->_count $this->_items);
            }
        }
        
        return $this->_pages;
    }
    
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage()
    {
        $this->getPages();
        if (null === $this->_page) {
            
            $this->_page min($this->_tmpPage$this->_pages);
        }
        
        return $this->_page;
    }

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

Неактивен

#138 2012.01.18 22:57

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

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

В правильном направлении хоть? smile
_rangeBuild() оставить как есть?

Код:

1
2
<?php
if (== $this->getPages()) return array(1);

Убрать с _rangeBuild()?

Неактивен

#139 2012.01.18 23:00

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

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

объясни плз на что обратить внимание и вообще.. я потерял нить что-то

Неактивен

#140 2012.01.18 23:34

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

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

Данные:
1) указаны*
1.1) корректны
1.2) не корректны
2) не указаны**
- - - -
1.1: все как обычно.
1.2: определить переменные, которые должны будут расчитаны в последующем, чтоб зря не запускать методы/функции.
2: см. пункт (1.1)
- - - -
* - значит использовали методы-указатели (так их обзову).
** - были пропущены или вообще не использовались методы-указатели.
- - - -
Как-то так вот почему-то думаю.
Пост #137.
_start в принципе определить заранее тоже можно.
- - - -
А вообще нормальный пользователь сначала проверит, если записи или нет.

Код:

1
2
3
4
5
<?php
$count =//query SELECT COUNT(1/*) ...
If ($count)
//run PageMan and query SELECT 'rows' FROM 'table' LIMIT <put from PageMan>;
else echo 'Empty';

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

Неактивен

#141 2012.01.18 23:54

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

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

Надо примеры выложить...

Неактивен

#142 2012.01.19 12:38

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

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

обязательно!)

Неактивен

#143 2012.01.19 14:10

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
<?php
/////Test///// 
$PM = new PageMan
 
define('COUNT', isset($_GET['count']) ? $_GET['count'] : 100); 
 
$pages $PM->setCount(COUNT)->setPage($_GET['page'])->getPageRangeSimple(); 
 
define('NOW_PAGE',  $PM->getPage()); 
define('LAST_PAGE'$PM->getPages()); 
?> 
<html> 
<head> 
<title>Example</title> 
<style type="text/css"> 
a { text-decoration: none; } 
span.nowPage { background-color: #000; color: #fff; padding: 2px 3px 2px 3px; } 
span.pageRange { border: 1px dotted #000; padding: 1px 2px 1px 2px; } 
</style> 
</head> 
<body> 
<?php foreach ($pages as $page):?> 
<?php if (NOW_PAGE == $page):?> 
<span class="nowPage"><?php echo $page;?></span> 
<?php else:?> 
<span class="pageRange"><a href="?page=<?php echo $page;?>&amp;count=<?php echo COUNT;?>"><?php echo $page;?></a></span> 
<?php endif; endforeach;?> 
</body> 
</html>

Ну как-то так.

Код:

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
<?php
 
//$db = new PDO();
 
define('ITEMS'10);
define('COUNT', (int)$db->query("SELECT COUNT(`news_id`) FROM `news` LIMIT 1;")->fetchColumn());
 
if (COUNT) {
        
        $queryText 'SELECT `news_id`, `name`, `date`, `comments` FROM `news` ORDER BY `news_id` DESC';
        
        if (COUNT ITEMS) {
            
            include_once 'pageMan.php';
            $pg = new pageMan;
            $pg->setCount