Výpis seznamu po stránkach - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



PHP

Výpis seznamu po stránkach

16. května 2001, 00.00 | Jistě to znáte. Chcete vypisovat na svých stránkách nějaké záznamy, ale seznam je delší než by měl být. Řešením je rozdělit záznamy a přidat odkazy na předcházající a další. Jak na to vám ukáže tento článek..

Úvod
Určite poznáte situáciu, keď na svojom webe používate databázu a jej obsah potrebujete zobraziť (použijem môj obľúbený príklad - zoznam hudobných skladieb). Kým je počet záznamov malý, tak sa vojde na stránku. Ale ak databáza začne narastať, tak jej výpis jednak narušuje pohodlné prezeranie stránky alebo jej vzhľad, ale taktiež predlžuje reakciu web servera a návštevníkovi sa stránka načíta pomaly. Vypísanie kratšieho zoznamu, resp. jeho časti by problém vyriešilo. Ale aký kratší, akú časť ?

Na tieto otázky existuje odpoveď a to je vypisovanie zoznamu po stránkach. Určite tento spôsob poznáte, pretože je ním vypisovaný zoznam výsledkov hľadania vo vyhľadávacích serveroch, napr. altavista alebo google. Stránka neobsahuje zoznam stoviek alebo tisícov položiek (= liniek na stránky spĺňajúce vaše vyhľadávacie kritériá), ale tieto položky sú zoskupené do stránok napr. po 10 na jedno zobrazenie a k ďalším položkám sa je možné doklikať.

Definovanie spôsobu výpisu
Tu sa dostávame k definovaniu, ako má vyzerať spôsob výpisu zoznamu. Povedzme, že chceme, aby v tzv. "výberovej lište" bola možnosť kliknúť:
- na poradové číslo strany
- na nasledujúcu stranu (používa sa označenie Next, >> alebo Ďalšia)
- na predošlú stranu (používa sa označenie "Prev", << alebo Predošlá)
(prvky ako začiatok zoznamu alebo koniec nemusíme implementovať nakoľko sú predstavované prvou a poslednou stranou)
Potom by sa zobrazil samotný výpis obsahujúci preddefinovaný počet položiek. Na záver opäť zobrazíme výberovú lištu, aby sa zoznam dal prezerať aj keď je návštevník webu na jeho dolnej časti a nemusel sa vrátiť späť na začiatok stránky. A aby sme sa ukázali ako flexibilní programátori, tak ten počet záznamov na stránke urobíme univerzálny - nastavíme ho do premennej. Takto bude možné časom počet modifikovať bez nutnosti zmeny kódu a teda prispôsobiť zmeneným podmienkam. Napríklad je iné vypisovať na stránke zoznam článkov alebo zoznam linkov. Článkov sa tam vojde (ak uvažujeme rozumnú mieru) tak 10, ale linkov aj 50.

Jednoduchý zoznam
Než začneme programovať, tak uvediem príklad databázy, ktorú budem ďalej zobrazovať:

CREATE TABLE skladby (
     ID int(11) NOT NULL auto_increment,
     skladba char(64),
     interpret char(64),
     PRIMARY KEY (ID));

Nastavenie premenných
Pomenujem základný skript klasicky index.php3, pre Vaše použitie nezabudnite premenovať aj odkazy vo vnútri ďalších častí skriptu. Najprv začnem s prípravou premenných, pretože napríklad pri prvom volaní skriptu nie je definovaná aktuálna strana. A tiež musíme inicializovať premennú počet položiek zoznamu na jednu stranu, zistiť celkový počet stránok zoznamu. Vypočítame skutočný počet položiek na stránke, pretože na poslednej stránke je tento počet rozdielny:

$rozsah = 10;
if (!$stranka) $stranka = 1;
$sql = "select Count(*) from skladby";
$result = @mysql_query($sql);
$maxhlaska = 0;
if ($row = @mysql_fetch_row($result))
  $maxhlaska = $row[0];
$pocetstranok = ($rozsah>1) ? ceil($maxhlaska / $rozsah) : $maxhlaska;
$nastranke = ($pocetstranok>1) ? $rozsah : ($maxhlaska % $rozsah);

