Comunidad de diseño web y desarrollo en internet online

Noticiero Flash Xml con Temporizador

Citar            
MensajeEscrito el 17 Jul 2008 07:30 pm
Hola

Estoy utilizando el lector de noticias en flash con Xml de "jmontoya" que encontré entre los turoriales de Cristalab. Es muy práctico y sencillo, pero estoy intentando colocar un temporizador dentro del código sin mucho éxito. Lo que quiero es hacer que el noticiero cambie la noticia automáticamente cada tantos segundos y vuelva a empezar al llegar a la última.

Lo he adaptado del original para que no utilice imágenes, por que no me interesa en este caso

Este es el código:

Código :

//Permite caracteres tradicionales como letras con tilde la ñ, etc.
System.useCodepage = true;

//Se declara la variable indice de tipo número (utilizada para referencia la noticia a mostrar)
var indice:Number;

//Se declara la variable noticias_xml de tipo XML (utilizada para almacenar el documento xml)
var noticias_xml:XML;

/*
Funcion cargarDatos (utilizada para cargar y cambiar las noticias en el documento)
Esta función recibe un parámetro "_indice" que corresponde al elemento noticia a mostrar
*/
function cargarDatos(_indice:Number){
//Se inicializan variables utilizadas para almenar los datos de una noticia
var fecha:String;
var titulo:String;
var mensaje:String;
var imagen:String;

//Recuperando datos del objeto xml
//Se accede al primer elemento [noticia] y se recupera la fecha desde el atributo [fecha]
fecha = noticias_xml.firstChild.childNodes[_indice].attributes.fecha;

//Se accede al primer hijo de elemento [noticia] y se recupera al valor del primer elemento de [titulo]
titulo = noticias_xml.firstChild.childNodes[_indice].firstChild.firstChild.nodeValue;

//Se accede al segundo hijo de elemento [noticia] y se recupera el valor del primer elemento de [mensaje]
mensaje = noticias_xml.firstChild.childNodes[_indice].firstChild.nextSibling.firstChild.nodeValue

//Mostrando los datos recuperados en el cuado de texto mensaje_txt
_root.mensaje_txt.htmlText = "";
_root.mensaje_txt.htmlText += "<p align='center'><font color='#006633' size='12'><b>" + titulo + "</b></font></p>";
_root.mensaje_txt.htmlText += "<p><font size='10'>" + mensaje + "</font>";
_root.mensaje_txt.htmlText += "<font color='#666666' size='10'>Publicado: " + fecha + "</font></p>";

}
//Función que permite avanzar a la [noticia] siguiente almacenada en el objeto xml
siguiente_btn.onPress = function(){
//comprobando si existe el siguiente elemento [noticia]
if(noticias_xml.firstChild.childNodes[indice+1] != null){//retringue a avanzar solo si hay una [noticia] siguiente
indice++; //incrementado en uno el indice
cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla
}

}

//Función que permite retroceder a la noticia anterior almacenada en el objeto xml
anterior_btn.onPress = function(){
//comprobando si existe una elemento [noticia] anterior
if(noticias_xml.firstChild.childNodes[indice-1] != null){//retringue a avanzar solo si hay una [noticia] anterior
indice--; //reducciendo en uno el indice
cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla
}
}


//Inicializaciones
indice=0; //inicializando indice en 0 para mostrar la primera noticia

//creando el objeto noticias_xml de typo XML
noticias_xml = new XML();

//Permite que el objeto XML ignore los espacios en blanco entre marca y marca del documento XML
noticias_xml.ignoreWhite = true;

//El método load() permite cargar el documento xml "noticias.xml"
noticias_xml.load("noticias.xml");

//El evento onLoad de activa cuado se haya cargado el documento noticias.xml
noticias_xml.onLoad = function(){
//Se llama a la funcion cragarDatos para mostar la primera noticia (esto por la variable indice en 0)
cargarDatos(indice);
}


Alguien me podría ayudar para introducir un temporizador que haga pasar las noticias solas y vuelva a empezar desde el principio cuando llegue a la última?

Muchas gracias por adelantado.

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 10:38 am
Te olvidaste de darle formato

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2008 11:32 am
Vaya, no lo sabía, gracias.

Aquí va el código formateado de nuevo. A ver si alguien me puede ayudar.

Código :

//Permite caracteres tradicionales como letras con tilde la ñ, etc.
System.useCodepage = true; 

//Se declara la variable indice de tipo número (utilizada para referencia la noticia a mostrar)
var indice:Number; 

//Se declara la variable noticias_xml de tipo XML (utilizada para almacenar el documento xml)
var noticias_xml:XML; 

