Je voulais apporter mon grain de sel sur ce système de communication en Flash/PHP.
Pas mal de procédés existent afin de faire communiquer Flash avec un langage serveur. J'en utilise principalement deux :
- La communication XML
- Le Remoting (cela peut être AMFPHP par exemple)
Pour le Remoting je préfère en parler une autre fois car bien qu'il soit pour moi un des procédés les plus propres, il est également plus difficile à mettre en place.
Communication XML :
Le principe :
Le principe de la communication XML est simple. Flash va charger un fichier XML se situant sur votre serveur web. Une fois ce chargement effectué, vous n'avez plus qu'à traiter les données dans vos clips.
Coté Client (en AS2) :
Prenons un exemple simple, je veux charger des news dans un champ texte.
Pour cela je dispose sur mon serveur du fichier "news.xml".
Je vais demander à Flash de me charger ce fichier. Quand il aura terminé, il devra me copier le contenu dans mon champs texte.
Je considère que dans votre scène vous avez une occurrence d'un champ texte qui s'appelle mesNews.
On commence par définir notre variable de notre fichier XML :
Comme Blarg l'a si bien expliqué, Flash fonctionne de manière asynchrone. Cela veut dire que pour certaines fonctions en ActionScript, le résultat ne sera pas directement disponible après le lancement d'une fonction. Il faut attendre ce qu'on appelle un évènement. Il est préférable que les évènements soient définis avant de lancer ce genre de fonction.
Ici nous attendons que le chargement soit terminé avant de pouvoir traiter notre fichier XML, et nous devons définir ce qu'il se passe lorsque l'évènement 'Chargement' est terminé :
Il faut maintenant lancer la fonction qui permet de charger le fichier XML.
Voilà, vous compilez et vous placez votre swf au même endroit que votre fichier XML, et normalement vous verrez apparaitre les news dans votre champ texte en Flash.
Bien sûr cet exemple est un bout de script simple, mais il est possible de manœuvrer votre chargement XML (ainsi que vos clips) avec de l'orientée objet
Et le PHP dans tout ça ?
Et bien maintenant que vous savez charger un fichier xml, vous pouvez très bien via php demander par exemple la liste des news au sein d'une Base de Données et la retranscrire au format XML (pensez à mettre votre fichier .xml au format .php ).
Donc voici un exemple de mon fichier news.php
Pas mal de procédés existent afin de faire communiquer Flash avec un langage serveur. J'en utilise principalement deux :
- La communication XML
- Le Remoting (cela peut être AMFPHP par exemple)
Pour le Remoting je préfère en parler une autre fois car bien qu'il soit pour moi un des procédés les plus propres, il est également plus difficile à mettre en place.
Communication XML :
Le principe :
Le principe de la communication XML est simple. Flash va charger un fichier XML se situant sur votre serveur web. Une fois ce chargement effectué, vous n'avez plus qu'à traiter les données dans vos clips.
Coté Client (en AS2) :
Prenons un exemple simple, je veux charger des news dans un champ texte.
Pour cela je dispose sur mon serveur du fichier "news.xml".
<?xml version="1.0" encoding="UTF-8" ?>
<ListeNews>
<News id="0" nom="Shao" date="01/10/08" contenu="ceci est un exemple de news"/>
<News id="1" nom="Bidule" date="31/12/08" contenu="ceci est 2e exemple de news"/>
<News id="2" nom="Truc" date="01/10/08" contenu="ceci est un 3e exemple de news"/>
</ListeNews>
Je vais demander à Flash de me charger ce fichier. Quand il aura terminé, il devra me copier le contenu dans mon champs texte.
Je considère que dans votre scène vous avez une occurrence d'un champ texte qui s'appelle mesNews.
On commence par définir notre variable de notre fichier XML :
var fichierXML:XML = new XML() ;
fichierXML.ignoreWhite = true ;
Comme Blarg l'a si bien expliqué, Flash fonctionne de manière asynchrone. Cela veut dire que pour certaines fonctions en ActionScript, le résultat ne sera pas directement disponible après le lancement d'une fonction. Il faut attendre ce qu'on appelle un évènement. Il est préférable que les évènements soient définis avant de lancer ce genre de fonction.
Ici nous attendons que le chargement soit terminé avant de pouvoir traiter notre fichier XML, et nous devons définir ce qu'il se passe lorsque l'évènement 'Chargement' est terminé :
fichierXML.onLoad = function(success:Boolean)
{
//On vérifie que le chargement s'est bien passé
if(success)
{
//On récupère le nombre de news que l'on chargé
var nbNews:Number = this.firstChild.childNodes.length ;
//On effectue une boucle dans laquelle on va parcourir l'ensemble de nos news au sein de notre fichier XML
for(var i:Number =0 ; i<nbNews ; i++)
{
mesNews.text += "News "+i+"\n" ;
mesNews.text += " Auteur : "+this.firstChild.childNodes[i].attributes.nom+"\n" ;
mesNews.text += " Date : "+this.firstChild.childNodes[i].attributes.date+"\n" ;
mesNews.text += " Contenu : "+this.firstChild.childNodes[i].attributes.contenu+"\n" ;
mesNews.text += "\n" ;
}
}
else
{
mesNews.text = "Erreur lors du chargemment du fichier XML" ;
}
}
Il faut maintenant lancer la fonction qui permet de charger le fichier XML.
fichierXML.load("news.xml") ;
Voilà, vous compilez et vous placez votre swf au même endroit que votre fichier XML, et normalement vous verrez apparaitre les news dans votre champ texte en Flash.
Bien sûr cet exemple est un bout de script simple, mais il est possible de manœuvrer votre chargement XML (ainsi que vos clips) avec de l'orientée objet
Et le PHP dans tout ça ?
Et bien maintenant que vous savez charger un fichier xml, vous pouvez très bien via php demander par exemple la liste des news au sein d'une Base de Données et la retranscrire au format XML (pensez à mettre votre fichier .xml au format .php ).
Donc voici un exemple de mon fichier news.php
Code PHP :
<?php
//connexion a la base de données :
$db = mysql_connect('maBase', 'monLogin', 'monPass') or die('Connexion impossible') ;
mysql_select_db('maBase',$db) ;
//requête qui liste toutes les news :
$req = "SELECT m.pseudonyme, n.date_news , n.article FROM news n,membre m WHERE n.membre=m.id_membre" ;
$res = mysql_query($req) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
//affichage du resultat sous format XML :
echo"<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \n" ;
echo"<ListeNews>\n" ;
for($i = 0; $i < mysql_num_rows($res); $i++)
{
echo '<News ' ;
$row = mysql_fetch_row($res) ;
echo 'nom="'.$row[0].'" ' ;
echo 'date="'.$row[1].'" ' ;
echo 'contenu="'.$row[2].'"/>' ;
}
echo '</ListeNews>' ;
?>
Voilà je complèterai avec aussi une version AS3 du chargement XML (qui je pense serait plus d'actualité ^^).