#151 2013.01.19 12:26

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

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

"Не прошло и года" (с) совсем чуть-чуть осталось)

Неактивен

#152 2013.01.19 12:29

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

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

Письмо из центpа до Штиpлица не дошло...
Он пpочитал его еще pаз. Опять не дошло...
Пpишлось читать в тpетий pаз. smile
Добавлено спустя   5 минут  19 секунд:
Akdmeh за весь год не нашел времени посмотреть мою говновигацию. sad
Добавлено спустя   5 минут  45 секунд:
А так с первого поста уже почти 2 года.

Неактивен

#153 2013.01.22 14:20

Merzavetz
Участник
Зарегистрирован: 2012.06.23
Сообщений: 10
Карма: 1
Профиль

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
<?php
if ($all 1) {
    echo '<div class="iblock">Страницы: ';
    $asd $page 2;
    $asd2 $page 3;
    if ($asd $all && $asd && $page 3) {
        echo '<a href="index.php?id=' $id '&amp;page=1">1</a> ... ';
    }
    for ($i $asd$i $asd2$i++) {
        if ($i $all && $i 0) {
            if ($i $pages) {
                break;
            }
            if ($page == $i) {
                echo '<strong>[' $i ']</strong> ';
            } else {
                echo '<a href="index.php?id=' $id '&amp;page=' $i '">' $i '</a> ';
            }
        }
    }
    if ($i <= $pages) {
        if ($asd2 $all) {
            echo ' ... <a href="index.php?id=' $id '&amp;page=' $pages '">' $pages '</a>';
        }
    }

Это код постраничной навигации sea downloads 2. Подскажите пожалуйста ,как сделать чтобы отображались только первая, последняя, текущая, следующая и предыдущая страницы. Надо исключить ссылки на две страницы, которая перед предыдущей и которая за следующей. Голову сломал, не знаю как сделать.
Пример подобной постраничной навигации в в движке этого форума http://wapinet.ru/forum/wap/viewtopic.php?id=1281&p=12 . Нужно исключить десятую и четырнадцатую страницу.

Отредактировано Merzavetz (2013.01.22 14:27)

Неактивен

#154 2013.01.22 19:32

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

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

Merzavetz можешь просто выпилить ее и заменить на другую. такой код, действительно, трудно править)

Неактивен

#155 2013.02.01 23:10

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

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

Gemorroj написал:

"Не прошло и года" (с) совсем чуть-чуть осталось)

Как всегда, ты прав.
Поправил функцию: paginationRange();
Пост #150
Добавлено спустя   2 минуты  18 секунд:
А вообще я сам честно говоря бы делал все очень просто, через форму.


[туда] - [сюда]
|стр. #| [ok]

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

Неактивен

#156 2013.02.06 14:11

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

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

Переделал private _isNatural() на protected static _isNatural().

Неактивен

#157 2013.02.10 16:04

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

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

Еще одна, на мой взгляд, уместная поправка. Сравнить можно этот и пост #150.

Код:

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
<?php
/**
 * Автор: TiPsun (tipsun91@gmail.com)
 * (c) 2013
 * Блогодарность за помощь
 * в написании кода:
 ++ Gemorroj (http://wapinet.ru/)
 ++ Akdmeh (Akdmeh@gmail.com)
**/
 
namespace Core\Library;
class Pagination {
 
    protected
        // Дано
        $_pageCursor 1,
        $_itemsCount 0,
        $_itemsRange 10,
        // Результат
        $_pagesCount 1,
        $_pageNumber 1,
        $_startPoint 0;
 
    public function __construct() {
    }
 
    /**
     * Проверка числа на принадлежность к множеству натуральных.
     * @param integer $number
     * @return bool
     */
    protected static function _isNatural($number) {
        return (is_numeric($number) and $number);
    }
 
    /**
     * Регистрация общего кол-ва записей.
     * @param integer $arg
     * @return PageMan
     */
    public function setCount($arg) {
        if (self::_isNatural($arg)) {
            $this->_itemsCount = (int) $arg;
            $this->_pagesCount null;
        }
        return $this;
    }
 
    /**
     * Регистрация текущей страницы.
     * @param integer $arg
     * @return pageMan
     */
    public function setCursor($arg) {
        if (self::_isNatural($arg)) {
            $this->_pageCursor = (int) $arg;
            $this->_pageNumber null;
        }
        return $this;
    }
 
    /**
     * Регистрация кол-ва записей на страницу.
     * @param integer $arg
     * @return pageMan
     */
    public function setItems($arg) {
        if (self::_isNatural($arg)) {
            $this->_itemsRange = (int) $arg;
            $this->_pagesCount null;
            $this->_startPoint null;
        }
        elseif ($this->_itemsCount) {
            $this->_itemsRange $this->_itemsCount;
            $this->_pagesCount null;
            $this->_startPoint null;
        }
        return $this;
    }
 
    /**
     * Расчет общего кол-ва страниц.
     * @return integer
     */
    public function getPages() {
        if (null === $this->_pagesCount) {
            if ($this->_itemsCount) {
                $this->_pagesCount = (int) ceil($this->_itemsCount $this->_itemsRange);
            }
        }
        return $this->_pagesCount;
    }
 
    /**
     * Получение номера корректной текущей страницы.
     * @return integer
     */
    public function getPage() {
        if (null === $this->_pageNumber) {
            $this->_pageNumber min($this->_pageCursor$this->getPages());
        }
        return $this->_pageNumber;
    }
 
    /**
     * Расчет начальной точки отсчета показа записей в вашем цикле.
     * @return integer
     */
    private function _calculateStartPoint() {
        if (null === $this->_startPoint) {
            $this->_startPoint = ($this->getPage() - 1) * $this->_itemsRange;
        }
        return $this->_startPoint;
    }
 
    /**
     * Расчет конечной точки отсчета показа записей в цикле для массива данных.
     * @return array
     */
    public function getArrayPoints() {
        return array(
            $this->_calculateStartPoint(),
            min(($this->_startPoint $this->_itemsRange), $this->_itemsCount)
        );
    }
 
    /**
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
     * @return array
     */
    public function getTablePoints() {
        return array(
            $this->_calculateStartPoint(),
            $this->_itemsRange
        );
    }
 
    /**
     * Расчет конечной точки отсчета показа записей в цикле для данных
     * в таблице (DB).
     * @return string
     */
    public function getTableLimit() {
        return 'LIMIT '
            $this->_calculateStartPoint()
            . ', '
            $this->_itemsRange;
    }
}

Неактивен

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.016 s