Bouw een dynamisch gastenboek met XML en ActionScript 3.0

Gastenboeken zijn geweldig om de online-ervaring van uw kijkers te verbeteren. Het vermogen van de kijker om met jou en anderen te praten, te reageren op vragen die je hebt gesteld, commentaar te geven op je werk of gewoon te socialiseren betekent dat een gastenboek een must-have is voor de meeste websites. Laten we eens kijken hoe we ons eigen gastenboek kunnen samenstellen met ActionsScript 3.0, XML en PHP.


Invoering

Er zijn twee manieren om een ​​gastenboek aan te sturen; de meer algemeen gebruikte MYSQL-database of het minder gebruikelijke XML-type. Ze vertrouwen beiden op server-side scripting om te werken, maar het voordeel dat ik zie bij het gebruik van de XML-versie, is het simpele feit dat je je geen zorgen hoeft te maken of je host MYSQL ondersteunt en je ook niet in 3 verschillende programma's hoeft te programmeren. talen. Dus wat krijg je van het lezen van deze tutorial die ik je hoor vragen?

  • U leert programmeren in ActionScript 3.0 (wat me veel tijd kostte om te leren ...)
  • U leert hoe u gegevens uit een XML-bestand krijgt en deze omzet in arrays om in Flash te werken.
  • U leert hoe u deze arrays kunt gebruiken om het tekstveld te vullen.
  • Je leert hoe knoppen te programmeren en een schuifbalk.
  • Ten slotte zul je ook leren hoe je tekst naar xml converteert en deze naar een php-bestand stuurt waar het naar het XML-bestand wordt geschreven.

Nogal een mond vol! Laten we beginnen.

Stap 1 - Aan de slag

Je zou al moeten weten hoe je flash moet openen, of in ieder geval hoop ik dat je dat doet ... Je kunt flash instellen zoals je wilt, er zijn geen specifieke vereisten voor Frame Rate of Stage Dimensions, maar zorg ervoor dat je het hebt ingesteld op "ActionScript 3.0" . Als je door wilt gaan en me woord voor woord wilt kopiëren, laat ik je zien hoe de mijne is opgezet (hoe leuk).

Stap 2 - Stileer

Zoals je kunt zien aan de afbeelding hieronder, heb ik fantastische creatieve vaardigheden! Dit is het punt waarop we het gastenboek ontwerpen, of naar het moderne tijdperk gaan, een gastcomputer of een gastentoestel. Ik ben er zeker van dat je er beter in zult slagen de jouwe professioneler te laten lijken dan de mijne, maar alleen voor degenen die nieuw zijn om te flitsen, zal ik snel doornemen hoe ik mijn unieke ontwerp heb gemaakt.

Selecteer het gereedschap "Rechthoek", klik op "Eigenschappen", stel de "Lijn" in op "3" en de "Hoekradius" op "10". Klik en sleep om uw rechthoek te maken. Maak er nog een andere kleinere in een andere kleur, dit is waar de berichten worden weergegeven. Selecteer de nieuwe vorm en druk op "F8" om deze naar een filmclip te converteren. Ga vervolgens naar "Filter" en pas een "Slagschaduw toe". Trek dan nog een andere rechthoek naar de zijkant; dit is waar de invoervelden naartoe gaan.

Stap 3 - De XML laden

Dus we wagen voor het eerst het onbekende in! Begin met het maken van een nieuw bestand met de extensie ".xml". Binnenin schrijf je het volgende:

  

Sla het bestand op als "messages.xml" in dezelfde map als je flash-bestand. Maak nu, terug in flash, een nieuwe laag met de naam "Actions" en druk op "F9" om het "Actions Panel" op te roepen. Het zal veel voordeliger voor je zijn als je de code invoert die ik je geef met de hand in plaats van het te kopiëren en te plakken, dus met de hand:

 var urlRequest: URLRequest = new URLRequest ("messages.xml"); var urlLoader: URLLoader = new URLLoader (); urlLoader.addEventListener (Event.COMPLETE, fileLoaded); urlLoader.load (urlRequest);

