( peewee )
W zwi▒zku z czΩsto pojawiaj▒cymi siΩ na forum pytaniami o porcjowanie wynik≤w
zapytania postanowi│em napisaµ kr≤tki tek╢cik, kt≤ry powinien wszystko wyja╢niµ
i rozwiaµ wszelkie w▒tpliwo╢ci.
Mamy tabelkΩ, powiedzmy w│asn▒ kolekcje mp3. Teraz chcemy na naszej stronie
domowej udostΩpniµ j▒ odwiedzaj▒cym. Jest tylko jeden problem. Mamy kilkaset
utwor≤w i tak wielka strona strasznie d│ugo siΩ │aduje. Postanawiamy wiΩc
podzieliµ kolekcje na podstrony. Cofnijmy siΩ jednak trochΩ i zr≤bmy to
normalnie, czyli wszystko na jednej stronie. Zrobiliby╢my to mniej wiΩcej tak:
<?
$result=mysql_db_query("naszabaza","SELECT tytul, autor, plyta, rok FROM
empecze");
while ($row=mysql_fetch_array($result)) {
echo $row[tytul].$row[autor].$row[plyta].$row[rok];
}
?>
Dodaj▒c oczywi╢cie jakie╢ formatowanie tekstu, mo┐e jakie╢ │adne tabelki itp.
Spr≤bujmy teraz zrobiµ to samo, ale bΩdziemy wy╢wietlaµ tylko czΩ╢µ wynik≤w.
Zmodyfikujemy tylko zapytanie:
SELECT tytul, autor, plyta, rok FROM empecze LIMIT 0,10;
Co oznacza ten magiczny LIMIT? LIMIT 0,10 powoduje, ┐e zapytanie zwr≤ci tylko
dziesiΩµ kolejnych wierszy zaczynaj▒c od zerowego (czyli pierwszego).
Czy komu╢ ju┐ co╢ ╢wita? :) Taaaaaaak ┐eby porcjowaµ te wyniki, wystarczy
odpowiednio modyfikowaµ warto╢ci parametr≤w LIMIT'a :)
Genialne w swej prostocie.
Przejd╝my do konkret≤w. Czego potrzebujemy? Napewno jakiej╢ zmiennej, kt≤ra
okre╢la│aby kt≤r▒ porcjΩ (stronΩ) ogl▒damy. Nazwijmy j▒ $page. Okre╢lmy sobie
te┐ zmienn▒ z ilo╢ci▒ wynik≤w na jednej podstronie. J▒ nazwiemy $ile (wiem, ┐e
g│upio).
Musimy teraz obliczyµ na kt≤rym wierszu zaczyna siΩ np strona pi▒ta, aby╢my
mogli przekazaµ do LIMIT'a od kt≤rego wiersza ma zacz▒µ. No to jest dosyµ
proste, mno┐ymy numer strony przez ilo╢µ wynik≤w, kt≤re maj▒ byµ wy╢wietlane na
jednej podstronie i jush :)
Nasze zapytanie wygl▒da wiΩc teraz tak:
SELECT tytul, autor, plyta, rok FROM empecze LIMIT ($page*$ile),$ile;
a w php zrobiliby╢my to tak:
$result=mysql_db_query("naszabaza","SELECT tytul, autor, plyta, rok FROM empecze
LIMIT ".($page*$ile).",$ile");
No ju┐ prawie jeste╢my u celu :) Teraz pozosta│o nam tylko dorobiµ nawigacjΩ po
naszym archiwum muzycznym.
Zrobimy przyciski nastΩpny/poprzedni i listΩ podstron a'la wyszukiwarki :)
Na dobry pocz▒tek musimy wiedzieµ ile w og≤le bΩdzie podstron. W tym celu
sprawdzamy ile mamy utwor≤w w naszej bazie:
list($wszystkich)=mysql_fetch_row(mysql_db_query("naszabaza","SELECT count(*)
FROM empecze"));
Oczywi╢cie w ten spos≤b nie powinno siΩ programowaµ :)
Teraz wyliczamy ile bΩdzie podstron, dzielimy ilo╢µ utwor≤w przez rozmiar porcji
i zaokr▒glamy w g≤re:
$podstron=ceil($wszystkich/$ile);
Nooo ╢licznie :)
Przycisk "poprzednia strona":
if ($page>0) echo "<a href=skrypt.php?page=".($page-1).">Poprzednia</a>"; else
echo "Poprzednia";
Czyli w skr≤cie... je╢li to nie jest pierwsza strona (liczymy od zera) to zr≤b
link do poprzedniej strony ($page-1) w przeciwnym wypadku napisz tylko
Poprzednia (nie link).
Teraz robimy listΩ stron, lub jak kto woli porcji:
for ($i=1; $i<=$podstron; $i++) {
if ($i==$page-1) echo "$i"; else echo "<a href=skrypt.php?page=$i> $i
</a>";
}
PamiΩtajmy o tym, ┐e wewnΩtrznie liczymy od zera!, ale na ekranie pokazujemy od
jedynki.
I znowu w skr≤cie... robimy pΩtle od 1 do ilo╢ci podstron, kt≤r▒ to wyliczyli╢my
troszkΩ wcze╢niej. Sprawdzamy czy przypadkiem aktualnie nie jeste╢my na tej
podstronie, je╢li tak to piszemy j▒ normalnie, a je╢li nie to robimy link do
danej podstrony. Chyba trochΩ zamota│em.....
Teraz czas na przycisk "nastΩpna strona". Robimy go w zasadzie prawie tak samo
jak przycisk "poprzednia strona":
if ($page<$podstron) echo "<a href=skrypt.php?page=".($page+1).">NastΩpna</a>";
else echo "NastΩpna";
No to ju┐ koniec naszej opowie╢ci... wszystko zrobione. Warto by│oby tylko
oprawiµ to jako╢ │adnie w html. Nawigacje w jaka╢ ramkΩ zamkn▒µ itp... Ale to
mo┐ecie potraktowaµ jako zadanie domowe :))
|