Je použitý jednoduchý select, ale v reálnom webe tam určitú pribudnú aj podmienky výberu, napríklad podľa určitých kritérií alebo dátumu (nesmieme potom zabudnúť rovnaké podmienky uviesť aj pri zobrazovaní). Čo sa týka použitých výpočtov, tak mali by byť zrejmé. Využívame podmienený operátor pre "ošetrenie" situácie, keď je na každej stránke zobrazený iba jeden záznam a situáciu, ak zobrazujeme poslednú stránku. Pre lepšie zoznámenie sa s výpočtami odporúčam experimentovať s premennou $rozsah a s počtom záznamov v databáze.

Zobrazenie výberovej lišty
Teraz si vytvoríme spomínanú "výberovú lištu", ktorá bude slúžiť na priamy výber stránky a na prezeranie zoznamu o stránku vpred a späť. Navyše zvýrazníme aktuálnu stránku väčším písmom:

echo "<FONT SIZE=2>Výberová lišta: </FONT><B>\n";
if ($stranka > 1)
  echo "<A HREF=\"./index.php3?stranka=".($stranka-1)."\"><FONT SIZE=1>&lt;&lt;</FONT></A> \n";
for ($i=1;$i<=$pocetstranok;$i++)
  echo "<A HREF=\"./index.php3?stranka=$i\"><FONT SIZE=".(($i==$stranka) ? 2 : 1).">$i</FONT></A> \n";
if ($stranka < $pocetstranok)
  echo "<A HREF=\"./index.php3?stranka=".($stranka+1)."\"><FONT SIZE=1>&gt;&gt;</FONT></A>\n";

Ja som použil << ako prechod na predošlú stránku a >> ako prechod na nasledujúcu. Kľudne však môžete pouziť Spět a Dále alebo Prev a Next alebo obrázky. Podobne namiesto vypísania čísla môžete zobraziť obrázok, taktiež zvýrazniť aktuálnu stránku napríklad inou farbou.

Zobrazenie zoznamu
Dostávame sa k finále - zobrazeniu časti zoznamu, t.j. tých záznamov, ktoré patria na aktuálnu stránku. Ktorá to je, to určuje hodnota $stranka. Opäť to nebudem komplikovať, a pre zobrazenie použijem jednoduché echo:

$sql = "select skladba, interpret from skladby";
$result = @mysql_query($sql);
$i = 1;
while ($row = @mysql_fetch_row($result)):
  if (($i>=(($stranka-1)*$rozsah+1)) && ($i<=($stranka*$rozsah)))
    echo "<BR>" . $row[0] . "&nbsp;" . $row[1] . "<BR>\n";
  $i++;
endwhile;

Kľúčová časť skriptu je podmienka, ktorá určuje, či načítaný záznam patrí danej stránke. Výhodou tohto riešenia je, že je prehľadné. Taktiež nezáleží na tom, či záznamy v databáze majú ID pekne v poradí za sebou (čo pri mazaní alebo použití kritérií nemusí byť pravda). Nevýhodou je, že prechádza všetky záznamy v databáze. Avšak pokiaľ zobrazujeme špecifický úsek databázy, tak sa dá predpokladať, že návštevník webu si ho vyžiadal (či lepšie povedané vyklikal), takže je predpoklad, že je ochotný si počkať na jeho zobrazenie. Z mojej skúsenosti však nemám problém s rýchlosťou zobrazenia. Ak by predsa len rýchlosť bola problém, tak odporúčam sa inšpirovať článkom Raz denne, či komentármi k nemu, a predgenerovať si stránky vopred.

Možnosti rozšírenia
A sme na konci našeho skriptu. Kvôli zvýšeniu užívateľského komfortu odporúčam znova zaradiť časť skriptu "výberová lišta". Medzi ďalšie možnosti rozšírenia patrí rôzne usporiadanie zoznamu alebo vypisovanie podľa kritérií. Ak Vás ešte niečo napadne, tak nezabudnite napísať do komentárov k článku.

Želám veľa úspechov pri zobrazovaní Vašich databáz po stránkach.

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: