Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
1

Пагинатор кнопки вперед назад

25.11.2014, 12:34. Просмотров 2124. Ответов 8
Метки нет (Все метки)

ребят как сделать в данном классе кнопки вперед и назад?

Кликните здесь для просмотра всего текста
PHP
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
<?php
    /*
    * Класс для генерации постраничной навигации
    */
    class Pagination
    {
        /**
        * 
        * @var Ссылок навигации на страницу
        * 
        */
        private $max = 10;
        
        /**
        * 
        * @var Текущая страница
        * 
        */
        private $current_page;
        
        /**
        * 
        * @var Общее количество записей
        * 
        */
        private $total; 
        
        /**
        * 
        * @var Записей на страницу
        * 
        */
        private $limit;
        
        /**
        * Запуск необходимых данных для навигации
        * @param integer $total - общее количество записей
        * @param integer $limit - количество записей на страницу
        * 
        * @return
        */
        public function __construct( $total, $limit )
        {
            # Устанавливаем общее количество записей
            $this->total = $total;
            
            # Устанавливаем количество записей на страницу
            $this->limit = $limit;
            
            # Вызываем метод установки текущей страницы
            $this->setCurrentPage();
        }
        
        /**
        *  Для вывода ссылок
        * 
        * @return HTML-код со ссылками навигации
        */
        public function get()
        {
            # Получаем параметры текущего запроса
            $query = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_QUERY );
            
            # Разбираем строку запроса
            parse_str( $query, $params );
            
            # Для ссылок
            $links = null;
            
            # Получаем ограничения для цикла
            $limits = $this->limits();
            
            # Генерируем ссылки
            for($page=$limits[0]; $page<=$limits[1]; $page++)
            {
                # Если текущая это текущая страница
                if($page == $this->current_page)
                    # Обводим жирным
                    $links .= '<strong>'. $page .'</strong>';
                else{
                    # Заменяем в массиве GET данных page
                    $params['page'] = $page;
                    
                    # Формируем запрос
                    $query = http_build_query( $params );
                    
                    # Заносим ссылку
                    $links .= '<a href="?'. $query .'" title="'.$page.' страница">'. $page .'</a>';
                }
            }
            
            # Возвращаем ссылки
            return $links;
        }
        
        # Для получения, откуда стартовать
        private function limits()
        {
            # Получаем количество всех страниц
            $amount = $this->amount();
            
            # Вычисляем ссылки слева (чтобы активная ссылка была посередине)
            $left = $this->current_page - round($this->max / 2);
 
            # Вычисляем начало отсчёта
            $start = $left > 0 ? $left : 1;                
            
            # Если впереди есть как минимум $this->max страниц
            if($start + $this->max <= $amount)
                # Назначаем конец цикла вперёд на $this->max страниц или просто на минимум
                $end = $start > 1 ? $start + $this->max : $this->max;
            else
            {
                # Конец - общее количество страниц
                $end = $amount;
              
                # Начало - минус $this->max от конца
                $start = $amount - $this->max > 0 ? $amount - $this->max : 1;
              
            }
            
            # Возвращаем
            return array($start, $end);
        }
 
        # Для установки текущей страницы
        private function setCurrentPage()
        {
            # Получаем номер страницы
            $this->current_page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
            
            # Получаем общее количество страниц
            $amount = $this->amount();
            
            # Если текущая страница боле нуля
            if($this->current_page > 0)
            {
                # Если текунщая страница меньше общего количества страниц
                if($this->current_page > $amount)
                    # Устанавливаем страницу на последнюю
                    $this->current_page = $amount;
            }
            else
                # Устанавливаем страницу на первую
                $this->current_page = 1;
        }
        
        # Для получеия общего числа страниц
        private function amount()
        {
            # Делим и возвращаем
            return
                round( $this->total / $this->limit );
        }
    }
    
    /**
    * Начинаем работу с постраничной навигацией
    * Первый аргумент - общее количество
    * Второй - количество записей на страницу
    */
    $pagination = new Pagination(100, 5);
    
    # Выводим навигацию
    echo $pagination->get();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2014, 12:34
