V minulém díle jsme se seznámili se základními pojmy vývoje informačního systému, zadefinovali jsme si zadání a vytvořili datovou základnu (tj. tabulky v databázi). Dnes přikročíme k první implementaci, a to k zobrazení úvodní stránky katalogu, která se skládá ze seznamu hlavních sekcí a u každé sekce bude uveden seznam jejich přímých podsekcí.

Úvodní stránka

Náš systém se bude skládat z několika PHP skriptů. Základním skriptem bude soubor index.php. Systém rozdělím do několika PHP skriptů úmyslně, kvůli přehlednosti, v praxi je možno všechny akce systému naprogramovat do jediného skriptu, a například podle parametru AKCE určovat, co se má nebo nemá provést.

Jak poznáme, že se má zobrazit úvodní stránka? Jednodušše, úvodní stránka se zobrazí tehdy, jestliže skript index.php bude zavolán bez jakýchkoliv parametrů. Zatím budeme ve skriptu uvažovat pouze parametr SEKCE, jehož hodnotou bude číslo sekce, kterou chceme „rozbalit“, tj. zobrazit její přímé podsekce a seznam všech odkazů, které jsou v dané sekci zařazeny. Struktura skriptu by mohla vypadat následovně:

<?php
$zobraz_uvodni = 0;
/* bude rovno 1, jestlize nebyl predan zadny parametr: */
if (!$sekce) {
  $zobraz_uvodni = 1;
}
/* hlavni cast skriptu */
if ($zobraz_uvodni) { /* nebyl predan parametr ‚sekce‘ */
  /* zobrazime uvodni stranku */
}
else {
  /* „rozbalime“ vybranou sekci */
}
?>

Časem do příkazu IF (!$sekce) možná přidáme i test dalších parametrů, které nám budou indikovat, zdali se má či nemá zobrazit úvodní stránka.

Zobrazení seznamu hlavních sekcí

Zobrazíme seznam takových sekcí, které mají nastaveno, že jsou kořenové (tj. hodnota atributu KOREN = ‚A‘) a u každé z nich zobrazíme její přímé podsekce, tak jak bývá zvykem na běžných známých portálech. Příklad zobrazení uvádí následující obrázek:

úvodní stránka

Z pohledu databázového provedeme první SELECT, kterým získáme seznam kořenových sekcí a pro každou sekci (resp. její ID) budeme v cyklu WHILE hledat pomocným SELECTem její přímé podsekce. Takže ve skriptu, kde máme uvedený komentář /* zobrazime uvodni stranku */ bude určitě následující kód: (samozřejmě chceme, aby názvy sekcí a podsekcí byly klikací, tzn. že v generování výstupu jejich názvy „obalíme“ HTML tagy <A> a </A>, v odkazu se bude předávat parametr „sekce“, jehož hodnotou bude příslušné číslo.

/* Zobrazeni uvodni stranky – hlavnich sekci a jejich primych podsekci — index.php */
print „<UL>“; /* zacatek nadrazeneho seznamu UL */
/* polozime a provedeme SQL dotaz na hlavni sekce: */
$dotaz1 = „SELECT id, nazev FROM sekce WHERE koren = ‚A'“;
mysql_connect(„localhost“);
$hlavni_sekce = mysql(„katalog“, $dotaz1);
/* kolik sekci bylo nalezeno: */
$pocet_vracenych_sekci = mysql_num_rows($hlavni_sekce);
/* pro kazdou takto nalezenou sekci provedeme nasledujici telo cyklu: */
for ($i = 0; $i < $pocet_vracenych_sekci; $i++) {
  $cislo_sekce = mysql_result($hlavni_sekce,$i,“id“);
  $nazev_sekce = mysql_result($hlavni_sekce,$i,“nazev“);
  print „<LI> <A HREF=\“index.php?sekce=$cislo_sekce\“>$nazev_sekce</A>\n“;
  /* polozime dotaz na vsechny podsekce dane sekce: */
  $pom_dotaz = „SELECT id, nazev
    FROM sekce, vazby_sekce
    WHERE vazby_sekce.podsekce_id = sekce.id
    AND nadsekce_id = $cislo_sekce“;
  $seznam_podsekci = “; /* seznam podsekci je zatim prazdny */
  $podsekce = mysql(„katalog“, $pom_dotaz);
  $pocet_podsekci = mysql_num_rows($podsekce);
  /* timto cyklem zretezime nazvy podsekci do jednoho retezce, ktery pak vytiskneme */
  for ($j = 0; $j < $pocet_podsekci; $j++) {
    $cislo_podsekce = mysql_result($podsekce,$j,“id“);
    $nazev_podsekce = mysql_result($podsekce,$j,“nazev“);
    /* postupne do sezname podsekci priretezujeme dalsi a dalsi podsekce */
    $seznam_podsekci = $seznam_podsekci.
    „<A HREF=\“index.php?sekce=$cislo_podsekce\“>$nazev_podsekce</A>|\n“;
  }
  $seznam_podsekci = ‚<UL><LI> ‚.$seznam_podsekci.'</UL>‘;
  print „$seznam_podsekci \n</LI>“;
}
print „</UL>“; /* konec nadrazeneho seznamu UL */
mysql_close;

Pár poznámek k uvedenému kódu. Vezmeme-li si náš příklad se sekcí „Databáze“, tak pro tuto sekci bude vygenerován následující fragment kódu:

<LI> <A HREF=“index.php?sekce=1″>Databáze</A>
<UL>
      <LI><A HREF=“index.php?sekce=2″>SQL</A> <A HREF=“index.php?sekce=3″>Systémy</A> <A HREF=“index.php?sekce=4″>Příklady</A>
</UL>
</LI>

Totéž se provede pro každou hlavní sekci. Uživatel má možnost na libovolný z názvů sekcí kliknout, zavolá se znovu náš skript index.php (tentokrát s parametrem SEKCE), což už bude znamenat, že se nemá zobrazit úvodní stránka, ale má se rozbalit vybraná sekce (nejprve se zobrazí její podsekce a pak seznam všech odkazů v této sekci).

Samozřejmě je potřeba mít na paměti, že všude, kde se přistupuje k databázi a pracuje se s ní, by se měly vždy testovat chybové výstupy (hlášky). Pro lepší čitelnost ukázek zdrojových kódů tyto kontroly neprovádím, v praxi to ale maximálně doporučuji. Pokud chcete, aby seznam sekcí i podsekcí byl seřazen dle abecedy, použijte v příkazu SELECT konstrukci ORDER BY NAZEV. Designu se zatím nevěnuji a věnovat ani nebudu, v této chvíli to není důležité. Této problematice budu případně věnovat samostatný článek.

Pro zkoušení tohoto kódu je vhodné mít databázi naplněnou nějakými cvičnými daty, na kterých kód můžete testovat.

Tím pro dnešek končím, příště se budeme věnovat implementaci zobrazení obsahu vybrané sekce (tj. zobrazení jejích podsekcí a odkazů).

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

1 Příspěvěk v diskuzi

Odpovědět