Dit stukje code is het opzetten van een variabele genaamd "urlRequest" die het pad naar ons ".xml" -bestand houdt. Vervolgens wordt een andere variabele met de naam "urlLoader" gemaakt die wordt gebruikt om ons bestand te laden. De "addEventListener" vertelt flash om te wachten totdat de "url" is geladen voordat de "fileLoaded" -functie wordt uitgevoerd. De laatste regel is gewoon "urlLoader" vertellen om "urlRequest" te laden, dat is ons ".xml" bestand.

 var myXML: XML = nieuwe XML (); myXML.ignoreWhitespace = true; var xmlList: XMLList;

Deze regels maken een nieuwe variabele genaamd "myXML" aan die alle gegevens uit ons ".xml" -bestand gaat opslaan. Vervolgens wordt de variabele "ignoreWhitespace" genoemd, wat niet veel doet, maar het helpt bij de validatie. De laatste regel maakt een variabele genaamd "xmlList" die de berichten en informatie opslaat die we in arrays zullen extraheren.

Stap 4 - Arrays

 var arrayName: Array = new Array (); var arrayTitle: Array = new Array (); var arrayDate: Array = new Array (); var arrayFull: Array = new Array ();

Dit stukje code stelt de arrays in die alle gegevens bevatten. Voor nu zou het het beste zijn om de jouwe hetzelfde te houden als de mijne, zodat je later geen fouten meer krijgt. Merk op dat "Full" is wat ik heb gebruikt om het lange bericht dat de gebruiker schrijft weer te geven.

 function fileLoaded (event: Event): void myXML = XML (event.target.data); xmlList = myXML.children ();

