Comunidad de diseño web y desarrollo en internet online

Pasar un array php a un swf mediante Flashvars

Citar            
MensajeEscrito el 27 May 2009 02:47 pm
Hola a todos!

Tengo un problemilla. Necesito pasar un array de php a un documento flash que tengo insertado en el mismo php.

Primero creo mi array mediante un bucle leyendo el contenido de una base de datos, repitiendo en el bucle la siguiente orden:

$array[$id]= $lloc;

He comprobado en php y el contenido es correcto y se guarda perfectamente.

El problema viene cuando la quiero pasar a Flash mediante Flashvars. Sé pasar variables numéricas o de texto mediante este método y el archivo swf las muestra perfectamente. Pero los array es otra cosa. No se si se utiliza el mismo método que para pasar variables normales.

En los parámetros pongo esto:
<param name="FlashVars" value="array=<?=$array?>" />

Y en el embed esto otro:
<embed src="miphp.swf" Flashvars="array=<?=$array?>


En el flash, intento que salga el elemento 2 del array en un campo de texto que he creado, para comprobar si realmente lee el array.

texto.text=_root.array[2];

En el campo de texto sale undefined y los elementos del array no hay manera de que salgan.


¿Me podéis echar una mano, por favor?

Por tina89_bcn

1 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 27 May 2009 06:15 pm
pasar un arreglo por Flashvars no es buena idea segun entiendo
eso de que el usuario pueda enviarle las variables que le guste a tu SWF...

te recomiendo que el arreglo de PHP lo conviertas en formato xml (desde el mismo PHP sin hacer .xml) y ya importes como si fuera xml
siento que es mas limpio y rapido

Por tribak

Claber

2448 de clabLevel

6 tutoriales

Genero:Masculino   Héroes

Fotógrafo o algo

firefox
Citar            
MensajeEscrito el 28 May 2009 07:56 am
Como te digo ahora es desde HTML, porque de PHP... mas bien me resulta pesado por lo cual lo aparque hace tiempo.

Código :

'FlashVars', 'var1=variable1&var2=variables2'


Para pillarlo desde el SWF.

Código :

var varSWF1:String = LoaderInfo(this.root.loaderInfo).parameters.var1;


Espero que te sirva.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2009 08:13 am
@NiGGa y ahi como sabes el length de el arreglo?
por que dudo que quieras andar modificando el swf cada qeu modifiques la base de datos

Por tribak

Claber

2448 de clabLevel

6 tutoriales

Genero:Masculino   Héroes

Fotógrafo o algo

firefox
Citar            
MensajeEscrito el 28 May 2009 08:24 am

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2009 12:36 pm
@tina89_bcn lo mejor que puedes hacer es usar SWFObject, te permite pasar variables por flashVars de una manera más sencilla y limpia. Después desde tu php conviertes el arreglo a un string y es lo que le pasas a flash:

Código Javascript :

var flashVars = {arreglo: "<?=implode('|', $array)?>"};


En flash lo que haces es convertir el string en arreglo de nuevo

Código ActionScript :

var myArreglo:Array = arreglo.split("|");

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 09 Jun 2009 03:04 pm
Hola a todos! muchas gracias por vuestras respuestas!

Tribak, necesitaba usar PHP porque me resultaba más sencillo. Tenías razón en que necesitaba la longitud del arreglo para poder generar tantos botones como entradas hubiera en la base de datos, a partir de la longitud del arreglo no necesito rehacer el swf cada vez que se inserte un nuevo elemento en la base de datos.

Finalmente utilicé el método de elchininet. mediante un bucle en el php, leo los elementos de la base de datos y los voy guardando como una cadena con los elementos separados por comas:

Código PHP :

$array_nom.=$nom.',';


Seguidamente, con str_replace sustituyo los caracteres conflictivos (&, ', ", etc) y los espacios, que en flash tambien me daban problemas.

Código PHP :

$str_noms = str_replace(" ", "_", $array_nom);


Luego inserto en el flash mediante flashvars, la variable resultante:

Código PHP :

<param name="Flashvars" value="str_noms=<?=$str_noms?>"/>
<embed src="miphp2.swf" Flashvars="str_noms=<?=$str_noms?></embed>


En el swf, declaro la funcion que me permitirá recuperar los caracteres que sustituí en el php.

Código ActionScript :

String.prototype.reemplazar = function(termino1, termino2) {
   var temp_array = this.split(termino1);
   var new_cadena = "";
   for (var k = 0; k<temp_array.length; k++) {
      new_cadena += temp_array[k]+""+termino2;
   }
   new_cadena = new_cadena.substring(0, new_cadena.length-termino2.length);
   return new_cadena;
};



Finalmente leo la variable Flashvar que entrará en el swf, y la transformo en un array:

var nom:Array = str_noms.split(',');

Ahora ya tengo el array, del cual sacaré la longitud para generar el número de botones que necesito para cada entrada de la base de datos. La aplicación ya casi está terminada.

Muchas gracias a todos por vuestra ayuda!

Por tina89bcn

10 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 09 Jun 2009 06:06 pm
Aunque es una opción es mejor que en el php leas los resultados y generes con ellos un XML y esto es lo que lees desde flash, te evitarás muchos problemas, entre ellos el de convertir todos los caracteres conflictivos.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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