Проблема с постраничным выводом

  • Автор темы Vetalich
  • Дата начала

Vetalich

Guest
Проблема с постраничным выводом

Всем доброго времени суток...

Тут такая проблема.
Нашёл я где-то в инете вот такой код постраничного вывода:

PHP:
<?php
 $elements = array("1<BR>", "2<BR>", "3<BR>", "4<BR>", "5<BR>", "6<BR>", "7<BR>", "8<BR>", "9<BR>", "10<BR>", "11<BR>", "12<BR>", "13<BR>", "14<BR>", "15<BR>", "16<BR>", "17<BR>", "18<BR>", "19<BR>", "20<BR>", "21<BR>", "22<BR>", "23<BR>", "24<BR>", "25<BR>", "26<BR>", "27<BR>", "28<BR>", "29<BR>", "30<BR>"); 

 function pages($num_all, $limit, $num_p)
 {
    if (isset ($_REQUEST["page"]))
    {
    $page=$_REQUEST["page"];
    settype($page,"integer");
    }
    else
    {
    $page=1;
    }
    $n=$num_all/$limit;
        if (!is_integer($n))
        {
        settype($n,"integer");
        $n++;
        }
            if ($n>1)
            {
            print "<center>";
            $start_p=$page-$num_p;
            $end_p=$page+$num_p;
                if ($end_p>$n)
                {
                $end_p=$n;
                }
            $start_p=$end_p-$num_p*2;
                    if ($start_p<1)
                    {
                    $start_p=1;
                    }
            $end_p=$start_p+$num_p*2;
                        if ($start_p>1)
                        {
                        $t=$start_p-1;
                        echo "<a href=\"$PHP_SELF?page=1\">&#171;&#171;</a> <a href=\"$PHP_SELF?page=".$t."\">&#171;</a> ";
                        }
    for ($i=$start_p;$i<$end_p+1 && $i<$n+1;$i++)
    {
        if ($page!=$i)
        {
        print "<a href=\"$PHP_SELF?page=".$i."\">".$i."</a> ";
        }
        else
        {
        print "<a href=\"$PHP_SELF?page=".$i."\" style=\"color:#000000\"><b>".$i."</b></a> ";
        }
    }
                if ($end_p<$n)
                {
                print "<a href=\"$PHP_SELF?page=".$i."\">&#187;</a> <a href=\"$PHP_SELF?page=".$n."\">&#187;&#187;</a>";
                }
                print "</center>";
            }
    print "Всего страниц: ".$n."<hr>";
                    if ($num_all>$limit)
                    {
                    $nop2=($page-1)*$limit;
                        if ($nop2>$num_all or $page<1)
                        {
                        print "Страница не существует";
                        }
                    }


 }




//////Собственно вывод инфы.
    $limit=5; //По сколько выводить
    $co="30"; //Сколько всего
    $fff="2"; //сколько ссылок со сторон... т.е если 2, то: < << 4,5 ,6, 7,8 > >>

    $from = (isset($_REQUEST['page'])) ? (int)$_REQUEST['page'] : 0; 
    for ($i = $from; $i<$from+$limit; $i++)
    {
    echo $elements[$i]; 
    }
    pages($co, $limit, $fff);
?>
вроде считает правильно, выводит правильно, но вот выводит не всё, а только 11 записей... и то не как надо, а на каждой новой странице по одной новой записи...

не подскажите в чём тут ошибка?
 

amorfis

я стараюсь
Vetalich
В таком кол-ве кода даже не хочется разбирать. непробывал локализовать ошибку?
 

virakochi

Устал
ААА... Где вы такую траву берете..
PHP:
$n=$num_all/$limit;
        if (!is_integer($n))
        {
        settype($n,"integer");
        $n++;
        }
ужас..
Попробуй лучше сам написать, и тебе быстрее помогут решить проблемы возникнувшие при написании. А такой код никто и смотреть не захочет. Ибо страшно. Посмотри, в статьях есть нужная тебе.
 

Vetalich

Guest
virakochi
а где там?
посмотрел... не нашёл...
а самому сложно...
 

Фанат

oncle terrible
Команда форума
ниего сложного в постраничном выводе нет.
Надо только делать не всё сразу, а постеенно.
сначала научиться выводить произвольную часть массива.
затем - формировать ссылки на страницы.
потом их украшать

Ты всё можешь сделать сам, и набраться заодно опыта.

вот скажи, ты можешь вывести весь массив? а часть массива?
 

Vetalich

Guest
весь массив могу... часть например 10 могу... а вот как вывести следующую десятку вот это уже не смогу...
 

Фанат

oncle terrible
Команда форума
покажи код, которым можешь вывести первые 10 элементов
 

Vetalich

Guest
вот:

$el=array("1<br>", "2<br>", "3<br>", "4<br>", "5<br>", "6<br>", "7<br>", "8<br>", "9<br>", "10<br>", "11<br>", "12<br>", "13<br>", "14<br>", "15<br>", "16<br>", "17<br>", "18<br>", "19<br>", "20<br>");

for ($i=0; $i<10; $i++)
{
echo $el[$i];
}
 

Фанат

oncle terrible
Команда форума
прекрасно.
что ты видишь в этом коде?
$i=0
очевидно, это индекс начаьлного элемента, с которого выводить. Вместо нуля мы можем поставить переменную, и выводить с какой угодно позиции. верно?

дальше идёт условие выхода из цикла
$i<10
если ты хочешь выводить по 10 элементов, то эта цифра просто получается прибавлением 10 к начальной.

вот перепиши этот код, чтобы можно было выводить с любой позиции
 

Фанат

oncle terrible
Команда форума
супер!
то что надо!
теперь, если написать
$g=$_GET['num'];
и обратиться к скрипту , как script.php?num=10
то выведет записи с какой по какую?
 

Vetalich

Guest
с 11 по 20...
понятно...
а ссылки как сделать?
 

Фанат

oncle terrible
Команда форума
для начала ты должен увидеть эти ссылки, прежде, чем рисовать их скриптом.
это вообще всегда надо делать - представлять себе, что ты хочешь, чтобы твой скрипт выводил, верно?
нарисуй здесь все ссылки, которые понадобятся, если в массиве 35 элементов
 

Фанат

oncle terrible
Команда форума
это то, что будет написано на ссылках.
а сами ссылки как будут выглядеть?
напиши прямо html код этих ссылок - он тебе всё равно пригодится
 

Vetalich

Guest
<a href='?page=10'>1</a>
<a href='?page=20'>2</a>
<a href='?page=30'>3</a>
 

Фанат

oncle terrible
Команда форума
супер!
ну вот, видишь закономерность?
можешь цикл написать, который выводит такие ссылки?
 
Сверху