Ответы с готовыми решениями:

Пагинатор, почти доделал простейший пагинатор
Вот, собсна код &lt;?php function paginate ($page, $pageCount, $offset) { if (($page&lt;1) ||...

<назад | вперед>
я решил делать интернет магазин сам, на готовом html шаблоне и своих php скриптах, в магазин...

Unix Time | Вчера, 2 дня назад, 4 недели назад, 2 месяца назад
Здравствуйте, я профессиональный нуб в PHP. Прошу помочь с решением вывода даты в PHP. У меня...

Выполнение серверного кода после нажатия кнопки «Назад» в браузере
Добрый день. Проблема в целом далеко не новая, но элегантного решения для своего случая пока не...

8
20 / 19 / 9
Регистрация: 24.05.2011
Сообщений: 89
25.11.2014, 12:53 2
В HTML нарисуй 2 кнопки, назад -1 от текущей страницы, а вперёд +1 от текущей страницы.
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
25.11.2014, 13:17  [ТС] 3
SvSerg спасибо я понял как сделать)
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
25.11.2014, 14:52  [ТС] 4
сделал так

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ($page != 1) $prevpage = '<a href=index.php?page=1>Первая</a> | <a href=index.php?page='. ($page - 1) .'>Предыдущая</a> | '; else $prevpage = '';
    if ($page != $total) $nextpage = ' | <a href=index.php?page='. ($page + 1) .'>Следующая</a> | <a href=index.php?page=' .$total. '>Последняя</a>'; else $nextpage = '';
    for ($i = 5; $i > 0; --$i){   
        $left = 'page'.$i.'left';
        $right = 'page'.$i.'right';
        if ($page - $i > 0) $$left =  '<a href=index.php?page='. ($page - $i) .'>'. ($page - $i) .'</a> | '; else $$left = '';
        if ($page + $i <= $total)  $$right = ' | <a href=index.php?page='. ($page + $i) .'>'. ($page + $i) .'</a>'; else $$right = '';
    }   
                    
                    
                    # Заносим ссылку
$links .=$prevpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<a href="?'. $query .'" title="'.$page.' страница">|'. $page .'|</a>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
 
    }
почему выводит ссылки не правильно?

Пагинатор кнопки вперед назад
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
25.11.2014, 14:57  [ТС] 5
как сделать чтоб было так?

|следующая| |1| |2| |3| |последняя|
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
25.11.2014, 14:59  [ТС] 6
ого заметил ещё проблему((( если много записей то такая фигня получается... как исправить?

Пагинатор кнопки вперед назад
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
25.11.2014, 16:25  [ТС] 7
специалисты помогите пожлауйта
0
Эксперт PHP
4196 / 3124 / 1012
Регистрация: 06.01.2011
Сообщений: 9,093
25.11.2014, 17:07 8
wolf, так я же помог: При переходе по постраничной навигации выводится пустая страница
1
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
25.11.2014, 17:45  [ТС] 9
lyod, ссори не заметил) щас проверю заранее спасибо)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2014, 17:45

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

При нажатии кнопки назад, в панели браузера, предыдущая страница не загружается
При нажатии кнопки назад в панели браузера предыдущая страница не загружается. Пишет : ...

кнопки назад вперед
Я сделал БД в SQL вывел таблицу в datagriev. Помогите написать код на кнопки в &quot;начало&quot;, &quot;конец&quot;, и...

Отключены кнопки вперед - назад
Здравствуйте пользователи компов, помогите разобраться в дебрях &quot;Win 7 starter&quot;? дело в том что не...

FoxPro - кнопки вперед, назад
не могу не как вспомнить в FoxPro при создание базы данных, в форме кнопки вперед, назад я вот ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.