Martin Hozík
hozikm@seznam.cz
ICQ: 323756613

HTML 4.0 validní
|
Flash GuestBook
Poslední dobou jsem zaplaven dotazy, jak vytvořit knihu návštěv ve Flashi.
Dnes si jednu takovou jednoduchou vytvoříme. Jak jsem již zmiňoval v kapitole "FAQ",
Flash samotný z bezpečnostních důvodu nemůže zapisovat do souborů
(podobně jako JavaScript).
Zápis dat tedy budeme muset svěřit nějakému serverovému (pracuje na
serveru) skriptu. Já používám PHP, ale použít můžete i ASP a další.
Hlavní princip Flashové knihy návštěv je v počátečním načtení dat ze
souboru a následné poslání změn PHP skriptu, který je zapíše zpět do
souboru.
Funkce, kterou použijeme je:
loadVariables("zdroj", "cílový MC", [odesílání proměnných] );
Funkce load variables načte ze souboru proměnné a odešle je do cílového
MovieClipu (pokud necháme název prázdný, tak na hlavní časovou osu).
Zároveň ale tato funkce umožňuje, kromě načítání proměnných, proměnné
i posílat.
Pokud definujete do třetí položky POST nebo GET, budou se
proměnné i odesílat (nastaveným způsobem)
Pokud v roletovém menu "Location" vyberete místo "Target" položku "Level",
změní se syntaxe takto:
loadVariablesNum("zdroj". "úroveň načtené animace", [odesílání proměnných] );
Tento způsob má smysl jen tehdy, pokud je načteno více animací pomocí příkazu
loadMovie().
Takže teď k samotnému návodu:
nejprve si vytvoříme formulářové prvky (Input texty) podle
potřeby. Asi nejčastější jsou "Jméno", "Email", "Web"
a "Vzkaz".
Těmto polím přiřadíme nějaké proměnné. Já mám "name", "email",
"web" a "message"
Klíčový snímek, s těmito formuláři zvětšíme na velikost 2 snímků
Dále vytvoříme prázdný MovieClip, vložíme na scénu a pojmenujeme "check"
Vytvoříme novou vrstvu a do prvního snímku definujeme
následující příkazy:
stop();
system.useCodepage = true;
name = "";
email = "@";
web = "http://";
message = "";
loadVariables("book.txt", "check");
Nejprve zastavíme přehrávání animace (vysvětlím později). Dále musíme zakázat kódování Unicode UTF-8. Dělá to totiž značné
problémy s českou diakritikou (nevím proč). Dále jsou deklarovány dříve zmíněné proměnné.
Nakonec zde máme příkaz načítající proměnné ze souboru book.txt do
MovieClipu check. Tento MovieClip zde není pro legraci. Bude
sloužit ke kontrole, zda již bylo stahování dat ze souboru dokončeno či
nikoliv. Tomuto MovieClipu definujeme následující příkazy:
onClipEvent (data) {
_root.Play();
}
Povšimněte si události. Událost "Data" nastane po úspěšném
odeslání proměnných do MovieClipu (viz
řízení animace). Tím máme zaručeno, že animace bude pokračovat až
tehdy, když bude celý obsah souboru načten.
Vytvoříme novou vrstvu a do druhého kl. snímku vložíme Dynamic Text
typu Multiline, který bude zobrazovat načtenou proměnnou ze souboru
(check.book) a povolíme mu zobrazování HTML tagů.
K formulářovým prvkům umístíme tlačítko, kterému definujeme tyto akce:
on (release) {
datum = new Date();
if (name != "" && message != "") {
name = "<p><b><font size=\"11px\" color=\"#D34A33\">"+name+"</font>
zanechal(a) vzkaz "+datum.getDate()+"."+datum.getMonth()+" v "
+datum.getHours()+":"+datum.getMinutes()+"</b></p>";
message = "<p>"+message+"</p><p> </p><p> </p>";
if (email != "@" && email != "") {
email = "<p><u><a href=\"mailto:"+email+"\">"
+email+"</a></u></p>";
} else {
email = "";
}
if (web != "" && web != "http://") {
web = "<p><u><a href=\""+web+"\">"+web
+"</a></u></p><p> </p>";
} else {
web = "";
}
Po stisku tlačítka se nejprve vytvoří objekt Date(), který bude
sloužit k přidání časového údaje do knihy. Dále následuje podmínka,
která kontroluje vyplnění povinných položek (jméno a vzkaz)
Následující příkazy přidávají HTML tagy k hodnotám proměnných name
a message. Jen dodám, že je nutné napsat před každé uvozovky zpětné
lomítko \ (aby nebyly chápány jako ActionScript operátor)
Dále jsou upraveny na odkazy proměnné email a web - pouze
však v případě, že byly vyplněny.
Dále:
check.book = name+email+web+message+check.book;
pridat = check.book;
pridat = escape(pridat);
loadVariables("book.php", "", "POST");
name = "";
email = "@";
web = "http://";
message = "";
}
}
K proměnné check.book je přidán nový vzkaz a obsah knihy je
zkopírován po proměnné pridat.
Hodnota této proměnné je poté zakódována do formátu URL-encoded (viz
Předdefinované funkce). Tím se
zajistí aby nedošlo k chybné interpretaci některých nestandardních znaků
(např. uvozovek). (Dekódování po načtení provede Flash automaticky)
Pak se odešlou proměnné do skriptu book.php pomocí HTTP kanálu
POST.
Dal by se použít i příkaz getURL, ale to by prohlížeč otevíral cílovou
stránku, což v tomto případě není žádoucí. Při použití loadVariables se
odešlou jen proměnné. Nakonec se vymažou formuláře.
Poslední, co musíme udělat je přidat do druhého snímku příkaz:
stop();
PHP stránka book.php pak bude obsahovat následující PHP skript:
<?
if ($pridat != "") {
$fp = fopen("book.txt", "w");
fwrite($fp, "book=$pridat");
fclose($fp);
}
?>
Pokud není proměnná pridat prázdná, otevřít soubor book.txt
pro zápis a zapsat do něj řetězec "book=[hodnota proměnné pridat]"
Proměnné v souboru musí být zapsány jako při posílání metodou GET, tedy ve formátu URL-encoded:
promenna1=texttexttext&promenna2=texttexttext …
Jen podotknu, že animace může být klidně přímo na stránce book.php
(já ji tak mám).
Pozn.:
Než budete používat tuto knihu na svých stránkách, doporučuji změnit název
proměnné "pridat". Pokud by totiž někdo znal název proměnné, mohl
by lehce přepsat celý obsah knihy jednoduchým odkazem book.php?pridat=fuckyou.
Tuto chybu jsem samozřejmě udělal a jedna chytrá hlava jí využila.
BTW: už to nemusíte zkoušet - opravil jsem to...
Internet Explorer Problém
IE ve své nekonečné moudrosti ponechává v cache otevřené stránky a proto
není možné po editaci souboru "book.txt" znovu načítat jeho hodnotu pomocí
loadVariables - změny by se neprojevily
Dokonce i po obnovení [F5] si Flash natáhne hodnotu souboru z cache -
proto taky je vzkaz přidán jak k proměnné přidat (ta se bude
zapisovat), tak i do proměnné check.book (která je zobrazována) a
načítání tak není nutné.
Pokud zavřete okno prohlížeče, a otevřete jej znovu, budou se již data
natahovat ze serveru v pořádku.

prohlédnout

stáhnout - jen MX [76 kB]
|