Dit is de functie "fileLoaded" die wordt aangeroepen wanneer het ".xml" -bestand is geladen. In de functie geven we de variabele "myXML" de gegevens uit het ".xml" -bestand. Vervolgens geven we 'xmlList' de gegevens die zijn verwijderd uit 'myXML', alles behalve de 'berichten'-houder die we eerder hebben geschreven. Uiteraard is er niets anders behalve dat "xmlList" leeg zal zijn.

 for (var i: int = 0; i 

Dit is het belangrijkste deel van de functie. Het doorloopt de gegevens die zijn opgeslagen in "xmlList" en plaatst deze in verschillende arrays. De code begint met een "voor" lus, die zegt: terwijl de variabele "i" kleiner is dan "xmlList.length ()", voer deze code uit. "XmlList.length ()" zal zijn hoeveel mensen berichten hebben verzonden , dus als deze gelijk is aan 5, wordt deze code vijf keer uitgevoerd.

Vervolgens maken we voor elk kenmerk (naam, titel, datum en het bericht) een "String-variabele" die gelijk is aan het overeenkomstige kenmerk in de "xmlList". De eerste keer dat de code wordt uitgevoerd, op voorwaarde dat er enkele vermeldingen zijn, is "i" gelijk aan 1 en is "xmlName" gelijk aan de naam die ooit als eerste voorkomt in "xmlList". De tweede keer dat het doorloopt, is "i" gelijk aan 2 en is "xmlName" gelijk aan de naam die ooit de tweede is in "xmlList".

Wat dan gebeurt, is dat elk van de variabelen aan de arrays wordt toegevoegd. De waarde van "xmlName" wordt toegevoegd aan "arrayName" door de ".push" -methode. Dit betekent dat tijdens het doorlopen van de code alle namen die zijn opgeslagen in "xmlList" worden toegevoegd aan de array. Hetzelfde geldt voor titel, datum en volledig.

 if (i == xmlList.length () - 1) updateText (); 

Dit is het laatste deel van de functie. Het geeft aan dat als "i" ooit gelijk is aan het totale aantal vermeldingen - 1, de functie "updateText" uitvoert.

Stap 5 - De berichten weergeven

Nu, na dat slopende stuk codering, komen we iets gemakkelijker, zegt hij ...

Gebruik op een nieuwe laag genaamd "textBox" het "Tekstgereedschap" om een ​​veld "Invoertekst" over de lichtere rechthoek te maken. Zorg ervoor dat u het vak "Render tekst als HTML" onder "Eigenschappen> Teken" en geef het een "Exemplaar naam" van "messageText".

Ga terug naar het actiescherm en onder het codetype het volgende:

 messageText.htmlText = "Plaats als eerste!"; var maximumMessages: Number = 5; var currentMessages: Number = 0; function updateText () messageText.htmlText = "";

De eerste regel is dat niemand iets heeft geschreven. De variabele "maximumBerichten" is het aantal berichten dat we tegelijkertijd willen weergeven. De "currentMessages" is het laatste bericht dat in het tekstveld is weergegeven. Vervolgens starten we de functie die wordt genoemd nadat de arrays zijn voltooid. Het eerste wat dit doet is het tekstveld leegmaken omdat we niet altijd willen dat die boodschap bovenaan staat.

 for (var i = currentMessages; iNaam: "+ arrayName [i]); messageText.htmlText + = ("Titel: "+ arrayTitle [i]); messageText.htmlText + = ("Datum: "+ arrayDate [i]); messageText.htmlText + = ("Bericht: "+ arrayFull [i]); messageText.htmlText + = (" ... "); currentMessages = i;

Dit is een andere "voor" -lus. Deze keer gebruiken we het om het veld "messageText" in te vullen. Hier stellen we "i" in op gelijk "currentMessages", die op dit moment gelijk is aan 0. Als "i" lager is dan "maximumMessages", wat gelijk is aan 5, voeren we deze code uit. Het zal daarom 5 keer lopen.

De eerste keer dat het wordt uitgevoerd, wordt 'Naam:' toegevoegd aan 'messsageText' en vervolgens de naam in de matrixName-array op de plaats van 'i', die gelijk is aan 0. Dit doet u voor titel, datum en volledig voor eindigend met een rij stippen om de berichten te scheiden. De tweede keer dat het doorloopt, is "i" één groter, dus voegt het meer tekst toe met resultaten na de eerste reeks in de arrays. Aan het einde stellen we "currentMessages" in op "i".

Stap 6 - Componenten

Op dit punt gaat het waarschijnlijk goed met je als je geen hoofdpijn hebt. Laten we iets eenvoudig doen. Ga naar "Window> Components" en sleep uit de lijst twee "Buttons" en een "UIScrollBar". Plaats ze als volgt:

Ga vervolgens naar "Window> Component Inspector" en selecteer met de linkerknop het "label" en hernoem het "Previous". Met de knop aan de rechterkant, hernoem het "Volgende". Definieer vervolgens de instantienaam van de "Vorige" knop als "prevBt", de "Next" knop als "nextBt" en de "UIScrollBar's" instantienaam als "scroller".

Nu, onder de "currentMessage = i;" stuk code schrijf het volgende:

 scroller.scrollTarget = berichtText;

Dit vertelt de "UIScrollBar" om te fungeren als een scroller voor "messageText", ook al zijn er te veel woorden om in de aangewezen spatie te passen. We moeten nu controleren of de knoppen worden ingedrukt, dus onder alle code schrijven:

 nextBt.addEventListener (MouseEvent.MOUSE_UP, nextFunc); prevBt.addEventListener (MouseEvent.MOUSE_UP, prevFunc);

Dit voegt een luisteraar toe om te zien of de muiscursor is losgelaten over de knoppen (als ze zijn ingedrukt) en als ze dat hebben, roept de luisteraar een functie op die we in de volgende stap zullen schrijven.

Stap 7 - Codering van de knoppen

Als op de knop "Volgende" is gedrukt, willen we dat de "berichttekst" verwijdert wat erin staat en de volgende berichten laadt. Als op de knop "Vorige" wordt gedrukt, willen we dat de vorige berichten worden geladen. Onderaan alle code schrijf:

 function nextFunc (event: MouseEvent) messageText.htmlText = ""; maximumMessages + = 5; updateText (); prevBt.enabled = true; 

Dit is de "Volgende" functie. Wanneer geactiveerd, wist het het tekstveld, voegt 5 toe aan "maximumMessages", voert de functie "updateText" uit en schakelt de "Vorige" knop in. Door 5 toe te voegen aan "maximumMessages" en de "updateText" -functie uit te voeren, laadt het de volgende 5 berichten in het tekstvak omdat nu "maximumMessages" gelijk is aan 10 en "currentMessage" gelijk is aan 5 vanaf de laatste keer dat de functie liep. Daarom zal het tekstveld de volgende 5 berichten in de arrays weergeven.

 function prevFunc (event: MouseEvent) messageText.htmlText = ""; maximumMessages- = 5; currentMessages- = 10; nextBt.enabled = true; updateText (); if (currentMessages<=5)  prevBt.enabled=false;  

Dit is de functie voor de knop "Vorige". Hierdoor wordt het tekstveld opnieuw gewist en worden "maximumBerichten" met 5 en "currentMessages" met 10 afgetrokken. Dit is het geval wanneer de functie "updateText" wordt uitgevoerd en de vorige 5 vermeldingen worden weergegeven. Het maakt ook de "Volgende" knop mogelijk. Als "currentMessage" kleiner is dan of gelijk aan 5, is de knop "Vorige" uitgeschakeld, zodat de gebruiker geen valse informatie kan weergeven; er zijn geen berichten lager dan 0.

Vlak onder "function updateText () " schrijf:

 if (arrayName.length <= maximumMessages)  maximumMessages = arrayName.length; nextBt.enabled = false;  if (currentMessages < 0)  currentMessages = 0; maximumMessages = 5; nextBt.enabled = true; 

De eerste "als" is om te controleren of het totale aantal berichten kleiner of gelijk is aan het maximum. Als dit het geval is, geven we de laatste vermelding weer en willen we niet dat de gebruiker op de knop "Volgende" kan klikken, dus we schakelen deze uit. Het maakt ook "maximumMessages" gelijk aan het totale aantal berichten, zodat we geen extra onnodige informatie weergeven.

De tweede "als" is om te controleren of we naar min-nummers zijn gegaan. Als dit het geval is, wordt standaard teruggegaan naar de start en worden de eerste 5 vermeldingen weergegeven. Ook na deze code:

 if (i == xmlList.length () - 1) updateText (); 

voeg het volgende toe:

 if (i> 4) nextBt.enabled = true; 

Dit controleert of er meer dan 5 items zijn. Als er dan zijn, schakelen we de knop "Volgende" in. Onthoud dat dit 4 is omdat "i" begint bij 0 niet 1. Eindelijk, bovenaan, voer het volgende in:

 nextBt.enabled = false; prevBt.enabled = false;

Dit schakelt beide knoppen uit.

Stap 8 - Eerste test

Oké, open je ".xml" bestand en typ:

  Chris Hallo 7e dit is erg gecompliceerd = - ( 

Typ het tussen de tag die we eerder hebben geschreven, dus het volledige ".xml" -bestand mag alleen bevatten:

   Chris Hallo 7e dit is erg gecompliceerd = - (  

Sla de ".xml" op en test het flash-bestand en u zou dit moeten zien:

Stap 9 - Dozen indienen

Nu we het eerste deel hebben laten werken, zonder pauze, laten we het tweede deel binnenstomen.

Het is tijd om het gebied te creëren dat de gebruiker invult om een ​​bericht in te dienen. Gebruik de "Text Tool" en maak 4 "Static Text Fields" door "Post a Message", "Name:", "Title:" en "Message:".

Maak vervolgens 3 "Invoertekstvelden" en plaats er een naast elk element dat u wilt invullen. Zorg ervoor dat het invoervenster "Bericht:" groter is dan de andere.

Selecteer het tekstveld waar de gebruiker zijn naam invoert en geef deze een "Exemplaarnaam" van "inputName". Doe dit voor de titel- en berichtvakken en geef hun toestandsnamen "inputTitle" en "inputFull". Op al mijn drie vakken heb ik de selectievakjes "Selecteerbaar" en "Omranding om tekst heen" geselecteerd. Open vervolgens het paneel "Componenten" opnieuw en sleep een andere knop naar buiten. Deze keer open je het "Component Inspector" paneel en verander je zijn "label" in "Submit" en zijn "enabled" in false. Geef het een exemplaarnaam van "submitBt".

Stap 10 - Variabelen instellen

 inputName.text = ""; var newName: String = ""; inputTitle.text = ""; var newTitle: String = ""; inputFull.text = ""; var newFull: String = "";

Plaats deze code onder al uw andere code. Dit betekent dat elk van de "invoervelden" die we in de vorige stap hebben gemaakt leeg is. Het maakt ook een variabele aan voor elk element en specificeert het als een "String" met de waarde van niets.

 function onEnterFrame (ev: Event): void if (inputName.text! = "" && inputTitle.text! = "" && inputFull.text! = "") submitBt.enabled = true; 

Plaats deze functie na alle code. Deze functie controleert of alle "invoervelden" tekst bevatten. "! =" betekent niet gelijk en "&&" zegt "en". Dus de functie zegt: als alle "invoervelden" niet leeg zijn (wat betekent dat de gebruiker ze heeft ingevuld), schakel dan de "submitBt" -knop in. Nu moeten we deze functie de hele tijd kunnen aanroepen, dus we hebben nog een luisteraar nodig.

 addEventListener (Event.ENTER_FRAME, onEnterFrame);

Dit zegt dat elke keer dat een flits in het frame komt (wat voor mij 30 keer per seconde is) de functie "onEnterFrame" wordt aangeroepen.

Stap 11 - Datum

Nu de knop Verzenden actief is, moeten we controleren of erop is geklikt, dus we hebben nog een luisteraar nodig.

 submitBt.addEventListener (MouseEvent.MOUSE_UP, sendData);

Wanneer deze listener wordt vrijgegeven, roept deze de functie "sendData" op, dus nu moeten we de functie schrijven.

 functie sendData (event: MouseEvent): void var dateToday: Date = new Date (); var thismonth: uint = dateToday.getMonth (); var maand: Array = new Array ('Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November ','December'); var dateStr: String = (dateToday.getDate () + "" + maand [thismonth] + "" + dateToday.getFullYear ());

De eerste regel is het openen van de functie. We stellen dan "dateToday" in als een variabele en als ik dan onmiddellijk "dateToday" traceer, zou het tonen "Fri May 5 10:07:32 GMT + 0100 2009".

De volgende regel stelt de variabele "thismonth" in als het nummer dat gelijk is aan de huidige maand die is opgeslagen in "dataToday". Zoals we momenteel in mei zijn, wat de vijfde maand is, als ik "thismonth" zou traceren zou het 4 antwoorden, omdat het begint bij 0, niet bij 1. We maken vervolgens een nieuwe array en slaan alle maanden op volgorde op. Dan gaat de "dateStr" de laatste datum opslaan die in het gastenboek zal worden getoond.

"dateToday.getDate ()" extraheert het gehele getal van de huidige dag, dus voor de 5e, zal het 5 extraheren. Vervolgens zetten we de waarde van de "maand" -array in die gelijk is aan "thismonth", dus het ruilt een getal voor een reeks van de maand. Vervolgens haalt het "getFullYear ()" het huidige jaar in viercijferig formaat. Dus als we nu "dateStr" traceren, krijgen we "5 mei 2009".

Stap 12 - Nieuwe XML maken

Nu de gebruiker op submit heeft gedrukt, moeten we de details in xml-indeling omzetten zodat ze naar het ".xml" -bestand kunnen worden geschreven.

 newName = inputnaam; newTitle = inputTitle.text; newFull = inputFull.text;

Hiermee worden de variabelen die we eerder hebben gedefinieerd, gelijk aan wat de gebruiker in de vakjes heeft ingevoerd.

 var newItem: XML = XML (""+ newName +""+ newTitle +""+ dateStr +""+ nieuwFull +"");

Dit ontmoedigende stukje code is het creëren van een nieuwe variabele genaamd "newItem" die xml-gegevens gaat opslaan. We stellen het vervolgens gelijk aan een xml-geformatteerde reeks. We beginnen de string met ""die alle details voor de gebruiker zal bevatten. Vervolgens zetten we de naam, de titel, de datum en de volledige variabelen die we eerder hebben gemaakt, af met"".

 myXML.appendChild (nieuw item);

We gebruiken nu "appendChild" om een ​​"newItem" toe te voegen aan de "myXML" die alle informatie voor het XML-bestand opslaat.

Stap 13 - De XML verzenden.

Nu "myXML" is bijgewerkt met het nieuwe bericht, moeten we het naar php sturen.

 var request: URLRequest = new URLRequest ("messages.php"); request.data = myXML; request.contentType = "text / xml"; request.method = URLRequestMethod.POST;

Hier creëren we een nieuwe variabele genaamd "request" die de locatie van ons php-bestand vasthoudt. We hebben dit bestand nog niet gemaakt, maar ik kan je vertellen wat we het zullen noemen (geluksvogel!). We bewaren het in dezelfde map als al onze bestanden en noemen het "messages.php". De volgende regel vertelt het "verzoek" dat het de informatie binnen "myXML" verstuurt. We vertellen het vervolgens dat deze gegevens in "XML" -formaat zijn en dat we "post" gebruiken om de gegevens te verzenden.

 var loader: URLLoader = new URLLoader (); loader.load (verzoek); loader.addEventListener (Event.COMPLETE, loaderDone); 

Nu maken we een nieuwe "loader" om de verzending van de gegevens aan te kunnen, net zoals eerder toen we de gegevens ontvingen. We voegen een luisteraar toe om te controleren of de gegevens zijn verzonden en zo ja, dan wordt de "loaderDone" -functie geactiveerd.

Stap 14 - Flash vernieuwen.

Voordat we naar php gaan, is er één laatste ding dat we moeten doen binnen flash:

 functie loaderDone (evt: Event): void arrayName = []; arrayTitle = []; arrayDate = []; arrayFull = []; inputName.text = ""; inputTitle.text = ""; inputFull.text = ""; submitBt.enabled = false; maximumMessages = 5; currentMessages = 0; messageText.htmlText = ""; urlLoader.load (urlRequest); 

Met deze functie worden de arrays gewist, worden de invoertekstvelden gewist en worden de berichten uit het berichtvenster gewist. Het vertelt ook "urlLoader" om het XML-bestand opnieuw te laden. Dit activeert dan het gastenboek om terug te gaan naar het begin, herlaad het xml-bestand dat ons nieuwe item heeft, vul de arrays opnieuw en toon de eerste 5 berichten opnieuw.

Stap 15 - Verhuizen naar PHP

Nu we klaar zijn met flash, sla het op en publiceer de nieuwe versie. Open een nieuw php-bestand met de naam "messages.php".

 

Deze code maakt de variabele "xml" en wijst deze toe aan de waarde van de gegevens die door de flitser zijn verzonden. Vervolgens wordt de variabele "file" gemaakt waarin de locatie van het XML-bestand wordt opgeslagen. "fopen" vertelt php om het bestand te openen, "fwrite" gebruikt dan "bestand" om daarin de inhoud van de variabele "xml" te schrijven. "fclose" sluit dan het XML-bestand met het nieuwe bericht veilig erin opgeslagen, klaar om opnieuw te worden gelezen door het flash-gastenboek.

Conclusie

Upload tenslotte de bestanden naar uw server! Onthoud dat deze niet op je harde schijf werken, tenzij je php hebt geïnstalleerd. Zoek het gastenboek op en kijk of het werkt, hopelijk wel! Bedankt voor je tijd, ik hoop dat je iets nuttigs hebt geleerd!