#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() {
и еще, если метод или свойство приватное или защищенное, название должно начинаться с подчеркивания.

Неактивен

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.016 s