Comunidad de diseño web y desarrollo en internet online

Ayuda: Recoger XML variable en AS

Citar            
MensajeEscrito el 19 Abr 2011 10:18 pm
Necesito recoger variables de XML generado dinamicamente.
El XML generado es previsible, pero no de tamaño estable.

Se pretende una galeria en la que:
>> Con PHP, me meto en un directorio (decidido por flashvar) y leo todos los archivos con extension JPG presentes en el mismo.
>> Hecha la lectura, genero un XML con esta estructura : dos ejemplos para que se entienda el problema.

<galeria>
<nombre>lila</nombre>
<foto1>lila-1.jpg</foto1>
<foto2>lila-2.jpg</foto2>
<foto3>lila-3.jpg</foto3>
<numerofotos>3</numerofotos>
</galeria>
_________________________________
<galeria>
<nombre>entorno</nombre>
<foto1>entorno-01.jpg</foto1>
<foto2>entorno-02.jpg</foto2>
<foto3>entorno-03.jpg</foto3>
<foto4>entorno-04.jpg</foto4>
<foto5>entorno-05.jpg</foto5>
<foto6>entorno-06.jpg</foto6>
<foto7>entorno-07.jpg</foto7>
<foto8>entorno-08.jpg</foto8>
<foto9>entorno-09.jpg</foto9>
<foto10>entorno-10.jpg</foto10>
<foto11>entorno-11.jpg</foto11>
<foto12>entorno-12.jpg</foto12>
<numerofotos>12</numerofotos>
</galeria>

Hasta aquí bien........

El AS debe recoger este XML, en el que el primer elemento es el nombre de la galeria y el ultimo el numero de fotos. En medio: la bateria de fotos a presentar.
Tomar el primer y ultimo nodo es facil.
Lo del medio, parece que un for entre el 0+1 y el ultimo-1 es lo adecuado.
Dentro del for, recorremos y almacenamos las variables.
FALLO AL ALMACENAR

Adjunto el AS que tengo:

Código ActionScript :

var galeria:XML = new XML(); 
galeria.ignoreWhite = true; 

galeria.onLoad = function(exito) {

      if (exito) {
 
           galeriax=this.firstChild.childNodes;
           var totalnumero = galeriax.length;  //var numerofotos = totalnumero -2; //numero de fotos a reproducir  
           if (totalnumero == 0){seccion = "La galeria no existe";}
 
      seccion = galeria.firstChild.childNodes[0].firstChild.nodeValue;
           numero = galeria.firstChild.childNodes[totalnumero - 1].firstChild.nodeValue;
           // ahora sabemos que las fotos van desde [1] a [totalnumero-2], incluidos
          
            for (var i=1;i<totalnumero-1;i++){ //todas menos primera y ultima
            
            var foto:Array = new Array();
            foto = galeria.firstChild.childNodes[i].firstChild.nodeValue;
            trace(foto); 
            //SpriteFoto.loadMovie("casarural/fotos/"+reportaje+"/"+foto);   //dummy para ver que cargan        
            }
            
  
     } else { seccion = "Error al cargar galeria"; } 


}
galeria.load("casarural/plan/foto_xml.php?reportaje="+reportaje);



El script funciona en los terminos de que se recorren los Childs;
pero no se como hacer que se generen tantas variables foto.i dentro del FOR para luego generar un avance/retroceso desde eventos de botones.

Diablos, en PHP se hacerlo, pero AS me esta volviendo ya tonto de vueltas dadas.

Por pepeitor

25 de clabLevel



 

buscarme la vida

firefox
Citar            
MensajeEscrito el 25 Abr 2011 01:32 am
Ya está. No me habeis ayudado con respuestas directas, pero buscando en foro, temas y tutos de terceros he logrado una beta funcional ... recordad que no trabajo con flash de Macromedia, por esto la sintaxis difiere un poco de lo acostumbrado.

