Порционный вывод страниц.

Yuriy_S

-=PHP-Club=-
Порционный вывод страниц.

Привет всем, привет Ромик! :)
Прошу помочь мне с алгоритмом (код писать не нада, я сам, главное понять).
Я вывожу записи с БД и дроблю их на страницы. Выводится список страниц (1,2,3,4,5....) со ссылками. Вот мне бы хотелось сделать что бы выводилось только по 5 к примеру номеров страниц с ссылками + кнопка далее и назад.
Я пробовал делать, выводилось по 5 записей, но не работали ссылки далее и назад. Подскажите пож-сто, как такое лучше сделать....
 

RomikChef

Guest
Юра.
Ну это та же самая арифметика
что ты не знаешь?
Как сделать кнопки вперед и назад?
Не можешь прибавить к номеру текущей страницы 1 и отнять один, проверить, не выходят ли полученные цифры за диапазон страниц и вывести кнопки?

5 номеров страниц? Какая проблема? прибавить к текущей две и отнять две. между этими цифрами и выводить.Опять же - только проверки сделать.
 

NetMan

Guest
я делил общее число записей в таблице на число записей на страницу, потом приводил к наименьшему целому числу - получается общее число страниц, затем делал массив всех страниц с сылками. может решенье и надуманное, зато работает. а по пять страниц: определяешь текушую и как сказал RomikChef делаешь +2 и -2
 

RomikChef

Guest
NetMan, команду ceil Юра уже знает :)
А вот зачем загонять номера страниц в массив - это для меня большая загадка.
 

jeka!

Просто Member
Ну вот, а говорили что только один я такой, у кого туго с математикой :)
Хочешь дам пример который работает нетрадиционно, но работает правильно?
 

NetMan

Guest
>Видимо, это просто лень.

не лень, я считал последнюю запятую и делал строку максимум из 7 страниц ( 1,2...5,6,7...11,12 )
 

Yuriy_S

-=PHP-Club=-
нет не лень! Примеры мне не ныжны, спасибо. Сегодня сделаю! Как сделаю, скажу.
 

Yuriy_S

-=PHP-Club=-
ну вот, я и вернулся с кодом, который написал только что (наконецц то руки дошли :)
В общем у меня все замечательно работает вот так:
PHP:
$pages=19;   // количество страниц
$n=5;       // часть (кол-во) страниц, которые нада вывести с кнопкамии вперед и назад
if($pages<=$n && ! isset($pre) ){ //если кол-во страниц меньше или равно тому кол-ву, которое нужно вывести (строкой выше)
$min=1;
$max=$pages;
}
else {   //наоборот, если кол-во страниц больше $n и сущ. переменная $pre, которая передается по ссылке далее
$min=$pre;
$max=$pre+4;
}
if($pages>$n && !isset($pre) || $pre=="") {  //а тут, если мы зоходим на страницу в первый раз, то выводится соответствующее кол-во записей, так как переменная $pre ещё не передана.
$min=1;
$max=$n;
}
if(isset($pre) && $pre>1 ){
$prr=$pre-5;
echo "<a href=q2.php?page=$page&pre=$prr><<<</a>&nbsp;";
}
if($pre>=$pages-4){
$min=$pre;
$max=$pages;
}
for($i=$min;$i<=$max;$i++){
echo "&nbsp;<a href=q2.php?page=$i&pre=$pre>$i</a>&nbsp;";
}
if($pre<$pages-4){
echo "<a href=q2.php?page=$page&pre=$i>&nbsp; >>> &nbsp;</a>";
}
 

Yuriy_S

-=PHP-Club=-
p.s Ромик, только не говори плиз, опять..., что я тупой, и получился слишком длинный код... Все работает.
 

RomikChef

Guest
Ну, что ты тупой - это я и без кода знаю :)
Что длинный - это тоже предсказать можно было.
Если работает - хорошо. я рад за тебя.
А что делает переменная $pre и зачем передавать что-то, кроме номера страницы?
 

RomikChef

Guest
ты задаешь в начале $n=5; , а потом все равно пользуешься константой 4, а не вычисляемой из $n еременной.
 

Yuriy_S

-=PHP-Club=-
:)
А переменная $pre - это для "кнопки" вперед назад, я не стал делать как бы через номера страниц потому, что в моем коде можно просто листать по "частям страниц" - то есть по 5 штук.
И когда их листаешь, то запрос mysql не будет выводить данные по конкретно нажатой ссылке на страницу, то есть у пользователя есть выбор :)
 

Yuriy_S

-=PHP-Club=-
$n - служит для определения вывода записей. То есть выводить ли нам кнопки "вперед, назад", передавать ли переменные определенные. А $pre уже "делает"....
 

Yuriy_S

-=PHP-Club=-
p.s кстати, можешь прямо этот скрипт на локалке затестить, он так работает нормально.
 
Сверху