Comunidad de diseño web y desarrollo en internet online

recargar xml

Citar            
MensajeEscrito el 27 Mar 2006 11:47 pm
tengo una aplicacion flash que toma la informacion de un archivo xml, y el problema es que cuando cambie el archivo xml la aplicacion deberia mostrar los nuevos datos, pero toca cerrar la aplicacion y volverla a abrir para que se actualice, es una aplicacion que va ha pasar abierta las 24 horas del dia.
Utilice la funcion setinterval() la cual me recarga el xml cada 5 minutos o al tiempo que yo le ponga, pero el problema es que al recargar los nuevos datos se sobreponen en los datos antiguos y se ve feo.

Tal vez haya alguna otra manera de recargar el xml o si le inserto la pelicula flash en una pagina web, como hago que esta se recargue automaticamente cada 5 minutos, o hay alguna funcion para blanquer la pelicula flash y luego aplicar la funcion setinterval () para recargar el xml.

Por edwgeo

3 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Mar 2006 04:50 am
hola edwgeo ...
quiza te sirva esto ..aqui

saludos :wink:

Por alffa

276 de clabLevel



 

Mi casa o mi trabajo...depende (México)

firefox
Citar            
MensajeEscrito el 28 Mar 2006 02:59 pm
No entiendo bien... pero vamos, intentaré orientarte

Para recargar tu XML (con setInterval(recargame)) debes destruir el objeto XML y crear uno nuevo (miXml = new XML()), y luego lanzar el load :) con eso ya tenemos los nuevos datos cargados en limpio en memoria.

En cuanto a la apariencia en pantalla, debes añadir a tu función de pintando, una llamada a otra función que te crees en la que borres todos los campos sensibles de cambio, justo antes de volver a pintarlos con los nuevos datos

suerte

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

firefox
Citar            
MensajeEscrito el 28 Ago 2008 02:29 pm
Hola.. esta es la primera vez q escribo x aca. Soy nuevo en flash y estoy realizando mi primer flash q carga un xml externo desde el cual se carga la configuracion y los mensajes q muestra en pantalla. El problema es que si cambia el xml no cambia el contenido del flash hasta q lo cierre y lo vuelva a abrir.

Les dejo el codigo por aca...

//creamos nuestro objeto mensajes_xml para poder cargar las noticias
var mensajes_xml:XML = new XML();

//con la propiedad ignoreWhite activada establecemos que no se tomen en cuenta
//los espacios en blanco del XML (tabulaciones, saltos de linea, etc) IMPORTANTE!!!
mensajes_xml.ignoreWhite = true;

//creamos una funcion para cuando se invoque la carga de datos
//tiene un parámetro (en este caso le llamamo 'exito')
//su valor es TRUE si se logró cargar los datos y FALSE en caso contrario
mensajes_xml.onLoad = function(exito:Boolean){
//si se logro cargar llamamos a las funciones 'listar_mensajes' y 'carga_configuracion'pasandole como parámetros
//la lista de hijos nodo del nodo principal
if(exito)
{
// trace(this.firstChild.firstChild.childNodes);
trace(this.firstChild.childNodes[1].childNodes);
carga_configuracion(this.firstChild.firstChild.childNodes);
listar_mensajes(this.firstChild.childNodes[1].childNodes);
}
//si no se cargó correctamente, informamos
else trace(';( msj');
}

