Komentáre k článkom (bez databáze)

27. srpna 2002

Pokud vás zaujala tvorba komentářů k článkům, ale nevýhodou bylo propojení s databází, Tomáš Červenka připravil řešení, ve kterém se bez databáze obejdete.

Keďže nemáme k dispozícii databázu, musíme všetko ukladať do textových súborov. Pravdepodobne najjednoduchšie riešenie bude si vytvárať pre každý článok jeden pridružený textový súbor. Tento súbor bude mať jedinečný názov, ale o tom neskôr. V každom súbore budú komentáre. A tu máme na výber, buď budeme do tohoto súboru ukladať kompletný HTML formátovaný komentár, čo je jednoduchšie, alebo budeme ukladať len jednotlivé časti komentára (autor, email, text, dátum) a potom ich následne skladať a formátovať. Veľká výhoda toho bude v tom, že môžete formátovanie a výzor komentárov meniť neskôr a veľmi jednoducho, nebudete musieť meniť X súborov, ale len jeden. Takže si myslím, že výber padne na druhý spôsob.

Z čoho sa bude skladať „aplikácia“

Keďže sa nebude jednať iba o jeden súbor, dalo by sa tomu hovoriť aplikácia, ale to je teraz druhoradé. Predpokladom je, že máte na svojej stránke články, ktoré chcete nechať návštevníkom komentovať. Otázka je, ako máte články uložené. Ak sú to dynamicky generované súbory PHP, nie je žiaden problém jednoducho si skript zavolať funkciou require. Ak sú však články vo statickom (X)HTML dokumente a vy nechcete prepisovať odkazy a všetko okolo, najjednoduchšie asi bude iframe. Takže máme články, skript si ochvíľu urobíme a ešte potrebujeme textové súbory. Najlepšie si bude vytvoriť adresár komentare, kde budeme ukladať potrebné súbory. Nevyhnutné je nastaviť pre tento adresár práva na 777 (nastavíte si ich napríklad vo Windows Commanderi ikonou či príkazom chmod komentare 777).

Hlavný skript

<table width=500 cellpadding=1 cellspacing=1 border=0 bgcolor=“#000000″>
<?
@$test = fopen(„komentare/k_$id.dat“, „r“);
if(!$test):
echo „<tr><td width=500 bgcolor=\“gray\“>K tomuto článku nie sú k dispozícii žiadne komentáre</td></tr>“;
else:
$text = fread($test, filesize(„komentare/k_$id.dat“));
$roz = explode(„—–„, $text);
for($i=1;$i<count($roz);$i++):
$e = $roz[$i];
$e = nl2br($e);
list($meno,$email,$predmet,$text) = explode(„<br>“, $e);
echo „<tr><td width=500 bgcolor=\“gray\“><a href=’mailto:$email‘>$meno</a> – $predmet</td></tr>“;
echo „<tr><td width=500 bgcolor=\“silver\“>$text</td></tr>“;
endfor;
fclose($test);
endif;
echo „<tr><td width=500 bgcolor=\“gray\“><a href=’pridaj_komentar.php?id=$id‘>Pridaj komentár</a></td></tr></table>“;
?>

Tento skript robí v zásade dve veci. Najprv sa pokúsi otvoriť súbor, ktorý je priradeným súborom k danému článku. Ak súbor neexistuje, znamená to, že žiadne komentáre ešte k súboru zapísané neboli, čo oznámi návštevníkovi. Ak však súbor existuje, znamená to, že nejaké komentáre už existujú a preto ich vypíše. Z otvoreného súboru prečíta všetok obsah a potom ho pomocou funkcie explode rozloží. Podľa nášho kľúča text rozloží na jednotlivé komentáre (napríklad v mojom prípade ich oddeľujem „—–„) a potom následne jednotlivé komentáre na ďalšie časti: autora komentáru, jeho email, predmet a text komentáru. Do prvého riadku zapíšem meno autora s odkazom na jeho email a k tomu aj predmet komentáru. Do druhého zapíšem samotný text komentáru. Podto ešte pridám jeden riadok tabuľky, kam len napíšem odkaz na formulár pre pridanie komentáru.

Vloženie komentárov do článku

