Comunidad de diseño web y desarrollo en internet online

Abrir url XML

Citar            
MensajeEscrito el 24 Nov 2008 02:23 pm
Buenos días:

tengo un problema, estoy realizando un banner rotativo en flash, que carga los datos desde un XML
esta es la carga del XML en flash:

Código :

for (i=0; i<total; i++) {
         imagen[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
         url[i] = xmlNode.childNodes[i].childNodes[1].firstChild.url;
      }


este es el XML:

Código :

<banner>
      <imagen>imagenes/turismo.jpg</imagen>
      <url>http://www.google.com</url>
   </banner>


ahora mi duda, como hago para que cuando yo de click sobre la imagen, me lleve a la url que está ligada al objeto en el XML???

Agradezco su ayuda

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 24 Nov 2008 08:06 pm
Mira estas líneas:

imagen[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
url[i] = xmlNode.childNodes[i].childNodes[1].firstChild.url;

Quiere decir que tienes un array de imágenes y otro de urls, no se como cargas los bannes, pero si le pasas el índice que le corresponde, pues ya lo pillan del array url

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Nov 2008 08:29 pm
gracias por responder solisarg,

el problema que tengo es el siguiente no se como crear la función para que al darle click sobre la imagen me lleve a la url correspondiente, intenté con el xml de este modo

Código :

<banner>
      <imagen url="http://www.google.com">work_images/turismo.swf</imagen> 
   </banner>

donde paso la url como parametro, pero no se que debo hacer para que abra el enlace al dar click sobre la imagen, pense que funcionaba como un href pero no.

Código :

function clickImagen(mc) {
   
    getURL(url, "_blank"); 
      
}

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 24 Nov 2008 08:35 pm
¿Es un banner o muchos banners? ¿Es un banner con muchas imagenes y por eso tienes que cargar la lista de urls?
Cuentanos (con exquisita y precisa brevedad) tu planteo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Nov 2008 09:12 pm
en total son 8 banners, cada uno tiene una imagen y una url asociada


si yo doy click sobre la imagen de seguros me debe llevar a la pagina de seguros etc...

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 24 Nov 2008 09:53 pm
Entonces el proceso sería:

1. cargar y parsear el XML, armando (como ya lo tienes) los arrays de imágenes y urls
2. Hacer un loop donde creas un contenedor externo al que le asignas la url en el onPress
3. Dentro del contenedor externo, creas un contenedor interno donde cargas la imagen (si no usaras dos contenedores, al cargar la imagen pierdes el onPress)
4. Yatá

Intenta codificarlo y ya nos cuentas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Nov 2008 09:59 pm
solisarg, pero como le asigno la url en el onPress?, ese ha sido mi lio, es decir no se como pasarle la url del XML a la funcion getURL

intenté de este modo

Código :

getURL(url, "_blank"); 

tambien intenté

Código :

getURL(url[i], "_blank"); 

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 24 Nov 2008 10:05 pm
El punto 2 implica un loop, la creación de dos contenedores y un callback on the fly, ¿de donde sale ese getURL?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Nov 2008 10:10 pm
ya tengo mis dos contenedores, lo del callback on the fly , no entiendo que es eso, luego de que creo mi segundo contenedor al cual llamaré menú, creo una funcion

function menuRelease(e) {

getURL(?????, "_blank");

}

si coloco una url manualmente por ejemplo

Código :

function menuRelease(a) {
   
    getURL("http://www.google.com", "_blank"); 
      
}

cada vez que doy click sobre una de las imagenes me abre la página de google, pero lo que quiero es que cargue la pagina de mi XML

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 24 Nov 2008 10:17 pm
Vale, aquí la idea en code

imagen y url son dos arrays con las correspondientes imágenes y urls

Código ActionScript :

for(var i:Number = imagen.length; i<imagen.length; i++){
   var holder :MovieClip = this.createEmptyMovieClip("holder"+i, i)
   holder._x = i*50 // ... lo que mida c/imagen de ancho
   var innerHolder:MovieClip = holder.createEmptyMovieClip("innerholder", 1)
   innerHolder.loadMovie(imagen[i])
   holder.url = url[i]
   holder.onPress = function(){
      getURL(this.url, "_blank")
   } 
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Nov 2008 10:19 pm
Gracias solisarg voy a probar y te comento como me fue

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 25 Nov 2008 09:30 pm
hola , intenté nuevamente, pero no me funciona, me abre el navegador y me aparece undefined

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 25 Nov 2008 10:31 pm
Sorry, aqui un error:

for(var i:Number = imagen.length; i<imagen.length; i++)

debe ser

for(var i:Number = 0; i<imagen.length; i++)

Para probarlo (con solo code)

Código ActionScript :

var url:Array = ["http://www.google.com", "http://cristalab.com", "http://flash-db.com"]
for(var i:Number = 0; i<url.length; i++){ 
   var holder :MovieClip = this.createEmptyMovieClip("holder"+i, i) 
   holder._y = i*30
   with(holder){
     beginFill(0xFF0000, 100)
     lineTo(100, 0)
     lineTo(100, 20)
     lineTo(0, 20)
     lineTo(0, 0)
     endFill()
   }  
   holder.url = url[i] 
   holder.onPress = function(){ 
       trace("Abro "+this.url)
      getURL(this.url, "_blank") 
   }  
} 


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Nov 2008 05:10 pm
Hola Solisarg, muchas gracias por tu ayuda, el ejemplo que me envias funciona de maravilla, pero no se como implementarlo en mi código, me podrias dar una mano??, en el ejemplo que me envías creas un arreglo de 3 posiciones con las url, pero en mi caso la url se carga del xml, entonces es ahi donde me pierdo, no se donde implementarlo.

Código :

//Cargo el xml

function loadXML(x) {
   if (x) {
      xmlNode = this.firstChild;
      thumb = [ ];
      url = [ ];
      total = xmlNode.childNodes.length;
      
      for (i=0; i<total; i++) {
         thumb[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
         url[i] = xmlNode.childNodes[i].childNodes[1].firstChild.url;
      }
      
      columnas = Number(this.firstChild.attributes.thumbColumns);
      filas = Number(this.firstChild.attributes.thumbRows);
      spacer = Number(this.firstChild.attributes.spacer);
      totalPorPagina = columnas*filas;

      thumbWidth = Number(this.firstChild.attributes.thumbWidth);
      thumbHeight = Number(this.firstChild.attributes.thumbHeight);

      border = Number(this.firstChild.attributes.border);

      if (total>totalPorPagina) {
         menuAtras_mc._visible = true;
         menuSiguiente_mc._visible = true;
      }
      
      buildThumbs(0);
   } else {
      trace("Error al cargar el archivo");
   }
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("banner.xml");

//Fin de la carga      
                
           
menuAtras_mc._x = 10-(menuAtras_mc._width/2);
menuAtras_mc._y = 145-(menuAtras_mc._height/2);
menuSiguiente_mc._x = 550-10-(menuSiguiente_mc._width/2);
menuSiguiente_mc._y = 145-(menuSiguiente_mc._height/2);


//funcion rollover
function menuRollOver(mc) {
   alphaTw = new Tween(thumbHolder["e"+int(mc)], "_alpha", Regular.easeOut, 100, 60, 10, false);
}
//funcion rollout
function menuRollOut(mc) {
   
   alphaTw = new Tween(thumbHolder["e"+int(mc)], "_alpha", Regular.easeIn,100, 100, 10, false);
}



function buildThumbs(n) {
   startX = 0;
   startY = 0;
   currentTotal = 0;

   xPos = ((550-((thumbWidth*columns)+(spacer*columns-1)))/2)+(spacer/2);
   yPos = ((300-((thumbHeight*rows)+(spacer*rows-1)))/2)+(spacer/2);

   for (i=0; i<total; i++) {
      removeMovieClip(thumbHolder["e"+int(i)]);
   }
      
   for (i=n; i<total; i++) {
      
      if (currentTotal<totalPorPagina) {
         
         var e:MovieClip = thumbHolder.inThumbHolder.duplicateMovieClip("e"+i, i);

         e._x = xPos+(thumbWidth+spacer)*((currentTotal)%columns);
         e._y = yPos+(thumbHeight+spacer)*(int((currentTotal)/columns));

         //cargo la imagen
         e.thumbLoader.loadMovie(thumb[i]);

         lastThumb++;
         currentTotal++;

         e.num = i;

         
         //onrelease sobe la imagen
         e.onRelease = function() {
            
            pic = this.num;
            menuRelease(this.num);
         }
         
      }
   }
   
}

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 28 Nov 2008 07:23 am
Pues la función menuRelease(this.num); que no pusiste sería algo así:

Código ActionScript :

function menuRelease(nun){
  getURL(url[num], "_new")
};


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 28 Nov 2008 03:18 pm
ya intenté de nuevo como me dices y me aparece lo siguiente, en el explorador

file:///C|/Documents%20and%20Settings/Principal/Escritorio/bannerrotativo/undefined

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 28 Nov 2008 03:38 pm
Declara url = [ ] fuera de la función para que su scope sea la línea de tiempo, pon la función menuRelease donde el resto del código

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 28 Nov 2008 03:44 pm
que pena solisarg no entiendo esa parte, debo declarar nuevamente url=[ ], la funcion menuRelease la coloqué donde esta todo el código, probé de varias maneras y siempre me sale el undefined

Por D-Virus

508 de clabLevel

3 tutoriales

 

Bogotá Colombia

chrome
Citar            
MensajeEscrito el 28 Nov 2008 04:01 pm
Acerca de scope, aquí explico algo: http://www.flash-db.com/Board/index.php?topic=4072.0

Lo que quiero decir al sacarlas fuera de la función es esto:

Código ActionScript :

var thumb = new Array()
var url = new Array();
function loadXML(x){
   .....


Luego dentro de la función release, mira a ver si existe:

Código ActionScript :

function menuRelease(nun){ 
  trace(url)
 ....
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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