WebToDate/Diskuze/Tipy a návody: Porovnání verzí
Bez shrnutí editace |
m Nahrazení textu „[[Category:WebToDate 4.1“ textem „[[Category:WebToDate“ |
||
| (Nejsou zobrazeny 4 mezilehlé verze od 2 dalších uživatelů.) | |||
| Řádek 1: | Řádek 1: | ||
[[Category:WebToDate | [[Category:WebToDate Diskuze]] | ||
[[Category:Diskuze]] | [[Category:Diskuze]] | ||
== Odesílání nově vložených příspěvků moderátorovi == | == Odesílání nově vložených příspěvků moderátorovi == | ||
| Řádek 74: | Řádek 74: | ||
Dále se nastaví tato předloha a další parametry ve formuláři '''Nastavení''' – '''Globální''' – '''E-maily''', jak je znázorněno na následujícím otisku obrazovky. | Dále se nastaví tato předloha a další parametry ve formuláři '''Nastavení''' – '''Globální''' – '''E-maily''', jak je znázorněno na následujícím otisku obrazovky. | ||
[[Image: | [[Image:diskuze56-nastaveni-rozesilani-mailu.jpg|center]] | ||
Pro odhlášení z e-mailu se používá skript ''/scripts/modules/disc/unsubscribe.php''. Předloha pro tento skript se vybírá ve formuláři '''Nastavení''' – '''Globální''' – '''Další nastavení''', jedná se o pole '''Předloha pro odhlášení odběru příspěvků'''. | Pro odhlášení z e-mailu se používá skript ''/scripts/modules/disc/unsubscribe.php''. Předloha pro tento skript se vybírá ve formuláři '''Nastavení''' – '''Globální''' – '''Další nastavení''', jedná se o pole '''Předloha pro odhlášení odběru příspěvků'''. | ||
| Řádek 214: | Řádek 214: | ||
<code> | <code> | ||
<nowiki><tr></nowiki> | <nowiki><tr></nowiki> | ||
<nowiki><td><strong><a href="<!--WTD_DISC(URL)-->"><!--WTD_DISC(NAME)--></a></strong></td></nowiki> | <nowiki><td><strong><a href="<!--WTD_DISC(URL)-->"><!--WTD_DISC(NAME)--></a></strong></td></nowiki> | ||
<nowiki><td><!--WTD_IF(HASAVATAR,"<img src="<!--WTD_DISC(AVATARFILE)-->" width="<!--WTD_DISC(AVATARWIDTH)-->" height="<!--WTD_DISC(AVATARHEIGHT)-->" align="baseline" | |||
<nowiki><td><!--WTD_IF(HASAVATAR,"<img src="<!--WTD_DISC(AVATARFILE)-->" width="<!--WTD_DISC(AVATARWIDTH)-->" height="<!--WTD_DISC(AVATARHEIGHT)-->" align="baseline" alt="<!--WTD_DISC(NICKNAME)-->">")--><!--WTD_IF(NOAVATAR,"<i>nemá avatar</i>")--> <!--WTD_DISC(NICKNAME)--></td></nowiki> | alt="<!--WTD_DISC(NICKNAME)-->">")--><!--WTD_IF(NOAVATAR,"<i>nemá avatar</i>")--> <!--WTD_DISC(NICKNAME)--></td></nowiki> | ||
<nowiki><td><!--WTD_DISC(TNUMOFITEMS)--></td></nowiki> | <nowiki><td><!--WTD_DISC(TNUMOFITEMS)--></td></nowiki> | ||
<nowiki><td><!--WTD_DISC(LASTMODIFIED)--></td></nowiki> | <nowiki><td><!--WTD_DISC(LASTMODIFIED)--></td></nowiki> | ||
<nowiki></tr></nowiki> | <nowiki></tr></nowiki> | ||
</code> | </code> | ||
Aktuální verze z 13. 10. 2009, 13:42
Odesílání nově vložených příspěvků moderátorovi
Jak je uvedeno v předchozích kapitolách, tento modul může volitelně zasílat e-maily s novými diskuzními příspěvky na zvolenou adresu moderátora, pro každou diskuzní skupinu lze zvolit jednu takovou adresu. Doporučený postup pro konfiguraci této funkce je následující:
- Vytvoří se předloha pro e-maily
- Nastaví se tato předloha a další základní volby ve formuláři Nastavení – Globální – E-maily
- V nastavení vlastností každé diskuzní skupiny se zadá odpovídající e-mailová adresa
- Odesílání se zapne ve formuláři Administrace – Předvolby.
Nejprve rozhodněte, zda chcete textový nebo HTML formát těchto e-mailů. Podle toho založte předlohu. Předloha e-mailů pro moderátora může mít (pro formát text) např. zhruba následující kód:
Nový diskuzní příspěvek ve skupině <!--WTD_DISC(DNAME)-->
**************************************************
Název: <!--WTD_DISC(NAME)-->
ID: <!--WTD_DISC(ID)-->
Text: <!--WTD_DISC(BODY)-->
V druhém kroku nastavte ve formuláři Nastavení – Globální – E-maily pole E-mail od a poslední tři položky týkající se e-mailů pro moderátory. Všechny e-maily budou mít stejný předmět a stejnou předlohu nezávisle na diskuzní skupině.
Ve třetím kroku přejděte do nabídky Administrace – Diskuze a pro každou skupinu vyplňte pole E-mail moderátora. Pokud v některé diskuzi zůstane adresa nevyplněna, ničemu to nevadí, ale příspěvky z této skupiny nebudou nikomu zasílány.
V posledním kroku aktivujte zasílání e-mailů ve formuláři Administrace – Předvolby v přepínači Posílat nové příspěvky moderátorovi e-mailem.
Pokud modul žádné e-maily neodesílá, bývá často problém v konfiguraci serveru.
V prvé řadě v souboru php.ini zkontrolujte nastavení v sekci [mail function], zejména SMTP a sendmail_from resp. sendmail_path.
Funkce pro odesílání e-mailů vyžaduje aktivaci PHP knihovny PEAR. Postupujte dle instalačního manuálu WebToDate - aktivuje knihovnu spuštěním PHP skriptu PEAR/go-pear.php z příkazové řádky, tj. např.:
c:\winnt\system32\php.exe c:\PHP\PEAR\go-pear.php.
Pokud provozujete instalaci na serveru s MS Windows a IIS a v php.ini máte nakonfigurováno využívání interní SMTP služby, nezapomeňte, že služba ve výchozím stavu pracuje jako běžný SMTP server. To znamená, že je nejen třeba povolit příslušné porty pro odeslání e-mailů, ale musí být přístup i k DNS serveru, aby byla služba schopna zpracovat e-mailové adresy.
Rozesílání diskuzních příspěvků e-mailem
Některé webové prezentace obsahují u diskuzí funkci pro zasílání nových příspěvků e-mailem uživatelům, kteří si toto zasílání objednali. Uživatel tak zadá příspěvek a přes svůj e-mail sleduje reakce na něj nebo chce e-mailem dostávat všechny názory návštěvníků webové prezentace k vybranému článku. Tento modul podporuje možnost implementace této funkce. Princip je následující:
- Uživatel vytvoří subskripci zadáním své e-mailové adresy. Tato subskripce může vyznačit buď zasílání všech příspěvků k vybrané zprávě, nebo příspěvků v určitém vlákně či vláknech diskuze.
- Plánovaná úloha Rozesílání diskuzních příspěvků v pravidelných intervalech vyhledává nové příspěvky splňující kritérium zadané daným uživatelem, odesílá nové příspěvky na zadanou adresu a u záznamu aktualizuje čas poslední kontroly, aby byla schopna při dalším spuštění opět nalézt pouze ty příspěvky, které ještě nebyly e-mailem odeslány.
- Pokud uživatel již nechce tyto e-maily dostávat, použije URL generované do e-mailů, kterým lze danou subskripci zrušit.
K funkci patří ještě plánovaná úloha Odstranění starých subskripcí, která může mazat subskripce starší než zadaný časový interval, čímž se brání postupnému nahromadění takového množství záznamů, které by znamenaly neúměrný čas potřebný pro vyhledávání nových příspěvků a jejich odeslání.
Doporučený postup implementace této funkce je následující:
- vytvoření potřebné předlohy pro e-maily a její nastavení v modulu (Nastavení – Globální – E-maily)
- vytvoření předlohy pro stránku pro odhlášení subskripce a její nastavení v modulu (Nastavení – Globální – Další nastavení)
- zpřístupnění zakládání subskripcí ve formulářích modulu v prezentační části, což se provádí zpravidla ve formuláři pro zobrazení příspěvků pod článkem a ve formuláři pro zadání nového příspěvku
- nastavení spouštění výše uvedených plánovaných úloh
Nejprve se tedy vytvoří předloha pro e-maily. Příklad kódu předlohy pro e-maily v HTML formátu je tento:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<h3>Nový příspěvek v diskuzní skupině <!--WTD_DISC(DNAME)--></h3>
<p>Příspěvek: <a href="<!--WTD_DISC(URL)-->"><!--WTD_DISC(NAME)--></a></p>
<p>Autor: <!--WTD_DISC(NICKNAME)--></p>
<p>Vloženo: <!--WTD_DISC(DATE)--> <!--WTD_DISC(TIME)--></p>
<p><!--WTD_DISC(BODY)--></p>
<hr />
Odhlásit zasílání těchto příspěvků můžete klepnutím <a href="<!--WTD_DISC(DEACTURL)-->">zde</a>.
</body>
</html>
Dále se nastaví tato předloha a další parametry ve formuláři Nastavení – Globální – E-maily, jak je znázorněno na následujícím otisku obrazovky.

Pro odhlášení z e-mailu se používá skript /scripts/modules/disc/unsubscribe.php. Předloha pro tento skript se vybírá ve formuláři Nastavení – Globální – Další nastavení, jedná se o pole Předloha pro odhlášení odběru příspěvků.
V předloze mohou být použity kromě statických HTML kódů následující konstrukce:
<!--WTD_IF(BADCODE,"Chybné ID nebo odhlašovací kód.")-->
<!--WTD_IF(DEACTIVATED,"Byl jste odhlášen z odběru příspěvků e-mailem.")-->
Dále je třeba zpřístupnit možnost objednávky zasílání e-mailů ve formulářích v prezentační vrstvě. Ve formuláři pro zadání nového příspěvku postačuje přidat zaškrtávací okénko pro volbu zasílání:
<label for="sendanswers">Zasílat odpovědi</label> <input type="checkbox" name="sendanswers" id="sendanswers" <!--WTD_DISC(SENDANSWERS)--> />
Předpokládá se ovšem, že součástí formuláře pak je i e-mailová adresa:
<input type="text" name="email" id="email" value="<!--WTD_USER(EMAIL)-->" />
Pokud uživatel zaškrtne toto pole, objednávka e-mailů znamená, že se zasílají nové příspěvky z daného vlákna, neboli všechny reakce na právě vkládaný příspěvek.
Druhou možností je umístit kód do formuláře pro zobrazování příspěvků pod článkem, neboli do hlavičky či patičky odpovídajícího WebToDate stylu nastavovaného ve formuláři Nastavení – Předpisy – název předpisu – Zpráva. Příklad takového kódu je následující.
Na adresu <input type="text" name="email" value="<!--WTD_USER(EMAIL)-->" />
zasílat všechny příspěvky <input type="checkbox" name="subscribe_all" value="1" />
<input class="btn" type="submit" name="event_subscribe" value="Zasílat příspěvky" />
Důležité je zde zejména pojmenování tlačítka event_subscribe. Význam zaškrtávacího okénka "zasílat všechny příspěvky" je takovýto:
- Pokud je zaškrtnuto, vytvoří se v tabulce subskripcí jeden záznam, který říká, že uživatel chce dostávat všechny příspěvky k dané zprávě.
- Pokud není zaškrtnuto, vytvoří se v tabulce tolik záznamů, kolik je příspěvků v nejvyšší úrovni a znamená to, že uživatel bude dostávat všechny reakce na již vložené příspěvky, ale nebude dostávat nově vložené komentáře v první úrovni a reakce na ně.
Posledním krokem je pak nastavení časování plánované úlohy Rozesílání diskuzních příspěvků, která rozesílá vlastní e-maily. Vyhledávání nových příspěvků může být při větším množství subskripcí poměrně časově náročná úloha, proto doporučujeme nespouštět tuto úlohu v kratším intervalu než alespoň 15 minut.
Modul nemá žádné administrátorské rozhraní umožňující do tohoto procesu vstoupit a např. prohledávat či odstraňovat tyto e-mailové subskripce. Funkce po prvotní konfiguraci pracuje automaticky, pokud některý uživatel chce zrušit zasílání e-mailů, musí tak udělat sám vyvoláním příslušného URL uvedeného v e-mailu.
Vyhledávání v diskuzích
Součástí modulu je možnost vytvořit vyhledávací stránku pro fulltextové prohledávání diskuzních skupin pomocí skriptu /scripts/modules/disc/search.php. Možnosti této funkce jsou následující:
- Lze vytvořit vyhledávací formulář a stránkovaný seznam nalezených položek
- Vyhledává se v textech příspěvků nebo volitelně s omezením na název příspěvku. Dále lze implementovat vyhledávání ve všech skupinách najednou nebo pouze v jedné skupině.
- Výsledný seznam položek je vždy tříděn podle času sestupně, může obsahovat např. i údaj o tom, do které skupiny příspěvek patří apod.
Pokud chcete vyhledávací stránku implementovat, vytvořte nejprve předlohu. Důležitou část HTML kódu předlohy obsahuje následující příklad:
<form method="get" action="/scripts/modules/disc/search.php">
<table border="0" cellspacing="2" cellpadding="4">
<tr><td colspan="2" class="formtitle">Hledání v příspěvcích</td></tr>
<tr><td colspan="2">
<input type="text" id="searchtext" name="searchtext" value="<!--WTD_DISC(SEARCHTEXT)-->" />
<input type="submit" name="Action" name="Action" value="Hledat" />
</td></tr>
<tr><td>Hledat pouze v názvech zpráv <input type="checkbox" id="searchnamesonly" name="searchnamesonly" value="1" <!--WTD_DISC(SEARCHNAMESONLY)--> /></td></tr>
</table>
</form>
<!--WTD_IF(NOTFOUND,"Žádné příspěvky vyhovující zadaným kritériům nebyly nalezeny.")-->
<div><strong>Nalezené příspěvky <!--WTD_DISC(FROM)--> až <!--WTD_DISC(TO)--> z <!--WTD_DISC(TOTAL)--></strong></div>
<div><!--WTD_DISC(LIST)--></div>
<p><!--WTD_DISC(LISTNAVIG)--></p>
Druhým nutným prvkem je WebToDate styl pro seznam nalezených položek. Příklad tohoto stylu je následující.
Hlavička
<table border="0" cellpadding="2" cellspacing="0" class="descr80">
Tělo
<tr>
<td><a href="<!--WTD_DISC(URL)-->"><!--WTD_DISC(NAME)--></a></td>
<td><!--WTD_USER(NICKNAME)--> <!--WTD_DISC(DATE)--> <!--WTD_DISC(TIME)--></td>
<td>diskuze <a href="<!--WTD_DISC(DURL)-->"><!--WTD_DISC(DNAME)--></a></td>
</tr>
Patička
</table>
Separátor
<tr><td colspan="3"><hr size="1"></td></tr>
Vytvořená předloha a styl se pak v modulu nastaví ve formuláři Nastavení – Globální – Vyhledávání.
Analogii formuláře uvedeného výše v HTML kódu předlohy můžete použít i na jiných stránkách, např. v předloze pro seznam příspěvků v dané skupině, tak zpřístupníte hledání i z jiných stránek než ze samostatné vyhledávací stránky. Pokud chcete navíc omezit hledání na danou skupinu, použijte v takovém formuláři pole
<input type="hidden" name="did" value="<!--WTD_DISC(DID)-->">
Stránky modulu za klíčové slovo <!--WTD_DISC(DID)--> dosazují ID diskuzní skupiny, která je právě zobrazována, čímž je zajištěno, že vyhledávací skript dostane informaci o tom, kterou skupinu má prohledávat.
Tipy pro plánování zátěže a databázové nároky
Pokud se na daném serveru předpokládá vysoký provoz z hlediska komentářů ke článkům, je třeba dostatečným způsobem dimenzovat hardware. Tato funkce může velmi snadno vytvářet větší databázovou zátěž než samotné zobrazování zpráv a dalších stránek vytvořených přímo systémem WebToDate. Diskuze navíc na rozdíl od zobrazování vlastních zpráv nelze cachovat.
Pokud takovýmto hardware nedisponujete, předpokládáte vysokou návštěvnost diskuzí a chcete zachovat funkci komentářů ke článkům, neimplementujte možnost přímého zobrazování komentářů ve stránce se zprávou. Místo toho raději vložte do předlohy pro zprávy kód, který se pouze odkazuje na diskuze k tomuto článku a vypadá zhruba takto:
<a href="/scripts/modules/disc/messages.php?newsid=<!--WTD_F(ID)-->">Diskuze k tomuto článku</a>
Zde se v nové stránce zobrazí seznam existujících příspěvků, lze zde vložit odkaz na přidání nového komentáře atd. Zamezí se tím přinejmenším zobrazování příspěvků těm, které diskuze nezajímají a redukuje se počet dotazů na databázi modulu.
Při provozování diskuzí je vhodné pravidelně kontrolovat velikost databáze, snadno se může stát, že objem dat zbytečně roste velmi podstatným způsobem. V databázi se ukládají nejen samotné příspěvky (ty je zpravidla žádoucí uchovat), ale i další informace, které se mohou stát po čase zbytečnými. Jedná se o následující databázové tabulky:
DISCSUBSCRIPTIONS – objednávky zasílání nových příspěvků e-mailem. Případné odmazávání starých záznamů řeší plánovaná úloha Odstranění starých subskripcí.
DISCNEWITEMS – informace o času posledního shlédnutí seznamu příspěvků k dané zprávě daným uživatelem. Lze selektivně mazat starší příspěvky dle hodnoty sloupce DISCNEWITEMS.LASTACCESS.
XUSER, XUSERGUID – tabulky jsou součástí modulu Registrace a personalizace a uchovávají identifikátory anonymních uživatelů a návazně další údaje. Tyto tabulky rozhodně není doporučeno promazávat přímo, ale součástí modulu Registrace a personalizace jsou plánované úlohy pro odstraňování starých dat.
Avatary
V seznamu diskuzních příspěvků nebo v detailu příspěvku lze zobrazovat avatary, tedy obrázky s ikonami uživatelů. Jedná se o avatary registrovaných uživatelů přebíraných z modulu Registrace a personalizace, modul Diskuze nemá vlastní avatary. Podmínkou pro nasazení této funkce je tudíž:
- Modul Registrace musí být nakonfigurován, využíván a registrační formulář vytvořen tak, aby umožňoval vkládání avatarů.
- Daná diskuze, ve které se mají avatary zobrazovat, musí být v režimu Rozpoznávat registrované uživatele nebo Vyžadovat přihlášení vždy (ale nezávisle na tom, zda je pak nastaveno vyžadování registrace pro všechny stránky diskuze nebo jen pro vkládání příspěvků).
Tělo stylu pro seznam diskuzních příspěvků zobrazující avatary pak může mít zhruba následující kód:
<tr>
<td><strong><a href="<!--WTD_DISC(URL)-->"><!--WTD_DISC(NAME)--></a></strong></td>
<td><!--WTD_IF(HASAVATAR,"<img src="<!--WTD_DISC(AVATARFILE)-->" width="<!--WTD_DISC(AVATARWIDTH)-->" height="<!--WTD_DISC(AVATARHEIGHT)-->" align="baseline"
alt="<!--WTD_DISC(NICKNAME)-->">")--><!--WTD_IF(NOAVATAR,"<i>nemá avatar</i>")--> <!--WTD_DISC(NICKNAME)--></td>
<td><!--WTD_DISC(TNUMOFITEMS)--></td>
<td><!--WTD_DISC(LASTMODIFIED)--></td>
</tr>