Gérer des noms et des liens URL à partir d'un fichier XML

unidesign Messages postés 3 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 31 janvier 2007 - 31 janv. 2007 à 06:01
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 - 31 janv. 2007 à 19:27
Bonjour à tous et merci à l'avance pour votre aide!
Je suis un jeune intégrateur Web et je m'intéresse de plus en plus à Flash et ses possibilités avec les fichiers XML.


Voilà ce que j'aimerais faire...J'ai cherché un peu partout mais sans vraiment de succès...


Si je ne suis pas assé clair, n'hésitez pas à me le dire.


J'ai créé une carte de la province du Québec (Canada) dans un fichier Flash.
( Voir cette carte : http://www.unidesign-web.com/test/ )


La carte est divisée en 75 associations.


- J'aimerais créer un bouton sur chacune de ces associations qui feraient un lien vers leurs sites Web.
- J'aimerais que quand la souris survole le bouton, le nom de cette dite association soit affiché afin que les gens sachent de quelle association il s'agit. (Exemple: Laval-Montréal)


La création du bouton ne me cause aucun problème. Le problème c'est que le nom et le URL de ces associations risque de changer plusieurs fois et j'aimerais pouvoir éditer ces données dans un fichier XML externe qu'un de mes ami programmeur pourrait ensuite gérer avec du PHP dans une console d'administration.


J'ai pensé créer un fichier XML "pcquebec.xml" et de lui insérer les codes suivants :


-------- Début du code XML ------------
<?xml version="1.0" encoding="UTF-8"?>

http://www.url.com" />
http://www.url.com" />
...
http://www.url.com" />

-------- Fin du code XML ------------


Ensuite je sais que dois faire communiquer mon Flash avec ce fichier XML.

Voilà, tout ce que je sais, c'est que je dois inscrire ce code dans la première image du Flash pour qu'il puisse lire le fichier XML :


-------- Début du code ActionScript ------------
carteXML = new XML();
carteXML.ignoreWhite = true;
carteXML.load("pcquebec.xml");
carteXML.onLoad = function(flag) {
  if (flag) {
    // Le code qui me manque?
  }
}
-------- Fin du code ActionScript ------------


Je ne sais pas ce que je dois faire ensuite.


- Comment dire à mes boutons d'aller chercher le URL dans le fichier XML?
- Comment faire pour que le nom de l'association, qui doit apparaitre quand je survole mon bouton, soit pris à partir du fichier XML?


J'espère que vous pourez m'aider. Je suis très embêté par ce problème technique et j'espère de tout coeur y trouver une solution.


Merci d'avoir pris le temps de lire mes questions.

un
IDesign

4 réponses

cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
31 janv. 2007 à 09:03
Bonjour,
Voici quelques éléments de réponse :



Premièrement, revoir la structure de ton XML


soit ceci



<?xml version= "1.0" encoding="UTF-8"?>

   http://www.url1.com
" />
   http://www.url2.com
" />
...




soit cela



<?xml version="1.0" encoding="UTF-8"?>

   
      <nom>Nom X</nom>
      <lien>http://www.url1.com</lien>
   
   
      <nom>Nom X</nom>
      <lien>http://www.url1.com</lien>
   




Disons qu'on choisi la première solution si il n'y a que le nom et le lien à mettre,ce sera la solution la plus facile à à lire (visuellement)...



Ensuite dans flash :



Asso_Noms =new Array();
Asso_Liens=new Array();
carteXML = new XML();
carteXML.ignoreWhite = true;
carteXML.onLoad = function(flag) {
  if (flag) {
    for (i=0;i<carteXML.firstchild.childNodes.length;i++){
       Asso_Noms.push(carteXML.firstchild.childNodes[i].attibutes.nom)
       Asso_Liens.push(carteXML.firstchild.childNodes[i].attibutes.lien)
    }
  }
}

carteXML.load("pcquebec.xml");


A ce point, tu disposes de deux tableaux contenant les noms et les urls des associations.


Tu donnes ensuite à chaque bouton un numéro de référence vers ces deux tableaux (Attention, le premier élément d'un tabeau est le 0 et pas le 1)
et donc :leBouton0.text Asso_Noms[0], leBouton1.text Asso_Noms[1],...
lien url si on clique le bouton
getURL(Asso_Liens[0]),getURL(Asso_Liens[1]),...

Voila, j'espère que ces pistes pourront t'aider.
Remarque : je ne sais pas tester mon code pour le moment, donc on n'est jamais à l'abis d'une erreur dans le script... mais la base est bonne.

@+
0
unidesign Messages postés 3 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 31 janvier 2007
31 janv. 2007 à 13:52
Merci beaucoup!

Je n'aurais pas pu souhaiter mieux comme réponse.

Je vais essayer ça tout de suite et te revenir avec les résultats.

Encore merci!

un
IDesign
0
unidesign Messages postés 3 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 31 janvier 2007
31 janv. 2007 à 17:20
Bonjour,


J'ai essayé avec les codes que tu m'as donnés. J'ai reformaté mon fichier XML et mis les codes que tu m'avais suggérés dans mon fichier Flash.


Je ne dois pas faire quelques choses de correctes, car cela ne semble pas fonctionner. Sans doute que mon lien getURL est mal écrit ou peut-être que je ne l'ai pas mis au bon endroit.


Mon XML est comme ceci:


-------- Début du code --------------
<?xml version="1.0" encoding="UTF-8"?>

   http://www.pcquebec.ca/001" />
   http://www.pcquebec.ca/002" />

-------- Fin du code ----------------




J'ai mit ce code dans la première image du Flash :


-------- Début du code --------------
Asso_Noms=new Array();
Asso_Liens=new Array();
carteXML = new XML();
carteXML.ignoreWhite = true;
carteXML.onLoad = function(flag) {
  if (flag) {
    for (i=0;i<carteXML.firstchild.childNodes.length;i++){
       Asso_Noms.push(carteXML.firstchild.childNodes[i].attibutes.nom)
       Asso_Liens.push(carteXML.firstchild.childNodes[i].attibutes.lien)
    }
  }
}
carteXML.load("pcquebec.xml");
-------- Fin du code ----------------




J'ai mit ce code sur mes boutons :


-------- Début du code --------------
on (release) {
getURL(Asso_Liens[0]);
}
-------- Fin du code ----------------




Pour ce qui est du "nom" de l'association, je ne sais pas comment l'écrire ni où l'insérer dans le code pour le faire communiquer avec mon texte.


Pour que tu puisses mieux comprendre ce que je fais de mal et aussi pour mieux me guider, j'ai fait cette animation simplifiée de ma carte :



http://www.benoitlarocque.com/demo/flash/carte.html


Tu peux télécharger la source FLA et XML ici :



http://www.benoitlarocque.com/demo/flash/cartes.zip


Tu remarqueras que quand on click sur l'un des 2 boutons, ça nous donne une erreur du type : undefined. Que cela veut-il dire?


Aussi, dans mon exemple, tu remarqueras que quand on survol un bouton, le nom de l'association apparait, pour l'instant je l'ai inséré manuellement dans le "au dessus" du bouton. C'est ceux-ci que j'aimerais qu'ils prennent le nom dans le XML directement (nom="Association 001"). Je ne sais pas comment le faire ni quel code je dois utiliser. Surment un code comme dans ton exemple, leBouton0.text = Asso_Noms[0], mais je ne suis pas certain du reste.


Enfin, voilà, merci ci tu peux m'aider avec tout ça. Si un truc n'est pas clair, tu n'as quand demander. Aussi, si jamais tu as besoin d'un concept de design pour un site Web ou quoi que ce soit en infographie, n'hésite pas à demander!


Merci énormément pour ton aide,

un
IDesign
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
31 janv. 2007 à 19:27
Hello !

comme prévu, il y avait des petites erreurs dans le script (au niveau Majuscules, noms exactes...)
c'est firstChild et non firstchild et attributes et non attibutes (voila ce que c'est de taper trop vite...)
voici la version qui fonctionne :

Asso_Noms = new Array();
Asso_Liens = new Array();
carteXML = new XML();
carteXML.ignoreWhite = true;
carteXML.onLoad = function(flag) {
    if (flag) {
        for (i=0; i<carteXML.firstChild.childNodes.length; i++) {
            Asso_Noms.push(carteXML.firstChild.childNodes[i].attributes.nom);
            Asso_Liens.push(carteXML.firstChild.childNodes[i].attributes.lien);
        }
    }
};
carteXML.load("pcquebec.xml");

@+
0
Rejoignez-nous