GALLERIE PHOTO AVEC XML

yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012 - 28 juin 2011 à 20:35
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 15 juil. 2011 à 03:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53331-gallerie-photo-avec-xml

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
15 juil. 2011 à 03:51
"Combien de fois faudrait-il dire à ces abrutis qu'il ne faut pas mettre en ligne des bouts de code, tout juste bon à jeter à la poubelle ?"

Autant de fois qu'il faudra dire aux imbéciles qui insultent sans raisons qu'ils feraient mieux de respecter les règles du site avant de venir poster tout aussi inutilement des commentaires bon à jeter à la poubelle.

Peg'
Admin Codes-Sources
vendom Messages postés 1 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 4 juillet 2011
4 juil. 2011 à 20:23
il y a régulièrement des gens qui publient des scripts foireux et merdiques !!! Ces gens là n'ont pas compris quelques principes de base de la programmation (ex: rigueur, optimisation, plusieurs tests ...) . Combien de fois faudrait-il dire à ces abrutis qu'il ne faut pas mettre en ligne des bouts de code, tout juste bon à jeter à la poubelle ?
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
1 juil. 2011 à 08:00
Moi je veux bien t'aider, mais t'est pas obliger de l'enregister en CS5 pour des fonctionnalité qui dépasse pas le CS3. Y a encore des gens en Flash CS3 !!!
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
30 juin 2011 à 20:54
oui je fais aussi beaucoup ceci, créer l'écoute du mouseOut lors du mouseOver. Ce qui semble le plus logique. Et qund je dis suprimable je veux dire que l'écoute est cancelable car tu peux suppremir l¡écoute de la fonction passée. Or dans mon exemple une fois la fonction invoqué les écoutees créé ne sont plus "suprimable"...

J'ai jeté un oeil au "poa" et ce n'est qu'un concept de plus. J'ai déjà bien du mal à suivre les autres concepts !!!
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
30 juin 2011 à 15:13
Bonjour top 30

pour te repondre sur l'imbrication de fonction je me base sur la poa

pour ce qui est des removeeventlistener, c'est indispensable de gérer leur nombres.
Quand un event listener est inutile on le supprime. Sinon ton objet ne sera pas elisible pourle GC. Pour ce qui de ton exemple, je ne gére pas de la meme facon que toi les mouseevent.
Dans ce meme soucis de controle du nombre d'eventlisteners (réduction du nombres de bugs et des besoins en ressources) je n'ai par defaut que le mouseover(pour la gestion souris)
c'est l'action sur le mouse-over qui va liberer les (autres mouse event), à la fin des interactions souris il ne restera que le mouse over.
Voila en quoi l'ecoute du mouse out est tout a fait supprimable.

Je ne doute pas que tu as voulu me taquiner, car si j'ai radicaliser, c'est pour faire simple
'PS: tu vera que je n'ai pas mis de removeeventlistener sur ses mouseevent dans le code
Cordialement
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
30 juin 2011 à 14:23
aerolyte essaye de m'expliquer et c'est top30 qui répond, attendez normalement ce site c'est pour aidez les autres"newbees" comme moi.
top30 je sais t le rois du actionscript, mais aussi le rois des insultes, aide moi à savoir mes fautes et à résoudre mes problèmes, enfin je suis la pour ça.
Merci aerolyte je vais essayer de comprendre ton script
top30 merci, mais si tu m'explique par un exemples les étapes:
1/ Charger le xml

2/ Créer un clip pour chaque noeud "phone" du XML

3/ Attribuer au clip son noeud lui correspondant

3/ Au click sur le clip, afficher les données du noeud
Pas de tableaux de prix, de chemin, etc... VU QUE TOUT EST DEJA DANS LE XML !!!!
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
30 juin 2011 à 12:53
C'est sympa ton aide Aerolyte, mais dans tes commentaires tu dis 2 "bétises":

1/ Il est formellement interdit d'emboiter une fonction dans une autre...
Interdit par qui par quoi ? Si je suis le roi de l'imbrication de fonction dans une autre.
De plus quelque part, les classes sont des fonctions dans des fonctions. L'imbrication de fonction A DES AVANTAGES, certes c'est pas récupérable mais justement...

2/ //le removeEventlistener tu connais pas??????
La suppression de listener n'est absolument pas obligatoire ! Loin de là ! Si est sûr que ton écoute ne contient aucune référence extérieure à son contexte, tu n'est pas obliger de la supprimer.

Tiens je vais te donner un exemple des deux d'un coup !

setDescriptionButton( 0x990000, 0xFF0000 );
//
function setDesciptionButton( $normalColor:uint, $overColor:uint ):void{
function onMouseOver( $e:Event ):void{
titleTextField.textColor= $overColor ;
descTextField.visible= true ;
}
function onMouseOut( $e:Event ):void{
titleTextField.textColor= $normalColor ;
descTextField.visible= false;
}
descButton.addEventListener( MouseEvent.MOUSE_OVER, onMouseOver );
descButton.addEventListener( MouseEvent.MOUSE_OUT, onMouseOut );
}

Ainsi l'écoute des fonctions onMouseOver et onMouseMove n'est pas supprimable. Et qund le clip parent du code et parent du button sera supprimé, aucun problème...

Et à mon humble avis Yasdar est trés trés newbees pour comprendre quoique ce soit à ton aide.

C'est si simple:
1/ Charger le xml
2/ Créer un clip pour chaque noeud "phone" du XML
3/ Attribuer au clip son noeud lui correspondant
3/ Au click sur le clip, afficher les données du noeud
Pas de tableaux de prix, de chemin, etc... VU QUE TOUT EST DEJA DANS LE XML !!!!

A plus !
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
30 juin 2011 à 01:23
Re
honnetement ta source est un exemple des nombreuses mauvaise pratiques a proscrire.

Voici une légère correction et il reste beaucoup de travail dessus, je t'invite a bien out regarder, i se peut que mes corrections entraine d'autre messages d'alertes, preuves que ton code est très mal construit.

import fl.transitions.*;
import fl.transitions.easing.*;
import fl.transitions.TransitionManager;
import flash.display.MovieClip;
import fl.transitions.Tween;
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;

var myxmldata:XML;//faut le sortir de la fonction mon coco
var ballXTween:Tween;
var myTMinfo:TransitionManager=new TransitionManager(infodesc);
var myTMdroite:TransitionManager=new TransitionManager(adroite);
var myTMguache:TransitionManager=new TransitionManager(agauche);
var myXML:String="gallery100.xml";
//j'ai pas touché a tes listes de tableau, mais sans me tromper je pense que tout cette partie est très mal gérée
//tu dois pouvoir inserer toutes les infos dans un array bidimensionnel
var tablienimage:Array=new Array();
var tablienthumbs:Array=new Array();
var tablientitre:Array=new Array();
var tabliendescription:Array=new Array();
var tabprice:Array=new Array();

var c:Number=0;
var nbresimages:Number;
var xspace:Number=125;
var xs:Number=0;
var progkb:String;//faut le sortir de la fonction mon coco
var tkb:String;//faut le sortir de la fonction mon coco

var imagearea:MovieClip=new MovieClip();
var sp:Sprite=new Sprite();
sp.x=(stage.stageWidth/2)-200;
sp.y=(stage.stageHeight/2)-170;
var thumbsarea:MovieClip=new MovieClip();
thumbsarea.buttonMode=true;
var spth:Sprite=new Sprite();
spth.x=20;
spth.y=stage.stageHeight-70;

sp.addChild(imagearea);
addChild(sp);
spth.addChild(thumbsarea);
addChild(spth);

var ds:DropShadowFilter=new DropShadowFilter();
ds.distance=5;
ds.blurX=10;
ds.blurY=10;
ds.alpha=.6;
ds.color=0x000000;

descb.buttonMode=true;
descb.addEventListener(MouseEvent.MOUSE_OVER,showmeinfo);
descb.addEventListener(MouseEvent.MOUSE_OUT,hidemeinfo);

infodesc.visible=false;
adroite.addEventListener(MouseEvent.CLICK,droite);
agauche.addEventListener(MouseEvent.CLICK,gauche);

//un enterframe est a utiliser le moins possible, fuite de memoire assurée
//alors la 2 c'est pas envisageable du tout surtout sans interrupteur
stage.addEventListener(Event.ENTER_FRAME,controle1);
stage.addEventListener(Event.ENTER_FRAME,controle2);

loadmyxml();

function loadmyxml():void{
var lxml:URLLoader=new URLLoader();
var rxml:URLRequest=new URLRequest(myXML);
lxml.addEventListener(Event.COMPLETE,lirexml);//listener doit etre avnt le load
lxml.load(rxml);
}

//il est formellement interdit d'emboiter une fonction dans une autre, je sais meme pas comment tu as réussi a faire marcher a moitié ce code
function lirexml(event:Event):void{
//le removeEventlistener tu connais pas??????
lxml.removeEventListener(Event.COMPLETE,lirexml);
myxmldata=new XML(lxml.data);
myxmldata.ignoreWhitespace=true;
var nbr:Number=myxmldata.info.nbre;
nbresimages=nbr;
//pourquoi instancier des nouvelle variable dans ta boucle, il suffit juste d'attribuer de nouvelles valeurs a chaque rang
var i:int,ch1:String,ch2:String,letitre:String,desc:String,leprix:String;
for(i=0;i<nbr;i++){
ch1=myxmldata.phone[i].image;
ch2=myxmldata.phone[i].thumb;
letitre=myxmldata.phone[i].productName;
desc=myxmldata.phone[i].description;
leprix=myxmldata.phone[i].price;
//idem gestion des tableaux très mauvaise
tablienimage.push(ch1);
tablienthumbs.push(ch2);
tablientitre.push(letitre);
tabliendescription.push(desc);
tabprice.push(leprix);
}
var nn:Number=Math.round(Math.random()*nbr);
var luneimage:Loader=new Loader();
var runeimage:URLRequest=new URLRequest(tablienimage[nn]);
luneimage.contentLoaderInfo.addEventListener(Event.COMPLETE,afficheruneimage);//listener doit etre avnt le load
luneimage.load(runeimage);
loadthumbs();
}

//fautque tu reverifes ta gestion des chargement, pas sur que tu sois le plus performant.
function afficheruneimage(event:Event):void{
//le removeEventlistener tu connais pas??????
event.target.addEventListener(Event.COMPLETE,afficheruneimage);
//idem gestion des tableaux très mauvaise
imagearea.addChild(luneimage);
luneimage.filters=[ds];
titre.text=tablientitre[nn];
description.text=tabliendescription[nn];
price.text=tabprice[nn];
}

// faut pas oublier le "void"
function loadthumbs():void{
var lthumbs:Loader=new Loader();
var rthumbs:URLRequest=new URLRequest(tablienthumbs[c]);
lthumbs.contentLoaderInfo.addEventListener(Event.COMPLETE,afficherlesthumbs);//listener doit etre avnt le load
lthumbs.load(rthumbs);
}

function afficherlesthumbs(event:Event):void{
//le removeEventlistener tu connais pas??????
event.target.addEventListener(Event.COMPLETE,afficherlesthumbs);
var thispic:String=tablienimage[c];
var thistitre:String=tablientitre[c];
var thisdescription:String=tabliendescription[c];
var thisprice:String=tabprice[c];

lthumbs.x=(xs*128);
xs=xs+1;
lthumbs.filters=[ds];
lthumbs.addEventListener(MouseEvent.CLICK,voirimage);
thumbsarea.addChild(lthumbs);
c++;// c'est un petit truc en kdo
if(c<nbresimages){loadthumbs();}else{trace("it'sdone");}
}

function voirimage(event:MouseEvent):void{
titre.text=description.text="";
imagearea.removeChildAt(0);

var llesimages:Loader=new Loader();
var rlesimages:URLRequest=new URLRequest(thispic);
llesimages.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,preloaderprogress);//listener doit etre avnt le load
llesimages.contentLoaderInfo.addEventListener(Event.COMPLETE,chargerimage);//listener doit etre avnt le load
llesimages.load(rlesimages);

//alors la mon coco va falloir faire mieux car ca ne peut que planter
ballXTween=new Tween(lthumbs,"x",Elastic.easeOut,lthumbs.x-10,lthumbs.x,3,true);
}

function preloaderprogress(event:ProgressEvent):void{
progkb=Number(event.bytesLoaded/1024).toFixed(1);
tkb=Number(event.bytesTotal/1024).toFixed(1);
preloader.text="loading"+progkb+" of"+tkb+"please wait";
}

function chargerimage(event:Event):void{
//idem pour le remove
event.target.removeEventListener(ProgressEvent.PROGRESS,preloaderprogress);
event.target.removeEventListener(Event.COMPLETE,chargerimage);
lthumbs.addEventListener(MouseEvent.CLICK,voirimage);
preloader.text="";
infodesc.visible=false;
imagearea.addChild(llesimages);
llesimages.filters=[ds];
var myTM:TransitionManager=new TransitionManager(imagearea);
myTM.startTransition({type:Zoom, direction:Transition.IN, duration:1, easing:Strong.easeOut});
titre.text=thistitre;
description.text=thisdescription;
price.text=thisprice;
}

//meme commentaire que pour ton audioplayer, consulte mon poste
function droite(event:MouseEvent):void{
thumbsarea.x-=128;
myTMdroite.startTransition({type:Fade, duration:1, direction:Transition.OUT})
}

function gauche(event:MouseEvent):void{
thumbsarea.x+=128;
myTMguache.startTransition({type:Fade, duration:1, direction:Transition.OUT})
}

function controle1(event:Event):void{
//je comprend pas ton chmilblik la
if(agauche.hitTestObject(thumbsarea)){
//agauche.visible=true;
}else{
//agauche.visible=false;
thumbsarea.x-=64;
}
}

function controle2(event:Event):void{
if(adroite.hitTestObject(thumbsarea)){
//adroite.visible=true;
}else{
//adroite.visible=false;
thumbsarea.x+=64;
}
}

function showmeinfo(event:MouseEvent):void{
infodesc.visible=true;
myTMinfo.startTransition({type:Wipe, direction:Transition.IN, duration:1, easing:Strong.easeOut, startPoint:1});
info.text=description.text;
}

function hidemeinfo(event:MouseEvent):void{
info.text="";
infodesc.visible=false;
}
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
30 juin 2011 à 00:01
j'ai changé le fichier xml pourquoi enligne ca marche pas ?
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
29 juin 2011 à 20:32
pourquoi ça ne marcher pas, essayer de télécharger le ZIP ça marche très bien.
aucun problème avec le fichier XML (en local )
je vais changer le fichier xml ( selon top30 )
peut être que c'est ça le problème ( non fonctionnement enligne)
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
29 juin 2011 à 18:40
Utilise pas de "tween" si tu ne sais pas.
Moi qund je test le téléphone est chaque fois plus petit !
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
29 juin 2011 à 18:39
Pardon,
Plus claire comme ceci:

<store>

monChemin/monImage.png
<thumb type= "bitmap">monChemin/monImageThumb.png</thumb>
Le nom du téléphone

<description language="fr">Le texte que tu n'utilises même pas dans ta source</description>
<manufacturer>Black Berry</manufacturer>
140




monChemin/monImage.png
<thumb type ="bitmap">monChemin/monImageThumb.png</thumb>
Le nom du téléphone

<description language="fr">Le texte que tu n'utilises même pas dans ta source</description>
<manufacturer>Sony Erikson</manufacturer>
723



</store>
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
29 juin 2011 à 18:37
En premier l'XML:

Voici au minimun à quoi il devrait ressembler au nineau de la structure:

<store>

monChemin/monImage.png
<thumb type= "bitmap">monChemin/monImageThumb.png</thumb>
Le nom du téléphone

<description language="fr">Le texte que tu n'utilises même pas dans ta source</description>
<manufacturer>Black Berry</manufacturer>
140

monChemin/monImage.png
<thumb type ="bitmap">monChemin/monImageThumb.png</thumb>
Le nom du téléphone

<description language="fr">Le texte que tu n'utilises même pas dans ta source</description>
<manufacturer>Sony Erikson</manufacturer>
723

etc...
</store>
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
29 juin 2011 à 18:29
SUPER !Tu nous as chier une merde...
Ca marche même pas.
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
29 juin 2011 à 12:48
utilise un URLLoader et pas un Loader
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
29 juin 2011 à 11:58
avec internet explorer : SecurityError: Error #2000: No active security context. c'est quoi ?
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
29 juin 2011 à 11:23
non ça ne marche toujours pas peut être que c'est un problème de publish setting du programme flash cs5.
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
28 juin 2011 à 22:55
Bonjour,
même remarques que pour ta source précédente.

concernant ton pb, vérifie le CHMOD
Cordialement
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
28 juin 2011 à 20:35
une fois sur le net les petites images en dissous disparaissent - pourquoi ?
Rejoignez-nous