Con questo articolo vedremo come poter accompagnare Flash con l' ormai super nota board vBulletin.
Vedremo come creare un SWF che tramite Actionscript 3.0 che chiama un PHP che a sua volta esegue una query al database mySQL. Il PHP restituisce tale valore a Flash che visualizza il numero di utenti registrati del forum ed il nome dell' ultimo registrato.
Se avete appreso bene i contenuti dell' articolo in cui mostravo come utilizzare il nuovo Actionscript 3.0 con PHP e cosa sia laDocument Class in Flash CS3, allora siete pronti per aggiungere un bel modulo in Flash al vostro forum.
Ad esempio, molti di noi usano un cms come sito ' vetrina ' e homepage. Poi il forum è installato in un' altra cartella.
Con questo tutorial potete creare un SWF che ' pesca ' i dati dal database del vostro forum e posizionarlo nella homepage del vostro sito.
Chiaramente poi sta a voi implementare delle animazioni a vostro gusto personale. Io cerco di rimanere sul semplice in modo che tutti possano capire i passi di questo tutorial. Seguitemi...
Creo un FLA che salvo con nome ' utenti.fla ' e gli assegno le misure di 150x80.
Al suo interno ho sullo Stage:
- una MovieClip con nome loading_mc che sarà visualizzata durante il tempo di percorrenza dalla chiamata al PHP fino alla sua risposta. Al suo interno ha una piccola animazione a intermittenza.
- una MovieClip con nome utenti_mc con all' interno un campo di testo che visualizza la scritta ' utenti registrati '. Inoltre ha una piccola animazione al suo interno in modo da far apparire la MovieClip stessa dalla destra verso il centro.
- una MovieClip con nome ultimo_mc con le stesse caratteristiche di utenti_mc ma con la scritta ' ultimo utente registrato '.
- un campo di testo dinamico con nome numero_txt che visualizzerà il numero degli utenti iscritti
- un campo di testo dinamico con nome ultimo_txt che visualizzerà il nome dell' ultimo utente registrato.
Passiamo al codice Actionscript 3.0:
creo la Document class, un file AS che salvo con nome ' Utenti.as ', che chiamerà il primo script PHP per recuperare il numero totale degli utenti iscritti, implementata in questo modo:



package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.utils.Timer;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.events.*;

public class Utenti extends MovieClip
{
private var num_utenti:int;

private var timer:Timer;

private var boo:Boolean=true;

public function Utenti()
{
init();
callServer();
}

private function init():void
{
stage.frameRate=31;
}

private function callServer():void
{
var richiesta:URLRequest=new URLRequest();
richiesta.url='http://www.flepstudio.org/test.php?cachebuster='+new Date().getTime();
var loader:URLLoader=new URLLoader();
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
}

private function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.COMPLETE,completato);
}

private function completato(e:Event):void
{
loading_mc.stop();
loading_mc.visible=false;
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
num_utenti=vars.utenti;
utenti_mc.play();
utenti_mc.addEventListener(Event.ENTER_FRAME,check ing);
}

private function checking(e:Event):void
{
if(e.currentTarget.currentFrame==31)
{
e.currentTarget.removeEventListener(Event.ENTER_FR AME,checking);
display();
var utlimo:Ultimo=new Ultimo(this);
}
}

private function display():void
{
numero_txt.text=num_utenti.toString();

timer=new Timer(250,0);
timer.addEventListener(TimerEvent.TIMER,fade);
timer.start();
}

private function fade(t:TimerEvent):void
{
if(boo)
utenti_mc.alpha=.75;
else
utenti_mc.alpha=1;
boo=!boo;
}
}
}


Poi creo un' altra classe, un file AS che salvo con nome ' Ultimo.as ', che chiamerà il secondo script PHP per recuperare il nome dell' ultimo utente iscritto, implementata in questo modo:



package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.events.*;

public class Ultimo extends MovieClip
{
private var Root:MovieClip;

private var ultimo_utente:String;

public function Ultimo(m:MovieClip)
{
Root=m;
Root.loading_mc.visible=true;
Root.loading_mc.y+=40;
Root.loading_mc.play();

callServer();
}

private function callServer():void
{
var richiesta:URLRequest=new URLRequest();
richiesta.url='http://www.flepstudio.org/ultimo_registrato.php';
var loader:URLLoader=new URLLoader();
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
}

private function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.COMPLETE,completato);
}

private function completato(e:Event):void
{
Root.loading_mc.stop();
Root.loading_mc.visible=false;
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
ultimo_utente=vars.ultimo;
Root.ultimo_mc.play();
Root.ultimo_mc.addEventListener(Event.ENTER_FRAME, checking);
function checking(e:Event):void
{
if(e.currentTarget.currentFrame==31)
{
e.currentTarget.removeEventListener(Event.ENTER_FR AME,checking);
Root.ultimo_txt.text=ultimo_utente;
}
}
}
}
}


