Flash Help
Flash
ActionScript
Příklady





Webmaster

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


W3C Validita

      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
prohlédnout


Stáhnout
stáhnout - jen MX [76 kB]






Nahoru

Copyright © Martin Hozík - All rights reserved.
Flash are registered trademark of Macromedia Inc.