Systém novinek v PHP a MySQL - stránkování
Dnes jsem provedl úpravu v mém systému novinek v PHP a MySQL.
Celá úprava v podstatě spočívá jen v tom, že jsem upravil zobrazování seznamu novinek v administrační části tak, aby se seznam rozděloval na stránky po deseti záznamech. Hodnotu počtu záznamů na stránku je možné změnit v souboru dbconnect.php, kde je na to definována konstanta PAGELIMIT.
Zajímavý na celé změně může být snad jen kód, který jsem použil pro zobrazení stránkovače. Rozhodl jsem se, že budu zobrazovat maximálně pět odkazů na jednotlivé stránky, přičemž když bude stránek víc, tak se na začátku (případně na konci) stránkovače zobrazí tři tečky. Aktuální stránka bude vždy (mimo případů ze začátku a z konce) zobrazena uprostřed stránkovače.
Nebudu zde opisovat celý kód, ale spíše jen teorii. Kdo bude mít zájem, může si projekt stáhnout a podívat se do zdrojů.
Nejdřív je potřeba si spočítat počet záznamů v tabulce novinek. Toho lze dosáhnout například následujícím SQL dotazem:
SELECT
Count(id) as Pocet
FROM bb_news;
Aktuální číslo stránky, která má být zobrazena si předáme v URL v parametru page. Ten pak vyčteme z proměnné $_GET. Pro stránkovač je nutné vědět, na kolik stránek budeme stránkovat (tedy počet stránek). Ten vypočítáme tak, že vezmeme podíl počtu všech záznamů a počtu záznamů na jednu stránku (viz konstanta PAGELIMIT):
//vypocitam pocet vsech stran
$pocetstran = ceil($pocetvsechzaznamu/PAGELIMIT);
Pak je třeba ošetřit parametr zadané stránky:
//test cisla strany
if ($strana <= 0):
//kdyz je mensi nebo rovno nule, nastavim prvni stranu
$strana = 1;
else:
if ($strana>$pocetstran):
//kdyz je vetsi nez pocet stran, nastavim posledni stranu
$strana = $pocetstran;
endif;
endif;
Pak je potřeba vypočítat číslo stránky, kterým bude stránkovač začínat a kterým bude končit:
//vypocet cisla stranky, kterym bude strankovac zacinat
if ($strana>3):
//pokud je stranka vetsi nez 3
if (($strana + 2) >= $pocetstran):
//pokud je stranka + 2 vetsi nebo rovna poctu stran
//je pocatecni hodnota rovna poctu stran minus 4
$start = $pocetstran — 4;
else:
//jinak je pocatecni hodnota rovna stranka minus 2
$start = $strana — 2;
endif;
else:
//neni vetsi ney 3, pocatek je 1
$start = 1;
endif;
//osetreni na nulu
if ($start<=0): $start=1; endif;
//vypocet cisla stranky, kterym bude strankovac koncit
//vzdy budou zobrazeny odkazy na maximalne 5 stranek
$cil = $start + 4;
//osetreni preteceni posledniho cisla stranky
if ($cil > $pocetstran): $cil = $pocetstran; endif;
Pak už jen v jednoduchém cyklu FOR od proměnné $start do proměnné $cil provedeme naplnění textového řetězce s odkazy na stránky, přičemž v případě, že se jedná o zvolenou stránku místo odkazu zabalíme číslo stránky do tagu STRONG:
//prirazeni retezce pro strankovac
$pager = ”;
for ($i=$start; $i<=$cil;$i++):
if ($i<>$strana):
//stranky ktere nejsou zvolenou strankou
$pager.="<a href=\"?page=" . $i . "\">" . $i . "</a>";
else:
//zvolena stranka
$pager.="<strong>" . $i . "</strong>";
endif;
//pokud nejsem na konci cyklu, pridam oddelovac
if ($i<$cil):
$pager.=" | ";
endif;
endfor;
No a nakonec ještě přidám tečky na začátek a konec:
//pridani tecek na zacatek a konec strankovace, pokud je vic jak 5 stranek celkem
if ($pocetstran > 5):
//pokud je aktualni stranka vetsi nez tri, znamena to, ze zacatek je nad jednickou
//a musim tedy zobrazit tecky na zacatku
if ($strana > 3):
$pager="<a href=\"?page=" . ($start — 1) . "\">...</a> " . $pager;
endif;
//pokud je rozdil poctu stran a aktualni strany vetsi nez 2, znamena to, ze do konce je vic
//nez 2 stranky a musim zobrazit tecky na konci
if (($pocetstran — $strana) > 2):
$pager=$pager . " <a href=\"?page=" . ($cil + 1) . "\">...</a>";
endif;
endif; //pocetstran > 5
- Napsal: bobocop, 12.09.2006, 18:33:00
- Kategorie: Programování
- Trvalý odkaz
Komentáře
Přidání komentáře...
Archivy
- červenec 2011
- červen 2011
- květen 2011
- únor 2011
- červenec 2010
- červen 2010
- duben 2010
- březen 2010
- únor 2010
- leden 2010
- listopad 2009
- říjen 2009
- září 2009
- červen 2009
- březen 2009
- prosinec 2008
- listopad 2008
- říjen 2008
- srpen 2008
- červen 2008
- květen 2008
- duben 2008
- březen 2008
- únor 2008
- prosinec 2007
- listopad 2007
- září 2007
- červen 2007
- květen 2007
- duben 2007
- březen 2007
- leden 2007
- prosinec 2006
- říjen 2006
- září 2006
- srpen 2006
- červenec 2006
- červen 2006
- duben 2006
- březen 2006
- únor 2006
- leden 2006
- prosinec 2005
- listopad 2005
- říjen 2005
- září 2005
- srpen 2005
- červenec 2005
- červen 2005
- květen 2005
- duben 2005
- březen 2005
- únor 2005
- leden 2005
- prosinec 2004
- listopad 2004
- říjen 2004
- září 2004
- srpen 2004
- červenec 2004
- červen 2004
Odkazy
- Bohumír Bednařík
- Matějka Koupelny
- Škola pro výcvik vodicích psů pro nevidomé
- Veřejný weblog
- Montáže nábytku
Ostatní
Vyhledávání
Reklama