piątek, 11 listopada 2011

Prosty system stronnicowania w PHP

Przedstawiam bardzo prosty system stronnicowania w PHP, mojego autorstwa.System zapewnia podstawowe funkcjonalności, przy minimum kodu.Jest otwarty do dalszych przeróbek.
Dlaczego napisałem od podstaw taki system, przecież w sieci są setki gotowych skryptów stronnicowania?
A dlatego, że lubię wiedzieć w 100 % jak coś jest zbudowane i mieć nad tym pełną kontrolę.A że napisanie tych kilkunastu linii kodu nie jest zbyt czasochłonne, postanowiłem się za to zabrać.

Założenie
Mamy istniejącą stronę w php, np. index.php wyświetlającą wszystkie rekordy z bazy.Chcemy ograniczyć jedynie wyświetlanie do 10 rekordów na stronie.

Kod php
Do naszej strony dodajemy zmienną $start która będzie pobierała z adresu url liczbę, od której ma nastąpić wyświetlanie rekordów z bazy, czyli adres url będzie wyglądać np. tak index.php?start=20
Oznacza to, że chcemy wyświetlić z bazy danych rekordy począwszy od dwudziestego.Zapis następujący
index.php?start=
lub też index.php oznacza, że listujemy rekordy począwszy od pierwszego.


$start=(int)htmlspecialchars($_GET['start']);//odczyt bieżącego offsetu z adresu url

Drugim krokiem jest modyfikacja istniejącego zapytania sql.Załóżmy, że wcześniej było w skrypcie zapytanie, które pokazywało wszystkie komentarze wpisane przez odwiedzających.Teraz chcielibyśmy za każdym razem wyciągnąć tylko 10 komentarzy, a więc należy zapytanie odpowiednio zmodyfikować.

$sql2="SELECT * FROM komentarze WHERE 1 ORDER BY id DESC LIMIT $start, 10";

Właśnie Limit x, y odpowiada za to, żeby począwszy od rekordu x wylistować y rekordów.

Potem dopisujemy taki kod do skryptu, odpowiedzialny za wyświetlenie stronnicowania.
$sql7="SELECT * FROM komentarze WHERE 1 "; //wszystkie komentarze
$wynik7=$DB->getArray($sql7);//klasa do obsługi danych $DB
$ile=count($wynik7);// policzenie wszystkich komentarzy (rekordów) w bazie,można to zrobić także za pomocą mysql_num_rows
$ilestron=ceil($ile/10); //przeliczenie, ile to wyjdzie pełnych stron, zakładając 10 komentarzy na jednej
$akt=(int)$start/10;// aktualna strona z komentarzami


echo "<div id=\"paginacja\"><font color=\"aqua\">Strony: </font>";
$raz1=false;
$i=0;
while($i<$ilestron)
        {
        $s=$i*10;
        $strona=$i+1;
        if($s==$start)
        echo "<a href=\"index.php?start=$s\"><b>$strona</b></a> | ";
        else
        echo "<a href=\"index.php?start=$s\">$strona</a> | ";
       
       
        $i++;
        }
    echo "</div>";

a idea działania skryptu jest taka, że wyświetla z komentarzami on strony od pierwszej do ostatniej, pogrubiając aktualną stronę.Prawda że proste?

Można go oczywiście dowolnie zmodyfikować, wprowadzając np. wyświetlanie tylko 3 stron w przód od aktualnej i 3 stron w tył oraz pierwszą i ostatnią.Pozostawiam to Waszej intencji.

Do pliku CSS można dodać jedną regułkę sprawiającą, że stronnicowanie zawsze znajdzie się w ustalonym miejscu strony.

#paginacja {
position:absolute;
bottom:5px;
left:113px;
}


Efekt działania skryptu stronnicowania na poniższym obrazku.

0 komentarzy:

Prześlij komentarz