Analizziamo il codice:
Classe Utenti.as
Proprietà:
una variabile numerica in cui inserirò il valore che mi passa il PHP ( numero utenti )
private var num_utenti:int;
un Timer per una piccola animazione
private var timer:Timer;
Una variabile di tipo Boolean che servirà sempre per l' animazione
private var boo:Boolean=true;
Metodi
init();
imposto la velocità del frame rate
stage.frameRate=31;
Adesso mi concentro dal metodo completato() in avanti, in quanto il resto che esegue questa classe lo abbiamo già visto quì: Chiamare PHP con Flash CS3
completato();
fermo l' animazione di loading_mc e lo rendo invisibile
loading_mc.stop();
loading_mc.visible=false;
recupero i dati che mi ha restiuito utenti.php ( facendo una query al DB )
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
asegno il valore del PHP alla variabile num_utenti
num_utenti=vars.utenti;
faccio partire la timeline di utenti_mc
utenti_mc.play();
creo un intervallo ENTER_FRAME che controlla il numero del frame attuale di utenti_mc chiamando la funzione checking
utenti_mc.addEventListener(Event.ENTER_FRAME,check ing);
checking();
se il frame corrente è il numero 31
if(e.currentTarget.currentFrame==31)
{
fermo l' intervallo
e.currentTarget.removeEventListener(Event.ENTER_FR AME,checking);
chiamo il metodo display()
display();
istanzio la classe Ultimo ( che vedremo tra poco )
var utlimo:Ultimo=new Ultimo(this);
}
display();
assegno al campodi testo numero_txt il valore della variabile num_utenti
numero_txt.text=num_utenti.toString();
creo un Timer che chiamerà ogni 250 centesimi di secondo la funzione fade()
timer=new Timer(250,0);
timer.addEventListener(TimerEvent.TIMER,fade);
timer.start();
fade();
se la variabile boo è true
if(boo)
assegno un alpha a ytenti_mc pari a 0,75
utenti_mc.alpha=.75;
se invece è false
else
assegno un alpha a ytenti_mc pari a 1
utenti_mc.alpha=1;
inverto il valore di boo
boo=!boo;
Classe Ultimo.as
Proprietà:
una variabile di tipo MovieClip a cui assegnerà la root passandogliela da Utenti.as in modo da potermi riferire alle MovieClip e campi di testo che ho in utenti.fla
private var Root:MovieClip;
una variabile di tipo stringa in cui inserirò il nome dell' ultimo utente registrato che mi ha restituito ultimo.php ( dopo la query al database )
private var ultimo_utente:String;
Come abbiamo già visto in altri casi, il codice all' interno della funzione costruttrice di una classe è la prima cosa che viene eseguita.
Infatti quando da Utenti.as abbiamo istanziato Ultimo.as, nella costruttrice di Ultimo.as abbiamo il seguente codice:
assegno alla variabile Root, la root così posso chiamare le MovieClip che ho sullo Stage
Root=m;
rendo visibile loading_mc
Root.loading_mc.visible=true;
gli spostola sua y di 40 pixels
Root.loading_mc.y+=40;
faccio partire la sua timeline
Root.loading_mc.play();

Adesso andiamo al metodo completato();
fermo la timeline di loading_mc e lo rendo invisibile
Root.loading_mc.stop();
Root.loading_mc.visible=false;
recupero i dati che il PHP mi ha restituito ( una sringa col nome dell' ultimo utente registrato )
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
assegno i dati alla variabile ultimo_utente
ultimo_utente=vars.ultimo;
faccio partite la timeline di ultimo_mc
Root.ultimo_mc.play();
creo un intervallo ENTER_FRAME che controlla il numero del frame attuale di ultimo_mc chiamando la funzione checking
Root.ultimo_mc.addEventListener(Event.ENTER_FRAME, checking);
function checking(e:Event):void
{
se il frame corrente è il numero 31
if(e.currentTarget.currentFrame==31)
{
fermo l' intervallo
e.currentTarget.removeEventListener(Event.ENTER_FR AME,checking);
assegno il testo al campo di testo ultimo_txt
Root.ultimo_txt.text=ultimo_utente;
}
}
Il PHP che utilizzo :
utenti.php

<?php
$dbhost = 'localhost';
$dbuser = 'db_username';
$dbpass = 'db_password';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');

$dbname = 'db_name';
mysql_select_db($dbname);

$query ="SELECT * FROM `vb_user`";
$db_query = mysql_query($query) or die (mysql_error());
$count = mysql_num_rows($db_query);
echo 'utenti='.$count;
?>
ultimo.php

<?php
$dbhost = 'localhost';
$dbuser = 'db_username';
$dbpass = 'db_password';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');

$dbname = 'db_name';
mysql_select_db($dbname);

$query="SELECT * FROM vb_user";
$result=mysql_query($query) or die (mysql_error());

$max=mysql_numrows($result);
$username=mysql_result($result,$max-1,"username");

echo 'ultimo='.$username;
?>
E' sufficiente cambiare: nome utente database, password database e nome database.
Cambiare gli url ai files PHP nelle classi Utenti ( riga 42 ) e Ultimo (riga 38 ).
I due file php devono avere permessi 777.

Fonte