//listamos los mensajes que nos llegue como parametro en forma de array----->
//listar_mensajes(array_de_mensajes, array_de_configurcion)
carga_configuracion= function(configuracion:Array):Void{
//modificamos las propiedades del campo de texto para que funcione como queremos
with(mensajes_mc.mensajes_txt)
{
multiline = false; wordWrap = true; autoSize = true; selectable = true; embedFonts = false;
}
//Configuracion de la fuente. Los trace son para debug
mensajes_mc.mensajes_txt.font= configuracion[0].attributes.font_type;
trace(mensajes_mc.mensajes_txt.font);
mensajes_mc.mensajes_txt.textColor = "0x" + configuracion[0].attributes.font_color;
trace(mensajes_mc.mensajes_txt.textColor);
mensajes_mc.mensajes_txt.background = int(configuracion[0].attributes.font_background);
trace(mensajes_mc.mensajes_txt.background);
mensajes_mc.mensajes_txt.backgroundColor = "0x" + configuracion[0].attributes.font_background_color;
trace(mensajes_mc.mensajes_txt.backgroundColor);
mensajes_mc.mensajes_txt.size = configuracion[0].attributes.font_size;
trace(mensajes_mc.mensajes_txt.size);

//Fondo del movie clip
fondo_mc._width = configuracion[1].attributes.background_width;
trace(fondo_mc._width);
fondo_mc._height = configuracion[1].attributes.background_height;
trace(fondo_mc._height);
fondo_mc._x= configuracion[1].attributes.bg_position_x;
trace(fondo_mc._x);
fondo_mc._y= configuracion[1].attributes.bg_position_y;
trace(fondo_mc._y);
relleno = "0x" + configuracion[1].attributes.background_color;
ObjColor = new Color(fondo_mc);
ObjColor.setRGB(relleno);
trace(relleno);

//Lee imagen a cargar y su posicion en los ejes Y y X
var image = configuracion[2].attributes.img;
trace(image);
image_mc.loadMovie(image);
image_mc._x = configuracion[2].attributes.position_x;
trace(image_mc._x);
image_mc._y = configuracion[2].attributes.position_y;
trace(image_mc._y);
}

listar_mensajes = function(mensajes:Array):Void{
//exploramos cada elemento del array 'mensajes' que recibimos como parametro
//y vamos agregando dentro del campo de texto
for(i = 0; i < mensajes.length; i++) {
mensajes_mc.mensajes_txt.text += " " + mensajes[i].childNodes[0].nodeValue;
trace(mensajes[i].childNodes[0].nodeValue);
}
//enmascaramos los mensajes
mensajes_mc.setMask(mascara);

//Esta parte es para el movimiento en forma horizontal
mensajes_mc.onEnterFrame = function(){
this._x--;
if(this._x < mascara._x-this._width) this._x = mascara._x+mascara._width;
}
/*
//Esta parte es para el movimiento en forma vertical
mensajes_mc.onEnterFrame = function(){
this._y--;
if(this._y < mascara._y-this._height) this._y = mascara._y+mascara._height;
} */
}
//Invoca a la función "load" del objeto XML, pasandole por parametro
//La ruta de nuestro archivo XML
mensajes_xml.load('prueba3.xml');
[/color]


Espero alguien me pueda orientar... Trate de realizar el setInterval pero no pasa nada.. o es q aun no entiendo como fucniona.

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Ago 2008 02:53 pm
Donde está lo referente al setInterval para cargar el xml, postea esta parte.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 Ago 2008 03:31 pm
Gracias por tu interes, la funcion setInterval la quite porq no pasaba nada pero la pongo como la tenia al final del script.

function recargame()
{
mensajes_xml.load('prueba3.xml');
}
setInterval(recargame(), 5000);

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Ago 2008 04:56 pm
Intenta de esta forma:

Código ActionScript :

setInterval(recargame, 5000); 

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 29 Ago 2008 07:21 pm
Hola elchininet...

