Forum de discussion
Forum « Flash et Shockwave » (archives)
Le XML pour les nuls ...
Envoyé: 12 décembre 2004, 9h14 par toph
Merci encore pour ce flot d'explications ... Pour les scripts serveur de création de XML, je plaide coupable. J'ai trop la flemme, même si je conçois sans problème que les routines flash puissent ne pas être aux normes W3C ... Mais si un jour j'ai un peu de temps je m'en irai percer ce secret ...
Et concernant un trip XML, disons que j'en entends parler depuis pas mal de temps et que justement, le fait de ne pas avoir à se galérer à faire de la détection de chaine de caractère ou à gérer une connexion SQl m'avait relativement séduit (forcément, c'était san compter les incompatibilités "macromédiesques") ... Et oui, le XML a l'air vraiment puissant et relativement sousestimé j'ai l'impression... m'enfin, je suis graphiste avant d'être développeur alors, je crois que je vais rester sur flash...
Toujours est-il que pour les Archives je vais livrer ici un exemple de gestion de fichier XML (un livre d'or - tiens comme c'est bizarre) avec download, modification et upload via un PHP...
Sur la Scène :
un bouton appelé "bouton"
un texte dynamique appelé "texte";
Sur la première image, le code suivant :
//creation de l'objet XML
book = new XML();
// ignorer tous les blancs, retours à la ligne et autres trucs qui peuvent planter le décryptage
book.ignoreWhite = true;
// Forcer l'encodage au format URL
book.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
book.onLoad = function(ok) {
// si la connexion se passe bien : on affiche dviserses infos
// telles que le nombre de message du livre et le contenu du XML
if (ok) {
texte.text = "nombre de message : "
+book.childNodes[0].childNodes.length
+"\nContenu du XML : "
+book.toString();
} else {
texte.text = "problème de connexion";
}
};
bouton.onRelease = function() {
// clone le dernier message du livre & modifie chacun des champs
nouveau = book.childNodes[0].childNodes[0].cloneNode(true);
nouveau.attributes.nom = "Toph'";
nouveau.attributes.message = "alors ça, c'est de la balle ça marche même avec plein d'accents : éèaà!ù@";
nouveau.attributes.date = new Date();
nouveau.attributes.titre = "Titre";
// ajoute le nouveau message au début du livre (pour qu'il apparaissent en premier
book.childNodes[0].insertBefore(nouveau, book.childNodes[0].firstChild);
// crée la capsule d'envoi du XML au script serveur de mise à jour : maj_book.php
capsule = new LoadVars();
// création d'une variable (peu importe son nom), au sein de la capsule
// on y stocke le contenu du book sans l'entete XML
capsule.xml = book.childNodes[0];
// envoi et stockage du book de retour
capsule.sendAndLoad("maj_book.php", book);
// attention, l'utilisation de sendAndLoad provoquera obligatoirement le lancement
// de la fonction .onload de l'objet XML (ici book.onLoad). Attention aux boucles sans fin
};
system.useCodepage = true; // Normalement, pas besoin de cette ligne, mais on est jamais trop prudent
book.load("book.xml");
Dans mon fichier XML "book.xml" :
<?xml version= "1.0" encoding= "UTF-8" standalone= "no"?><book><post nom="Moi" titre="premier message" date="aujourd'hui" message="le XML c'est bien" ></book>
Dans mon fichier PHP maj_book.php :
<?
//----------------------------------------------
function ecrire( $fichier,$contenu )
{
$fp = fopen( $fichier, "w");
if ( $fp )
{
$ok = fwrite( $fp, $contenu);
fclose( $fp );
return 1;
}
return false;
}
//-----------------------------------------------
ecrire('book.xml',urldecode($_POST["xml"]));
print(urldecode($_POST["xml"]));
?>
Et là, normalement tout fonctionne. Il faut biensur un serveur apache pour pouvoir exécuter le swf correctement...
Celà-dit, il me reste un problème de taille : la mise en cache du fichier
XML ... ce qui fait qu'une fois la page rechargé, il garde l'ancien XML qu'il avait en cache et ne recharge pas le nouveau modifié ... je cherche dans les header, mais jusque là, je n'ai rien trouvé pour forcer flash à récupérer le nouveau xml et a supprimer l'ancien du cache...
Si tu as une idées Oznog, ce serait bienvenu...
Encore merci et
A plus
Toph'
Réponses
|