Comunidad de diseño web y desarrollo en internet online

Variable xml

Citar            
MensajeEscrito el 13 Mar 2009 10:29 am
Hola al foro;

tengo esta línea de código:

Código :

var n = lista_xml.firstChild.childNodes[0]


Lo que quiero es que [0] sea una variable distinta según el botón que clique.

Espero me puedan ayudar.

Por igartzi

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Mar 2009 10:52 am
Hola igartzi,

Lo que tienes que hacer es un bucle que recorra X veces tu estructura XML:

Código :

//Primero crea los botones

for ( _indice=0; _indice< lista_xml.firstChild.childNodes.length; _indice++) {

//-------- CREA BOTONES ---------//

duplicateMovieClip(boton, "boton"+_indice, this.getNextHighestDepth()); //duplica los botones
this["boton"]._x += this["boton"]._width + 5 //Escribe los botones por la pantalla aumentando su posición (_x)   
this["boton"+_indice].texto.text = lista_xml.firstChild.childNodes[_indice].attributes.titulo; //esto es un MC que contiene dentro una caja de texto pero tu puedes ponerlo a tu gusto


//-------- ABRE LOS DATOS EN ES QUE PINCHEMOS ---------//

this["boton"+_indice].indice = _indice 
this["boton"+_indice].onRelease = function(){ 

cargaXML(this.indice); // tienes que crear una funcion que lea la estructura XML (yo la he llamado cargaXML)
}


Espero que te sirva. Suerte!!

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 13 Mar 2009 11:48 am
Gracias por contestar.

no consigo montarlo correctamente. El código que tengo es este:

Código :

   var opciones:Array = lista_xml.firstChild.childNodes;
   for(i = 0; i < opciones.length; i++) { // Comienza a repetirse esta parte del código, tantas veces como elementos hay en el XML
    _root.menu.menu2.mcBoton.attachMovie("menubotonclip", "boton"+i, _root.menu.menu2.mcBoton.getNextHighestDepth());   // Creamos un MC copiado del original, tal como explicamos anteriormente
    _root.menu.menu2.mcBoton["boton"+i]._x = 150; // Su posición horizontal sera a 50 px
   _root.menu.menu2.mcBoton["boton"+i]._y = 60 + (i * 25); // Su posición vertical va cambiando como explicamos hace un momento
    _root.menu.menu2.mcBoton["boton"+i].texto = opciones[i]; // Le asignamos el correspondiente texto al botón
    _root.menu.menu2.mcBoton["boton"+i].linkurl = opciones[i]; // Le asignamos el correspondiente Link a botón

   _root.menu.menu2.mcBoton["boton"+i].indice = _indice 
    _root.menu.menu2.mcBoton["boton"+i].onRelease = function(){ 

cargaXML(this.i); // tienes que crear una funcion que lea la estructura XML (yo la he llamado cargaXML)
}
   }


Seguro que hay errores, pero mira que le doy vueltas y nada.
Me lee el xml y me completa el menú, pero cada línea del menú me sale con las etiquetas, es decir, "<>".

Por igartzi

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Mar 2009 12:03 pm
Tu XML tiene esto?:

<?xml version="1.0" encoding="iso-8859-1"?>

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 13 Mar 2009 12:04 pm
si no lo tiene ponselo

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 13 Mar 2009 12:15 pm
Si que lo tiene. En realidad el xml lo lee perfectamente. Voy a explicar lo que quiero hacer y lo que tengo conseguido.

Es una galeria fotográfica, antes tenía 2 xmls diferentes, uno para el menu y otro para las fotos, y me funciona perfectamente. El problema es que el cliente pueda agrandar el menu, por lo tanto tendría que crear un nuevo xml y un nuevo fla.

Lo que quiero conseguir es que en un mismo swf segun clique el usuario un botón u otro anteriormente creado por el cliente a su gusto, se cargue un nodo con sus fotos u otro, es decir, si el usuario clica en retrato, se cargue solo el nodo retrato.

Pongo el código completo por si me pueden ayudar.

Código :

//--Definir variables inciales --//  
var lista_xml:XML = new XML();  
lista_xml.ignoreWhite = true;  
var cargador_mcl:MovieClipLoader = new MovieClipLoader();  
cargador_mcl.addListener(this);  
var img_w:Number = 400;//Ancho de las imagenes  
var img_h:Number = 500;//Alto de las imagenes  
var img_n:Number = 3;//Numero de imagenes que se mostraran  
var img_s:Number = 115;//Separacion entre las imagenes  
var gal_x:Number = -178.3;//Posicion en X de la galeria  
var gal_y:Number = 117.0;//Posicion en Y de la galeria  
  
  
//-- Crear la galeria --//  
var galeria:MovieClip = this.createEmptyMovieClip("galeria", 120);  
galeria.createEmptyMovieClip("miniaturas", 0);   
galeria.miniaturas.setMask( galeria.mascara );  
galeria._x = this.gal_x;
galeria._y = this.gal_y;  
  
//-- Carga XML --//  
lista_xml.onLoad = function( ok:Boolean )   
{  
   if( ok )//Si se cargo correctamente  
   {  
      crearImagenes();  
   }  
   else trace("No se pudo cargar el XML");  
}  
lista_xml.load("fotos.xml");
  
//-- Crear las imagenes --//  
function crearImagenes( Void ):Void  
{  
   //Variables auxiliares  
   var aux:MovieClip;  
   var img_aux:String;  
   var url_aux:String;
   
   var opciones:Array = lista_xml.firstChild.childNodes;
   for(i = 0; i < opciones.length; i++) { // Comienza a repetirse esta parte del código, tantas veces como elementos hay en el XML
    _root.menu.menu2.mcBoton.attachMovie("menubotonclip", "boton"+i, _root.menu.menu2.mcBoton.getNextHighestDepth());   // Creamos un MC copiado del original, tal como explicamos anteriormente
    _root.menu.menu2.mcBoton["boton"+i]._x = 150; // Su posición horizontal sera a 50 px
   _root.menu.menu2.mcBoton["boton"+i]._y = 60 + (i * 25); // Su posición vertical va cambiando como explicamos hace un momento
    _root.menu.menu2.mcBoton["boton"+i].texto = opciones[i]; // Le asignamos el correspondiente texto al botón
    _root.menu.menu2.mcBoton["boton"+i].linkurl = opciones[i]; // Le asignamos el correspondiente Link a botón

   _root.menu.menu2.mcBoton["boton"+i].linkurl = i 
    _root.menu.menu2.mcBoton["boton"+i].onRelease = function(){ 

cargaXML(_root.menu.menu2.mcBoton["boton"+i].linkurl); // tienes que crear una funcion que lea la estructura XML (yo la he llamado cargaXML)
}
   }

   
   
   for( var i:Number = 0, l:Number = lista_xml.firstChild.childNodes[1].childNodes.length; i < l; i++)  
   {
      aux = this.crearImagen( i );  
      url_aux = lista_xml.firstChild.childNodes[0].childNodes[i].attributes.url_xml;  
      img_aux = lista_xml.firstChild.childNodes[0].childNodes[i].attributes.nom_xml;  
      //Aqui se indica que al presionar el boton se carge la url  
      if( url_aux != undefined && url_aux != "" ) 
      { 
            aux.boton_mc.url = url_aux;  
            aux.boton_mc.onRelease = function( Void )  
            {  
               getURL( this.url );   
            };  
      } 
      cargador_mcl.loadClip( img_aux, aux.thumb_mc );  
   }  
}  
function crearImagen( index:Number ):MovieClip  
{  
   //Clips  
   var clip:MovieClip = this.galeria.miniaturas.createEmptyMovieClip("mc_" + index, index);  
   clip.createEmptyMovieClip("boton_mc", 1)  
   clip.createEmptyMovieClip("thumb_mc", 0)  
     
   //Posicion  
   clip.index = i;  
   clip._y = (this.img_w + this.img_s) * index;  
     
   //Fondo transparente del boton  
   clip.boton_mc.beginFill(0,0);  
   clip.boton_mc.moveTo(0,0);  
   clip.boton_mc.lineTo(this.img_w,0);  
   clip.boton_mc.lineTo(this.img_w, this.img_h);  
   clip.boton_mc.lineTo(0, this.img_h);  
   clip.boton_mc.endFill();  
   return clip;  
}  
  
//-- Eventos del Cargador --//  
function onLoadInit( target:MovieClip )  
{   
   target._width = this.img_w;   
   target._height = this.img_h;  
}

Por igartzi

33 de clabLevel



 

msie7
Citar            
MensajeEscrito el 13 Mar 2009 01:35 pm
Hummm. puedes postear la estructura XML? Así me lo construyo para verlo mejor.

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 13 Mar 2009 02:26 pm
Saludos igartzi !, aún no has resuelto tu problema?, me gustaría compartir una solución ya que desarrollé algo semejante a lo que explicas,espero tu respuesta para que nos pongamos en contacto y veas si es lo que necesitas

Por Maxos

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Mar 2009 05:24 pm
Aun no he conseguido solucionarlo.

El menu quiero que lo coja de los nodos de fotos, es decir:

retrato
boda
....y asi sucesivamente..

El Xml es este:

Código :

<?xml version="1.0" encoding="iso-8859-1"?>
<fotos>
<retrato>
      <img nom_xml="fotos/retratos/retr.1.jpg"/>  
      <img nom_xml="fotos/retratos/retr.2.jpg"/> 
      <img nom_xml="fotos/retratos/retr.3.jpg"/> 
      <img nom_xml="fotos/retratos/retr.4.jpg"/> 
      <img nom_xml="fotos/retratos/retr.5.jpg"/> 
      <img nom_xml="fotos/retratos/retr.6.jpg"/> 
      <img nom_xml="fotos/retratos/retr.7.jpg"/> 
      <img nom_xml="fotos/retratos/retr.8.jpg"/> 
      <img nom_xml="fotos/retratos/retr.9.jpg"/>
      <img nom_xml="fotos/retratos/retr.10.jpg"/>  
      <img nom_xml="fotos/retratos/retr.11.jpg"/> 
      <img nom_xml="fotos/retratos/retr.12.jpg"/> 
      <img nom_xml="fotos/retratos/retr.13.jpg"/> 
      <img nom_xml="fotos/retratos/retr.14.jpg"/> 
      <img nom_xml="fotos/retratos/retr.15.jpg"/> 
      <img nom_xml="fotos/retratos/retr.16.jpg"/>
   </retrato>
   <boda>
      <img nom_xml="fotos/bodas/retr.1.jpg"/>  
      <img nom_xml="fotos/bodas/retr.2.jpg"/> 
      <img nom_xml="fotos/bodas/retr.3.jpg"/> 
      <img nom_xml="fotos/bodas/retr.4.jpg"/> 
      <img nom_xml="fotos/bodas/retr.5.jpg"/> 
      <img nom_xml="fotos/bodas/retr.6.jpg"/> 
      <img nom_xml="fotos/bodas/retr.7.jpg"/> 
      <img nom_xml="fotos/bodas/retr.8.jpg"/> 
      <img nom_xml="fotos/bodas/retr.9.jpg"/>
      <img nom_xml="fotos/bodas/retr.10.jpg"/>  
      <img nom_xml="fotos/bodas/retr.11.jpg"/> 
      <img nom_xml="fotos/bodas/retr.12.jpg"/> 
      <img nom_xml="fotos/bodas/retr.13.jpg"/> 
      <img nom_xml="fotos/bodas/retr.14.jpg"/> 
      <img nom_xml="fotos/bodas/retr.15.jpg"/> 
      <img nom_xml="fotos/bodas/retr.16.jpg"/>
   </boda>
</fotos>

Por igartzi

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Mar 2009 03:43 pm
No hay nadie que me pueda ayudar con este tema?????

Por igartzi

33 de clabLevel



 

msie7
Citar            
MensajeEscrito el 16 Mar 2009 01:30 pm
Hola!

Parece que estamos haciendo casi la misma cosa en flash jejeje.
Yo también estoy haciendo una galería leyendo desde XML y los nombres de los albumes lo cojo del nombre del nodo principal que contiene las imagenes.

Yo lo hago asi:

Código :

System.useCodepage = true; 
var indice:Number; 

var galeria_xml:XML; 
function cargarDatos(_indice:Number){
      
for ( _indice=0; _indice<galeria_xml.firstChild.childNodes.length; _indice++) {
         
      //-------- CREA BOTONES ---------//
      duplicateMovieClip(cont_bots, "cont_bots"+_indice, this.getNextHighestDepth());
      this["cont_bots"]._x += this["cont_bots"]._width + 5      
      this["cont_bots"+_indice].texto.text = galeria_xml.firstChild.childNodes[_indice].attributes.titulo;
               
      //-------- ABRE LA GALERIA EN LA QUE PINCHEMOS ---------//
         
      this["cont_bots"+_indice].indice = _indice 
      this["cont_bots"+_indice].onRelease = function(){ 
         
      cargarDatos(this.indice); // esto carga los datos de la estructura xml, lo que tienes que hacer es aplicar en tu escena los datos cargados
        }
}

indice=0;
galeria_xml = new XML();
galeria_xml.ignoreWhite = true;
galeria_xml.load("fotos.xml");
galeria_xml.onLoad = function(){ cargarDatos(indice); }



"cont_bots" en un MC que contiene una caja de texto llamada "texto". Lo que hago es duplicar cada MC y cargar dentro de su caja de texto correspondiente el título de cada galería.

Suerte!

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Mar 2009 01:35 pm
Otra cosa, mi estructura XML es algo distinta:

<galeria>

<fotos titulo="Galeria 1">
<foto1>fotos/foto1.jpg</foto1>
<foto2>fotos/foto2.jpg</foto2>
<foto3>fotos/100_4103.jpg</foto3>
</fotos>

<fotos titulo="Galeria 2">
<foto1>fotos/foto1.jpg</foto1>
<foto2>fotos/foto2.jpg</foto2>
<foto3>fotos/100_4103.jpg</foto3>
</fotos>

</galeria>

Por lo que OJO con esta línea: this["cont_bots"+_indice].texto.text = galeria_xml.firstChild.childNodes[_indice].attributes.titulo;
No serviría para tu estructura ya que no tienes el atributo "titulo" en el nodo principal. Si quieres altera tu XML.

Suerte otra vez! :P

Por cotk

61 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Mar 2009 04:18 pm
Gracias por contestar cotk;

he modificado el xml pero aun y todo algo se me escapa. No consigo darle la orden al botón para que me cargue un nodo u otro.

Espero me puedan ayudar.
Un saludo.
Igartzi.

Por igartzi

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Mar 2009 04:52 pm
Hola igartzi!!

Te he mandado un mensaje con un enlace para que te descargues un ejemplo que he hecho.
Mira en tu bandeja de entrada.

Saludos!!

Por cotk

61 de clabLevel



 

safari

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.