Intente como me dijiste y nada. De la forma q me propones ya no se mueve mi animacion, como si no llamara la funcion recargame(). Solo poniendo como parametro recargame() funciona :-(. Sigo atorado por aca y disculpa en contestar tarde pero peleando con otras cosas.


Gracias elchininet...

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ago 2008 08:33 pm
No se que puede estar pasando, hice una prueba sencilla en un momento y funciona perfecto, mira crea un documento en blanco, junto a tu XML, pon esto en el primer frame y pruébalo para que veas:

Código ActionScript :

var myXML:XML = new XML();

myXML.ignoreWhite = true;

myXML.onLoad = function(success:Boolean):Void{
   
   if(success){
      
      trace("yes");
      
   }
   
}

function recarga():Void{
   
   myXML.load("prueba3.xml");
   
}

var porTiempo:Number = setInterval(recarga, 500); //---He puesto medio segundo para que se vea la función del setInterval

recarga();


En un setInterval no se ponen los paréntesis, si se los añades es entonces cuando no funciona.
Quizás lo que te suceda es que no has llamado a la función en un inicio, fíjate que al final del setInterval llamo a la función para que se ejecute la primera vez, de lo contrario, en tu caso debes esperar 5 segundos para poder ver algún cambio.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 30 Ago 2008 04:55 am
Hola elchininet...

Tenias razon..

function recargame():Void
{
mensajes_xml.load('prueba3.xml');
}
//Intervalo de tiempo de recarga del archivo xml
setInterval(recargame, 500);
recargame();


Funciona de maravilla, se me paso invocar a la funcion correctamente. Te agradezco la ayuda y el tiempo invertido. Ahora el movie clip actualiza los datos y los agrega a los anteriores en el movieclip pero no se limpia el movieclip con los nuevos datos si no que los va agregando a la pelicula, supongo que es algun detalle de programacion en mi codigo.

Estoy muy contento porque esta fue mi primera intervencion y he tenido respuesta mas pronto de lo que imaginaba. Felicidades por su comunidad y espero poder contribuir de la misma forma aunque por el momento estoy aprendiendo en el proceso.


Muchas gracias elchininet!

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Ago 2008 01:03 pm

Ahora el movie clip actualiza los datos y los agrega a los anteriores en el movieclip pero no se limpia el movieclip con los nuevos datos si no que los va agregando a la pelicula, supongo que es algun detalle de programacion en mi codigo.


Depende de como se actualicen los datos, he intentado leer tu código pero no puedo porque no tiene formato, postea la parte de actualizar los datos con formato en el código y quizá te pueda ayudar:

Código :

[as]
//Pegas el código aquí
[/as]

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 01 Sep 2008 05:18 am
Hola elchininet!

Esta es la parte que actualiza los datos de la pelicula flash. La funcion recibe un array con los datos a mostrar q son extraidos del XML. El campo de texto dinamico (mensajes_txt) esta contenido dentro de un movie clip (mensajes_mc). mensajes_mc es enmascarado con otro movie clip (mascara) para poder mostrar el texto de mensajes_txt y realizar el desplazamiento (calculo con sumas y restas de coordenadas de movimiento de cada movie clip).

Basicamente es lo q hace esta funcion. Disculpa si no logro expresarme de forma correcta con los terminos tecnicos pero me estoy metiendo en esto.



Código ActionScript :

listar_mensajes = function(mensajes:Array):Void{   
   //exploramos cada elemento del array 'mensajes' que recibimos como parametro
   //y vamos agregando dentro del campo de texto
   for(i = 0; i < mensajes.length; i++) {
      mensajes_mc.mensajes_txt.text += "  " + mensajes[i].childNodes[0].nodeValue;
      trace(mensajes[i].childNodes[0].nodeValue);
   }
   //enmascaramos los mensajes
   mensajes_mc.setMask(mascara);
   
   //Esta parte es para el movimiento en forma horizontal
   mensajes_mc.onEnterFrame = function(){
   this._x--;
      if(this._x < mascara._x-this._width) this._x = mascara._x+mascara._width;
   }   
/*   
   //Esta parte es para el movimiento en forma vertical
   mensajes_mc.onEnterFrame = function(){
   this._y--;
      if(this._y < mascara._y-this._height) this._y = mascara._y+mascara._height;
   }   */
}



Gracias y saludos elchininet!

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Sep 2008 11:53 am
La siguiente instrucción le suma al valor que tiene "mensajes_txt" el nuevo valor:

Código ActionScript :

mensajes_mc.mensajes_txt.text += "  " + mensajes[i].childNodes[0].nodeValue;


No debes sumarlos:

Código ActionScript :

mensajes_mc.mensajes_txt.text = "  " + mensajes[i].childNodes[0].nodeValue;

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 03 Sep 2008 03:37 pm
Hola elchininet!

Veras si tengo que sumarlo porque es un array con texto en cada entrada del array y quiero que se muestren en una sola linea del flash. Si no realizo la suma como dices solo me coloca a la ultima entrada del arrar que recibo y eso no es lo que quiero si no que se muestren todos concatenados. Tambien tengo el problema de que cuando la cadena de texto que se forma es muy larga se corta en la presentacion y solo caben tantos caracteres como largo sea mi campo de texto en el flash

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Sep 2008 04:48 pm
hola pana espero te ayude mi comentario, pero debes convertir tu acaja de texto(Static text) como multiline eso te crea un scroll al costado de tu caja de texto a presentar y si no te sale el scroll debes asigname a la caja de texto como formato dinamic text y selecionas la propiedad "<>" esto hace que se convierta en formato HTML

Por riback

49 de clabLevel



 

Quito - Ecuador

msie
Citar            
MensajeEscrito el 03 Sep 2008 08:25 pm
Bueo en ese caso, vacía primero el campo de texto afuera del ciclo y dentro del ciclo lo llenas, así cada vez que lo recargues, primero se limpia:

Código ActionScript :

//---Fuera del ciclo
mensajes_mc.mensajes_txt.text = "";

//---Dentro del ciclo
mensajes_mc.mensajes_txt.text += "  " + mensajes[i].childNodes[0].nodeValue; 


Ahora si le pones estas propiedades al campo de texto dinámico:

Código ActionScript :

with(mensajes_mc.mensajes_txt){

    autoSize = true;
    wordWrap = true;

}


El campo seguirá del mismo ancho pero irá agrandando según se vaya introduciendo el texto.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 04 Sep 2008 02:38 pm
Hice lo de limpiar el mensaje fuera del ciclo y lo coloque en:

Código ActionScript :

function recargame()
{
   mensajes_xml.load('prueba3.xml');
   mensajes_mc.mensajes_txt.text = "";
}


Porque si lo coloco dentro de la funcion que realiza el llenado de mensajes no funcionaba, me mostraba la animacion pero sin mensajes.

Con respecto a la otra parte... esas configuraciones que mencionan las tengo com dicen. Es un text dinamico con autosize, etc. Lo que quiero que haga el flash es un efecto tipo marquesina en horizontal, es decir una sola linea con todos mis textos que extrae del XML concatenados.
Les dejo la parte donde se modifican las propiedades del campo de texto.

Código ActionScript :

   //modificamos las propiedades del campo de texto para que funcione como queremos
   with(mensajes_mc.mensajes_txt)
   {
      multiline = false; wordWrap = true; autoSize = true; selectable = true; embedFonts = false;
   }


Gracias por su ayuda

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Sep 2008 04:21 pm
Entonces si no quieres que se agrande el texto poco a poco, debes ponerle un tamaño fijo, quitarle autoSize y wordWrap y ponerle la propiedad:

Código ActionScript :

mensajes_mc.mensajes_txt.multiline = false; 

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 05 Sep 2008 12:45 am
:o Muhas gracias... todo funciona como debe!
Gracias por tomarte el tiempo para contestar

Ahora si todo OK!

Saludos!

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2008 04:16 am
Hola... oye una consulta nuevamente. Despues de q me ayudaran con la parte de los mensajes no le meti mas mano a este flash y funcionaba asi pero llego la part de cambiar la configuracion desde el XML y hay un detalle... las parte q configura el compo de texto dinamico parece cargarse porq el trace muestra las propiedades cargadas pero en el flash no se muestran. Concretamente... me carga el color q obtiene del XML pero no pela al tipo de fuente ni al tamaño.

Te muestro como tenia el codigo:

Código ActionScript :

        mensajes_mc.mensajes_txt.font= configuracion[0].attributes.font_type;
   trace(mensajes_mc.mensajes_txt.font);
   mensajes_mc.mensajes_txt.textColor = "0x" + configuracion[0].attributes.font_color;
   trace(mensajes_mc.mensajes_txt.textColor);
   mensajes_mc.mensajes_txt.size = configuracion[0].attributes.font_size;
   trace(mensajes_mc.mensajes_txt.size);


Como te comento, los trace me indican que sus propiedades tienen los valores del XML pero el flash no los respeta.

Luego intente esto

Código ActionScript :

var textFormat:TextFormat= new TextFormat();

   textFormat.font = configuracion[0].attributes.font_type;
   textFormat.textColor = "0x" + configuracion[0].attributes.font_color;
   textFormat.size = int(configuracion[0].attributes.font_size);
   
   mensajes_mc.mensajes_txt.setNewTextFormat(textFormat);


Esto tampoco funciona... luego intente esto...Tampoco funciona...

Código ActionScript :

var textFormat:TextFormat= new TextFormat(configuracion[0].attributes.font_type, "0x" + configuracion[0].attributes.font_color, int(configuracion[0].attributes.font_size));
   mensajes_mc.mensajes_txt.setNewTextFormat(textFormat);


He de comunicar q mi campo de texto dinamico esta dentro de un movieClip.

Alguna sugerencia?

Por g4rl0f3

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2008 09:07 am
Prueba actualizar el campo con el nuevo texto y utilizar después setTextFormat en vez de setNewTextFormat.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 10 Sep 2008 06:48 pm
Si, nuevamente tenias razon. Primero carge el texto en el campo y despues utilice el setTextFormat.
Nuevamente...Muchas Gracias!

Por g4rl0f3

6 de clabLevel



 

firefox

 

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