Podeis ver el ejemplo de este primer intento:
[/url]
[url=http://www.casarural-sierradegata.com/fotocadalso-entorno-paisajes.html]


Adjunto el código tal como está, esperando sugerencias y correcciones.
Al final he hecho una cosa rara anidando un IF, da un par de fallos pero funciona.
Lo comparto:

Código ActionScript :

System.useCodePage = true;
//var reportaje = _root.reportaje;
//_global.reportaje =_root.reportaje;

var current:Number = Number();
var galeria:XML = new XML();
galeria.ignoreWhite = true;

function CargaInicial(){

galeria.onLoad = function(exito) {
   if (exito) {
      
      galeriax = this.firstChild.childNodes;
      var totalnumero = galeriax.length;
      //total fotos es: totalnumero -2;          
      seccion = "Reportaje "+galeria.firstChild.childNodes[0].firstChild.nodeValue;
      
      if (galeria.firstChild.childNodes[totalnumero-1].firstChild.nodeValue == 0) {
         seccion = "La galeria no existe";
         numero = "0 fotos";
      } else {
         numero = galeria.firstChild.childNodes[totalnumero-1].firstChild.nodeValue+" fotos";
      }
       
      var foto:Array = new Array();
      var ruta:Array = new Array();
      
      // ahora sabemos que las fotos van desde [1] a [totalnumero-2], incluidos
      for (var i = 1; i<totalnumero-1; i++) {
           //todas menos primera y ultima
           // array de valores foto               
           foto[i] = galeria.firstChild.childNodes[i].firstChild.nodeValue;
           ruta[i] = ["/fotos/"+reportaje+"/"+foto[i]];
           trace(foto); trace(foto[i]);
           trace(ruta); trace(ruta[i]);
         
      }

          
         if (current<=totalnumero-2) {
                   current++; 
         //-- cargo la imágen numero1      
         SpriteFoto.loadMovie(ruta[current],current);
                   actual = current+ " de";                   
                      
                      if (current==totalnumero-1){ //voila la filigrana
            //-- reinicio imágen numero1
                      current = 0;
                      current++;       
            SpriteFoto.loadMovie(ruta[current],current);
                      actual = current+ " de"; }
                  }  
      
   
   } else {seccion = "Error al cargar galeria";}
};
galeria.load("/plan/foto_xml.php?reportaje="+reportaje);

}

CargaInicial();   
stop();

function siguiente() { CargaInicial(); }


Saludos

Por pepeitor

25 de clabLevel



 

buscarme la vida

firefox
Citar            
MensajeEscrito el 25 Abr 2011 08:54 pm
Resueltos los problemillas: mis neuronas no computaban bien los intervalos a tener en cuenta para la presentacion.

Donde estaban los if,s (uno dentro de otro), ahora se elimina esta filigrana y se sustutuye pon un if-else mas ortodoxo:



Código ActionScript :

         if (current<=totalnumero-3) {
                    //-- cargo la imágen numero1
                   current++;      
         SpriteFoto.loadMovie(ruta[current],current);                   
                   actual = current+ " de"; 

                  }else{

                      //-- reinicio imágen numero1                       
                      current = 1;                            
            SpriteFoto.loadMovie("fotos/"+reportaje+"/"+foto[1]);                      
                      actual = current+ " de"; 
                  } 


Vease ejemplo on-line:
[url=http://www.casarural-sierradegata.com/fotocasa-molino-fachada.html][/url]

Saludos

Por pepeitor

25 de clabLevel



 

buscarme la vida

firefox
Citar            
MensajeEscrito el 26 Abr 2011 10:29 pm
Terminado. Solo queda hacerlo bonito.
Tuto seguido:
http://www.cristalab.com/tutoriales/galeria-de-imagenes-en-flash-con-loadmovie-c152l/
Finalmente lo he hecho con flash8.
Debo señalar que, con el programa de Selteco, el swf resultante pesa menos de 5KB, con flash pasa de 40KB ¿Alguien sabe por qué?.

Lo he hecho con flash por que no soy capaz de hacer funcionar los botones con el app de Selteco...

El codigo que hace funcional esta galeria:
http://www.casarural-sierradegata.com/fotocadalso-entorno-paisajes.html

Código ActionScript :

var galeria:XML = new XML();
galeria.ignoreWhite = true;
var current:Number = new Number();
function CargaInicial() {
   galeria.onLoad = function(exito) {
      if (exito) {
         galeriax = this.firstChild.childNodes;
         var totalnumero = galeriax.length;
         //total fotos es: totalnumero -2;          
         seccion.text = "Reportaje "+galeria.firstChild.childNodes[0].firstChild.nodeValue;
         if (galeria.firstChild.childNodes[totalnumero-1].firstChild.nodeValue == 0) {
            seccion.text = "La galeria no existe";
            numero.text = "0 fotos";
         } else {
            numero.text = galeria.firstChild.childNodes[totalnumero-1].firstChild.nodeValue+" fotos";
         }
         var foto:Array = new Array();
         var ruta:Array = new Array();
         // ahora sabemos que las fotos van desde [1] a [totalnumero-1], incluidos
         for (i=1; i<totalnumero-1; i++) {
            //todas menos primera y ultima
            // array de valores foto               
            foto[i] = galeria.firstChild.childNodes[i].firstChild.nodeValue;
            ruta[i] = ["/fotos/"+reportaje+"/"+foto[i]];
            trace(foto);
            trace(foto[i]);
            trace(ruta);
            trace(ruta[i]);
         }
             current = 1; //resolvemos cagando la foto1
            FotoClip.loadMovie(ruta[current], current);
            actual.text = current+" de";
          
           nextBoton.onPress = function() {
            if (current < totalnumero-2){ 
            current ++;
            FotoClip.loadMovie(ruta[current], current);
            actual.text = current+" de";
            }}
          prevBoton.onPress = function() {
            if (current >1){ 
            current --;
            FotoClip.loadMovie(ruta[current], current);
            actual.text = current+" de";
            }}
         
      } else {
         seccion = "Error al cargar galeria";
      }
   };
   galeria.load("/plan/foto_xml.php?reportaje="+reportaje);
}
CargaInicial();
stop();


Saludos

Por pepeitor

25 de clabLevel



 

buscarme la vida

firefox

 

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