Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: постраничная навигация
 
 автор: sl1p   (09.10.2010 в 21:30)   письмо автору
 
 

Изобретаю велосипед, но как по мне изобретение велосипеда хорошо обучает :)
Всё хорошо, но не могу придумать как осуществить следующее:

Имеем переменные:

$showPages = 4; // кол-во страниц которые будут отображены в навигации
// т.е. в данном случае [1 2 3 4]
// если мы уже на какойто странице выше первой тогда нужно вывести и слева и справа от текущей страницы [3 4 5 6]
// т.е. ВСЕГО должно быть отображено 4 номера страниц.

$page; // текущая страница
$maxpage; // последняя страница


перелопатил всё в голове но никак не могу придумать :)

<?
for($i max($page-$showPages1); $i <= min($page+$showPages-1$maxpage); $i++)
echo 
$i'<br>';

  Ответить  
 
 автор: Trianon   (09.10.2010 в 22:09)   письмо автору
 
   для: sl1p   (09.10.2010 в 21:30)
 

<?
$a 
max($page - (int)(($showPages-1)/2), 1);
$b min($page + (int)($showPages/2), $maxpage);
for(
$i $a $i <= $b$i++) ...

  Ответить  
 
 автор: sl1p   (09.10.2010 в 22:25)   письмо автору
 
   для: Trianon   (09.10.2010 в 22:09)
 

находясь на первой выводит 3 страницы
на последней 2 =(

  Ответить  
 
 автор: Trianon   (09.10.2010 в 22:33)   письмо автору
 
   для: sl1p   (09.10.2010 в 22:25)
 

Я идею дал.
допиливайте.
мне чтоли за Вас изобретать?

  Ответить  
 
 автор: sl1p   (09.10.2010 в 22:36)   письмо автору
 
   для: Trianon   (09.10.2010 в 22:33)
 

Ваш пример я уже пробовал с делением на 2 :)
какраз допиливалку и прошу помочь доделать :))

  Ответить  
 
 автор: Trianon   (09.10.2010 в 22:51)   письмо автору
 
   для: sl1p   (09.10.2010 в 22:36)
 

что-то я не очень понял, что вас не устраивает.
3 страницы потому что слева нет ни одной.
Формулируйте условие более определенно.

  Ответить  
 
 автор: sl1p   (09.10.2010 в 22:58)   письмо автору
 
   для: Trianon   (09.10.2010 в 22:51)
 

хорошо, скажем всего 6 страниц.


если мы находимся на первой должен быть вывод такой:

1 2 3 4
выводит же только
1 2 3

ну и на последней
3 4 5 6
=>>>
5 6

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

  Ответить  
 
 автор: Trianon   (10.10.2010 в 01:22)   письмо автору
 
   для: sl1p   (09.10.2010 в 22:58)
 

и как расположены эти $showPages номеров относительно страницы с номером $page ?
Уж договаривайте тогда до конца.

  Ответить  
 
 автор: Красная_шляпа   (09.10.2010 в 23:17)   письмо автору
 
   для: sl1p   (09.10.2010 в 21:30)
 


<?php
$threads 
= (int) $info[2];

    
$start = @(int) $_GET["start"];
    
$start = ($start >= and $start $threads) ? $start 0;

    
// ...
   
    
$pages ceil($threads $threads_per_page);

        
// если у нас список тем больше чем на одну страницу печатаем ссылки
        // для постраничной навигации и выводим форму для быстрого перехода
        
if ($pages 1) {
            
$array = array();
            
$page ceil(($start 1) / $threads_per_page);
            
$links ceil($pages $links_per_page);
            
$link ceil($page $links_per_page);
            
$page_start $link $links_per_page $links_per_page;
            
$page_end $page_start $links_per_page;
            
$page_end = ($page_end $pages 1) ? $page_end $pages;
            
$first $page_start $threads_per_page;
            
$last $pages $threads_per_page $threads_per_page;

            if (
$link 1) {
                
$start $first $threads_per_page $links_per_page;
                
$array[] = "<a href='{$_SERVER["PHP_SELF"]}?inc=$inc&amp;id=$forum_id&amp;start=0&amp;show=$show'>&laquo;&laquo;&laquo;первая страница</a>";
                
$array[] = "<a href='{$_SERVER["PHP_SELF"]}?inc=$inc&amp;id=$forum_id&amp;start=$start&amp;show=$show'>&laquo;пред. </a>";
            }
            for (
$i $page_start$i $page_end; ++$i) {
                
$start $i $threads_per_page;
                if (
$page == $i 1) {
                    
$array[] = "<b>$page</b>";
                }
                else {
                    
$array[] = "<a href='{$_SERVER["PHP_SELF"]}?inc=$inc&amp;id=$forum_id&amp;start=$start&amp;show=$show'>".($i 1)."</a>";
                }
            }
            if (
$link $links) {
                
$start $page_end $threads_per_page;
                
$array[] = "<a href='{$_SERVER["PHP_SELF"]}?inc=$inc&amp;id=$forum_id&amp;start=$start&amp;show=$show'>след.&raquo;</a>";
                
$array[] = "<a href='{$_SERVER["PHP_SELF"]}?inc=$inc&amp;id=$forum_id&amp;start=$last&amp;show=$show'>последняя страница&raquo;&raquo;&raquo;</a>";
            }
            echo 
"<br><br><div style='text-align: center;'>\n";
            echo 
implode(" , "$array)."\n";
            echo 
"<form action='{$_SERVER["PHP_SELF"]}' method='get'>\n";
            echo 
"<p>\n";
            echo 
"<input type='hidden' name='inc' value='$inc'>\n";
            echo 
"<input type='hidden' name='id' value='$forum_id'>\n";

            echo 
"Страница: <select name='start'>\n";
            for (
$i 1$i <= $pages; ++$i) {
                
$start = ($i 1) * $threads_per_page;
                echo 
"<option value='$start'";
                if (
$page == $i) {
                    echo 
"selected";
                }
                echo 
"> $i </option>\n";
            }

            echo 
"</select>\n";

            echo 
"<input type='hidden' name='show' value='$show'>\n";
            echo 
"<input type='submit' value='Перейти'>\n";
            echo 
"</p>\n";
            echo 
"</form>\n";
            echo 
"</div>\n";

        }
    }
    else {
        echo 
"<tr><td align='center'><br><br>Форум пуст.<br><br><br><br></td></tr>\n";
    }
    echo 
"</table>\n";

    require 
"templates/footer.php";

  Ответить  
 
 автор: sl1p   (10.10.2010 в 00:04)   письмо автору
 
   для: Красная_шляпа   (09.10.2010 в 23:17)
 

и? там реализовано то что мне надо?

  Ответить  
 
 автор: heed   (10.10.2010 в 00:28)   письмо автору
 
   для: sl1p   (10.10.2010 в 00:04)
 

странный способ изобретать велосипед.
это как сначала решить что колёса обязательно должны быть квадратные. Нормальный велосипед у Вас уже не получится :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования