Diskuze pod článkem - 2.díl - dle vlákna
V minulém díle jsme si pověděli o možnosti výpisu komentářů za sebou v časové posloupnosti tak jak byly postupně přidávány. Dnes se podíváme na druhou možnost. Třídit výpis komentářů dle tzv. diskuzních vláken. Tato forma diskuzí bývá v komentářích pod článkem na stránkách často užívána, neboť jednoduše umožní čtenáři sledovat reakce třeba jen na konkrétní příspěvek, který jej z celé diskuze zaujal.
Zatímco příspěvky tříděné dle posloupnosti často bývají vypisovány přímo, u třídění dle vláken nam často tvůrci webu dávají možnost které příspěvky chceme vypsat.
Řazení dle vláken (dle logiky reakcí)
U tohoto typu třídění je velkou výhodou rychlá přehlednost diskuze. Jedním pohledem lze snadno vyhodnotit, kdo na který příspěvek reagoval. Nevýhodou je, pokud chci v rozsáhlejší diskuzi vyhledat všechny nové příspěvky, neboť ty mohou být ve všech vláknech u musím očima prohlédnout celý seznam. Jako příklad takto organizované diskuze bych uvedl třeba diskuzi pod články na serveru Grafika.cz ( http://www.grafika.cz/art/gr_ces/CES-07-microsoft-keynote-bill-gates.html )
Když už chceme uživateli nabídnout přehled dle vláken je také vhodné nějak opticky zvýraznit jednotlivé úrovně diskuze. Prakticky se vžil způsob, kdy reagující příspěvek je o nějaký ten centimetr posunut vůči příspěvku rodičovskému.
Způsobů jak toho dosáhnout, je určitě mnoho, zde si dovolím navrhnout jednoduché řešení, které jsem párkrát použil. Do tabulky jsem přidal další pole idstring - řetězec o délce 30 znaků. Pro každý příspěvek přidávám do tohoto řetězce třípísmenný identifikátor určující jeho vlákno v dané diskuzi a pořadí příspěvku v tomto vlákně. Jde o to, že první příspěvek má hodnotu 001, druhý 002, reakce na první pak 001001, druhá reakce na první příspěvek 001002. Tímto dostávám možnost mít na každý příspěvek až 999 přímých reakcí a každé vlákno může mít až 10 úrovní (délka 30 znaků). Nutné je ošetřit dosažení 10.úrovně. Tzn. že na příspěvek s identifikátorem o délce 30 znaků již nemůže být další reakce ale zapisuje se do stejné poslední 10.úrovně. Taktéž je nutné zablokovat konkrétní úroveň pokud počet reakcí na konkrétní příspěvek dosáhne třeba 900. Jistě, počet možných příspěvků je 999, ale počítejme s tím, že v daném okamžiku může již mít několik uživatelů příspěvek rozepsán a je vhodné jim umožnit jeho uložení. Museli byste ale psát velmi zajímavé či kontroverzní články, aby byl tento limit v diskuzi k článku dosažen.
Návrh tabulky
id // - identifikační číslo komentáře (unikátní)
idc // - id.číslo článku ke kterému komentář přísluší
autor // - jméno autora komentáře
e-mail // - e-mail autora komentáře
datum // - datum zápisu
nazev // - název komentáře
text // - vlastní obsah komentáře
idstring // - řetězec znaků určující pozici příspěvku v diskuzi
Tip! - pro odsazení jednotlivých úrovní diskuze je poté velmi jednoduché použít jako parametr délku řetěce idstring. Mohu tedy pro výpočet mezery použít třeba $margin=7*(strlen(trim($row[idstring]))-3);. Ten odpočet hodnoty -3 na konci výrazu je proto, že první úroveň diskuze nechci odsazenou, ale řetězec idstring má délku 3 znaky.
Pro názornější vysvětlení opět malá ukázka tabulky.
Vlastní zjednodušená tabulka
id idc datum nazev idstring
1 5 01.01.2007-00:25:51 Prvni 001
7 5 25.03.2007-12:57:28 Re: Prvni 001001
2 5 01.01.2007-01:26:48 Druhý komentář 002
4 5 16.02.2007-00:27:51 Re: Druhý komentář 002001
5 5 02.03.2007-00:28:19 Re: Druhý komentář 002001001
6 5 21.03.2007-17:00:00 Re: Druhý komentář 002002
3 5 01.01.2007-14:47:11 Třetí komentář 003
Tip! - u každé z těchto diskuzí většinou bývá možnost zobrazit všechny příspěvky, nebo zobrazit jen ty u kterých si provedeme jejich výběr nejčastěji zatržením checkboxu. Nikde jsem ale zatím neviděl možnost zobrazit nové příspěvky. Přitom je řešení celkem jednoduché. Uživatel by zatrhl checkbox u jednoho vybraného příspěvku (jeho id se stejně předává programu aby bylo možno zobrazit jen vybrané). Následně by se provedl zcela jednoduchý SELECT příspěvků k danému článku jejichž id je vyšší než odeslané.
V příštím díle se konečně dostaneme k tomu, proč jsem tyto 2 články psal. Ukážeme si řešení tabulky tříděné uživatelem dle jeho potřeb. Odešleme data do prohlížeče uživatele a ten si je může dále třídit dle libosti na svém PC, aniž by dále zatěžoval server či přenosové linky.
Související články:
- Diskuze pod článkem - 3.díl - tříděná uživatelem ( http://blog.fotohans.net/diskuze-pod-clankem-tridena-uzivatelem.html )
- Diskuze pod článkem - 1.díl - dle příspěvků ( http://blog.fotohans.net/diskuze-pod-clankem-dle-prispevku.html )
- Pruhovaná tabulka ( http://blog.fotohans.net/pruhovana-tabulka.html )