/*
Funcion cargarDatos (utilizada para cargar y cambiar las noticias en el documento)
Esta función recibe un parámetro "_indice" que corresponde al elemento noticia  a mostrar
*/
function cargarDatos(_indice:Number){
      //Se inicializan variables utilizadas para almenar los datos de una noticia
      var fecha:String;
      var titulo:String;
      var mensaje:String;
      var imagen:String;
      
      //Recuperando datos del objeto xml
      //Se accede al primer elemento [noticia] y se recupera la fecha desde el atributo [fecha]
      fecha = noticias_xml.firstChild.childNodes[_indice].attributes.fecha;
      
      //Se accede al primer hijo de elemento [noticia] y se recupera al valor del primer elemento de [titulo]
      titulo = noticias_xml.firstChild.childNodes[_indice].firstChild.firstChild.nodeValue;
      
      //Se accede al segundo hijo de elemento [noticia] y se recupera el valor del primer elemento de [mensaje]
      mensaje = noticias_xml.firstChild.childNodes[_indice].firstChild.nextSibling.firstChild.nodeValue
      
      //Se accede al último hijo de elemento [noticia] y se recupera el valor del primer elemento de [imagen]
      imagen = noticias_xml.firstChild.childNodes[_indice].lastChild.firstChild.nodeValue
      
      //Mostrando los datos recuperados en el cuado de texto mensaje_txt y cargando la imagen en pantalla_mc
      _root.mensaje_txt.htmlText = "";
      _root.mensaje_txt.htmlText += "<p align='center'><font color='#006633' size='12'><b>" + titulo + "</b></font></p>";
      _root.mensaje_txt.htmlText += "<p><font size='10'>" + mensaje + "</font>";
      _root.mensaje_txt.htmlText += "<font color='#666666' size='10'>Publicado: " + fecha + "</font></p>";
      //Cargado la imagen JPG externa en el clip pantalla_mc con el valor recuperado del objeto xml
      _root.pantalla_mc.loadMovie(imagen);   
   }

//Función que permite avanzar a la [noticia] siguiente almacenada en el objeto xml
siguiente_btn.onPress = function(){   
   //comprobando si existe el siguiente elemento [noticia]
   if(noticias_xml.firstChild.childNodes[indice+1] != null){//retringue  a avanzar solo si hay una [noticia] siguiente
         indice++; //incrementado en uno el indice
         cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla
         }
   }

//Función que permite retroceder a la noticia anterior almacenada en el objeto xml   
anterior_btn.onPress = function(){
   //comprobando si existe una elemento [noticia] anterior
   if(noticias_xml.firstChild.childNodes[indice-1] != null){//retringue  a avanzar solo si hay una [noticia] anterior
         indice--; //reducciendo en uno el indice
         cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla
         }
   }   
   
//Inicializaciones
indice=0; //inicializando indice en 0 para mostrar la primera noticia

//creando el objeto noticias_xml de typo XML
noticias_xml = new XML();

//Permite que el objeto XML ignore los espacios en blanco entre marca y marca del documento XML
noticias_xml.ignoreWhite = true;

//El método load() permite cargar el documento xml "noticias.xml"
noticias_xml.load("noticias.xml");

//El evento onLoad de activa cuado se haya cargado el documento noticias.xml
noticias_xml.onLoad = function(){
         //Se llama a la funcion cragarDatos para mostar la primera noticia (esto por la variable indice en 0)
         cargarDatos(indice);         
   }


Repito: Estoy buscando la manera de añadirle a este código un temporizador para que Pase de noticia cada tantos segundos, y que haga loop, es decir, que vuelva a empezar al llegar a la última. No sé por donde empezar.

Un saludo

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 11:37 am
Aquí va el Xml

Código :

<?xml version="1.0" encoding="iso-8859-1"?>
<noticias>
   <noticia fecha="14/04/2005"> 
      <titulo>Nave rusa tripulada se acopla sin problemas a la Estación Espacial Internacional</titulo>
      <mensaje>Moscú (dpa) - La nave rusa Soyuz, con tres tripulantes a bordo, se acopló hoy automáticamente sin problemas a la Estación Espacial Internacional (ISS) a las 02:20 GMT del domingo, informó hoy el centro de control de vuelo ruso cerca de Moscú.</mensaje>      
      <image>nave.jpg</image>
   </noticia>
   
   <noticia fecha="25/02/2005"> 
      <titulo>Finaliza estado de excepción pero crece descontento</titulo>
      <mensaje>Luego de que el presidente de Ecuador, Lucio Gutiérrez, levantara el estado de emergencia decretado en Quito el viernes, las multitudinarias protestas en dicha ciudad exigiendo la dimisión del mandatario empezaron a extenderse a otras regiones y amenazan con abarcar todo el país.</mensaje>      
      <image>vaticano.jpg</image>
   </noticia>
   
   <noticia fecha="10/01/2005"> 
      <titulo>Intel pronostica que banda ancha en celulares empezará en 2006</titulo>
      <mensaje>La nueva tecnología inalámbrica de banda ancha WiMax está empezando a recibir la atención de los operadores de telefonía fija y móvil, pero aún tardará varios años hasta que sea utilizada por un mercado masivo de consumidores, anunció Intel.</mensaje>      
      <image>intel.jpg</image>
   </noticia>

</noticias>



En realidad el material, que se puede descargar completo, con el fla, xml y fotos, salió de este tutorial de Jmontoya. [url]link[/url]: http://www.cristalab.com/tutoriales/186/lector-de-noticias-xml-en-flash-con-imagenes.html

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 11:37 am
Las noticias las carga aquí:

noticias_xml.load("noticias.xml");

Entonces deberías hacer una función loadNoticias donde se ejecutara esto y usar un setInterval para llamarla. Agrega un random a la llamada para que no cargue el XML desde el cache

noticias_xml.load("noticias.xml?"+Math.random());

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2008 11:46 am
Gracias por las respuestas Jorge. Pero no comprendo bien. Soy novato en AS y aunque intento enterarme, a veces estoy muy perdido.

¿Debería sustituir la linea que has escrito tu por la que me comentas? y debo añadir el setinterval, supongo. En ese caso te agradecería que me explicases de que manera y donde en el código.

Lo del random no lo entiendo. No sé para que hace falta que no lo cargue desde el caché.

Gracias

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 12:39 pm
Ok, entendí mal, intenta

Código :

function siguiente(){
  siguiente_btn.onPress()
}
var refresca = setInterval(siguiente, 2000)


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2008 12:43 pm
Genial! funciona! Muchas gracias Jorge!

¿Sería posible hacer que cuando llegase a la ultima volviese a empezar??

Te agradezco mucho tu ayuda :)

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 01:07 pm
Si soy capaz de resolver ese punto reenviaré el código al tutorial de Jmontoya. Al menos es lo que puedo hacer para colaborar de alguna forma con este tema y que las demás personas que busquen una solución sencilla a este problema (como me pasó a mi), puedan tener una información más completa.

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 01:31 pm
Modifica el botón siguiente

Código :

siguiente_btn.onPress = function(){   
        indice=(noticias_xml.firstChild.childNodes[indice+1] != null)?indice+1 : 0; //incrementado en uno el indice
       cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2008 02:39 pm
Joe, qué fácil parece.

¿Qué es lo que has modificado y de que manera funciona?

Gracias Jorge. Me has sacado de un buen apuro.

Un saludo.

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2008 02:47 pm
Cuando llega al final del array de noticias, el indice vuelve a cero

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Jul 2008 11:16 am
Me pasa una cosa curiosa. Estoy probando el noticiero como una sección más de un sitio en flash, pero cuando cambio de sección y vuelvo, es como si las noticias se volvieran locas y cambian muy ráidamente, aun cuando tengo el tiempo de cambio ajustado a 5 segundos. Alguna idea de por que? quizás cada vez que entro a la sección de noticias debería resetear el script o algo así?

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Jul 2008 11:41 am
Se acumulan los setInterval, decláralo solo una vez, por ejemplo

if(!refresca) refresca = setInterval(siguiente, 2000)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Jul 2008 11:46 am
Entonces debería colocar esa linea debajo de la variable setinterval?

asi

Código :

var refresca = setInterval(siguiente, 5000)// 5000 = cada 5 segundos.
if(!refresca) refresca = setInterval(siguiente, 2000)


Así me sigue pasando lo mismo..

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Jul 2008 11:56 am
Lo estás declarando dos veces. Lo que puse es: si no existe, crearlo. Si igual lo creas, pues no sirve. Debería decir:

if(!refresca) refresca = setInterval(siguiente, 5000)// 5000 = cada 5 segundos.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Jul 2008 12:01 pm
Ook. Arreglado.

Ahora funciona perfectamente.

Te agradezco mucho la ayuda Jorge.

Estoy intentando ponerme en contacto con el creador del tutorial pero no responde. Quizás debería colgar un nuevo tutorial con la adaptación, por que creo que es un trabajo muy interesante por la sencillez de uso y su funcionalidad, para aquellos que necesiten un noticiero editable en flash.

Un saludo con los mejores deseos.

Oscar

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Jul 2008 12:06 pm
Postea las modificaciones que hiciste en aportes, los moderadores decidirán si es pasable a TIP

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Jul 2008 12:11 pm
Así lo haré.

Un saludo

Por saukob

9 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Sep 2008 12:59 am
Hola amigos, como uds. yo también he estado aprovechando el excelente tutorial de nosticiero vía xml. Y me sirvió para ingresar en esta alternativa de rotar noticias. Me surgen dos dudas y tal vez uds. con más experiencia me las puedan responder. La primera, es, si deseo incluir un nuevo campo de texto (por ej. subtitulo) ¿cómo lo declaro en el AS? en el xml, lo agregaría después de titular y antes de mensaje.
La otra pregunta. ¿cómo hago un lector de titulares? o sea, con algnos campos de texto, me muestre los diferentes titulares que incluye el archivo "noticias.xml" conla fecha y podría ser una miniatura de la imagen.
Bueno, desde ya muchas gracias por la ayuda.
Un saludo.
CRD

Por CRD

80 de clabLevel



Genero:Masculino  

Diseño Filete Ilustración

msie7
Citar            
MensajeEscrito el 14 May 2009 01:38 am
Vale, aunque casi un año después, posteé la modificación en Aportes. Gracias de nuevo por la ayuda y disculpad el retraso...

Saludos

Por saukob

9 de clabLevel



Genero:Masculino  

firefox

 

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