V úvodním článku o tvorbě Diskusního fóra v PHP bez použití databáze jsme si ukázali, jak vypsat hlavní diskusní témata. Dnes si řekneme, jak provést zobrazení jednotlivých témat i odpovědí a jak vytvořit strom odpovědí na dané téma.
Výpis příspěvku
Zobrazení příspěvku bude provádět soubor read.php3. Nejprve vložíme standardní hlavičku.
<? // vlozi standardni hlavicku $width=90; include ("header.php3"); ?> |
|
Nyní si vysvětlíme význam proměnných $topic, $row, $mainrow, $id.
$topic – obsahuje jméno souboru, ve kterém se nachází zobrazený příspěvek, např. $topic=main značí soubor s hlavními tématy $row – obsahuje číslo řádku v souboru $topic.topic, na kterém se nachází zobrazený příspěvek $mainrow – obsahuje číslo řádku v souboru main.topic, na kterém se nachází hlavní téma (pokud tedy zobrazujeme hlavní téma, obsah proměnných $row a $mainrow je stejný) $id – obsahuje unikátní označení zobrazeného příspěvku a zároveň i jméno souboru, do kterého se zapíše případná odpověď na zobrazený příspěvek |
|
Nejprve do proměnné $dat_file načteme obsah souboru s požadovaným příspěvkem. Následně si jednotlivé části příspěvku na řádce $row uložíme do proměnné $entry. Navíc do proměnné $topic_name vložíme předmět příspěvku, což využijeme ve formuláři pro odpověď.
//soubor, kde je aktualni prispevek $dat_file = File("data/$topic.topic"); $entry = Explode("#", $dat_file[$row]); $topic_name = $entry[1]; |
|
Nyní vložíme jednotlivé části příspěvku do tabulky. Jelikož e-mailová adresa je nepovinný údaj, použijeme jednoduchou podmínku if ($entry[4]!="") echo ‚<a href="mailto:‘ . $entry[4] . ‚">‘.
<table width="90%" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="Black"><tr><td> <table width="100%" border="0" cellspacing="0" cellpadding="3" align="center" bgcolor="white"> <tr bgcolor="#4A4A4A"><td class=tabulkanadpis><?echo $entry[1]?></td></tr> <tr><td class=text>Autor: <? if ($entry[4]!="") echo ‚<a href="mailto:‘ . $entry[4] . ‚">‘; echo $entry[2] ?></a></td></tr> <tr><td class=text>Datum: <?echo $entry[3]?></td></tr> <tr><td class=text><br><?echo $entry[5]?></td></tr> </table></td></tr></table> <br> |
|
Výpis odpovědí
Seznam odpovědí se zobrazí v tabulce o 3 sloupcích – předmět odpovědi, autor a datum vložení. Na prvním řádku bude hlavní téma. Ze souboru main.topic tedy vybereme řádek $mainrow, zpracujeme pomocí funkce Explode() a zapíšeme do tabulky.
//hlavni tema $dat_file = File("data/main.topic"); $entry = Explode("#", $dat_file[$mainrow]); $maintopic = $entry[0]; ?> <table width="90%" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="Black"><tr><td> <table width="100%" border="0" cellspacing="1" cellpadding="3" align="center"> <tr bgcolor="#4A4A4A"> <td class=tabulkanadpis>Odpovědi</td> <td width=25% class=tabulkanadpis>Autor</td> <td width=10% align=center class=tabulkanadpis>Datum</td> </tr> <tr bgcolor=white> <td class=tabulka><b>Téma:</b> <a href=read.php3?topic=main&<?echo "row=$mainrow&mainrow=$mainrow&id=$entry[0]>$entry[1]"?></a></td> <td width=25% class=tabulka><?echo $entry[2]?></td> <td width=10% align=center class=tabulka><?echo $entry[3]?></td> </tr> |
|
Zbývá zobrazit ještě strom odpovědí, což provedeme pomocí námi definované funkce Topic($topic, $level, $mainrow), kde první parametr určuje unikátní označení právě zpracovávaného příspěvku, v dalším parametru je úroveň, ve které se nachází daná odpověď a konečně poslední parametr určuje číslo řádku v souboru main.topic, na kterém se nachází hlavní téma.
Pokud zjistíme, že existuje soubor $topic.topic, jinými slovy, že existuje odpověď na příspěvek s označením $topic, projdeme pomocí cyklu soubor $topic.topic (na každý příspěvek může být libovolný počet odpovědí) a do proměnné $entry načteme obsah odpovědi.
//vytvarime strom odpovedi function Topic($topic, $level, $mainrow) { if (File_Exists("data/$topic.topic")): $dat_file = File("data/$topic.topic"); for ($i=Count($dat_file)-1;$i>=0;$i–): $entry = Explode("#", $dat_file[$i]); |
|
Nyní můžeme začít zapisovat jednotlivé údaje do tabulky. Pomocí jednoduchého cyklu vytvoříme odsazení příspěvků, přičemž využíváme proměnné $level (např. je-li $level=3, vypíšeme 3*10 mezer – ). Přidáme ještě obrázek line.gif a odkaz na zobrazení daného příspěvku. Poté, co zapíšeme údaje i do zbývajících sloupců, voláme rekurzivně funkci Topic(). V prvním parametru předáme unikátní označení právě zapsaného příspěvku, v druhém navýšíme hodnotu proměnné $level o 1 úroveň, třetí parametr zůstává stejný.
<tr bgcolor=white> <td class=tabulka> <?for($x=1;$x<=$level;$x++) echo " ";?><img src="line.gif" width="50" height="10" border="0" alt=""><a href=read.php3?<?echo "topic=$topic&row=$i&mainrow=$mainrow&id=$entry[0]>" . $entry[1]?></a></td> <td width=25% class=tabulka><?echo $entry[2]?></td> <td width=10% align=center class=tabulka><?echo $entry[3]?></td> </tr> <? Topic($entry[0], $level+1, $mainrow); endfor; endif; } Topic($maintopic, 1, $mainrow); |
|
Na závěr ukončíme tabulku a vložíme formulář, umožňující odpovědět na zobrazený příspěvek.
</table></td></tr></table> <? //vlozi formular pro odpoved include ("form.php3"); ?> |
|
V příštím díle si popíšeme výše zmíněný formulář a ukážeme si, jak provést zápis nového příspěvku.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.