Ak máte článok v súbore .php, nie je problém ho zavolať funkciou require. Ak by sme skript volali zo stránky .htm, použijeme napríklad iframe.

<? $id = „vase_id“; require „komentare.php“ ?>     alebo <iframe src=“komentare.php?id=vase_id“>

Súbory s komentármi musia mať jedinečný názov. To znamená, že každý článok, z ktorého komentáre chcete mať vypísané, musí mať svoj identifikátor, teda vase_id. Takže jednoducho pre každý článok nahraďte v zápise vase_id za ľubovoľný reťazec či číslo. Pozor, nesmie však obsahovať medzeru, diakritiku, najjednoduchšie to azda bude s číslami.

Formulár komentáru

<html>
<head>
<meta http-equiv=“Content-Type“ content=“text/html; charset=windows-1250″>
<title>Formulár</title>
</head>
<body>
<form method=“POST“ action=“komentar_add.php“>
<input type=hidden name=“id“ value=“<? echo $id ?>“>
<p>Meno: <input type=“text“ name=“meno“ size=“20″></p>
<p>Email: <input type=“text“ name=“email“ size=“20″></p>
<p>Predmet: <input type=“text“ name=“predmet“ size=“20″></p>
<p>Text: <textarea rows=“2″ name=“text“ cols=“20″></textarea></p>
<p><input type=“submit“ value=“Poslat“ name=“B1″></p>
</form>
</body>
</html>

Tento formulár zisťuje potrebné údaje, jediná záľudnosť je skryté pole, ktoré ďalej predáva identifikátor článku, ku ktorému sa vlastne komentár má pridať. A teraz k súboru, ktorý pridá komentár:

<?
if(!file_exists(„komentare/k_$id.dat“)):
$fp = fopen(„komentare/k_$id.dat“, „w“);
chmod(„komentare/k_$id.dat“, 0766);
else:
$test = fopen(„komentare/k_$id.dat“, „r“);
$stary_text = fread($test, filesize(„komentare/k_$id.dat“));
fclose($test);
$fp = fopen(„komentare/k_$id.dat“, „w“);
endif;
$text = nl2br($text);
$txt = „—–$meno\n$email\n$predmet\n$text“;
fputs($fp, $txt);
if(isset($stary_text)) fputs($fp, $stary_text);
fclose($fp);
header(„Location: komentare.php?id=$id“);
?>

Najskôr si zistíme, či súbor s komentármi k článku už existuje. Ak nie, vytvoríme si ho. Na to použijeme funkciu fopen s parametrom „w“. Súbor pomenujeme k_vase_id, kde vase_id je vyššie opísaný identifikátor. Pozor, skript nebude fungovať, ak nenastavíme práva adresáru. Potom nastavíme tomuto súboru práva na 766 (užívateľ má plný prístup, ostatní môžu písať a čítať, to nám stačí).

Ak už súbor existuje, najskôr si ho prečítame funkciou fread a následne otvoríme pre písanie opäť funkciou fopen. Poskladáme si údaje z formulára do premennej $txt, tak, aby sme ju potom jednoducho v súbore komentare.php rozložili a vypísali. Keď máme „skladačku“ hotovú, premennú $txt uložíme do súboru funkciou fputs. Ak sme predtým museli čítať staré komentáre z toho istého súboru, zapíšeme ich za nový, tým docielime zoradenie textu chronologicky. Potom zavrieme súbor s komentármi a presmerujeme užívateľa naň (toto si môžete zmeniť, presmerujte ho napríklad na úvod, alebo podobne).

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

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

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

2 komentářů

  1. Minimoj

    Čvn 24, 2009 v 17:49

    dobry clanok, paci sa mi

    Odpovědět
  2. Karel

    Říj 26, 2009 v 18:55

    Článek je to dobre, akorát že mi to nechce fungovat, mám vytvořenou stránku v php, kde mám přiřazování k článku. Vložení funguje, ale když přidám komentář, tak se nic nezobrazí, a ani se nezapíše od souboru 1.dat v komentare, i přesto že to mám vše povolené pro zápis. Může ti mi stím prosím někdo poradit včem dělám tu chybu? předem děkuji za odpověď.

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *