Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Recorrer niveles de un XML con AJAX para galería con Lightbox

Estas en el tema de Recorrer niveles de un XML con AJAX para galería con Lightbox en el foro de Frameworks JS en Foros del Web. Buenas a todos!! Tengo un problemilla relacionado con Javascript y la lectura de un XML. Mi problema es bastante parecido al de este tema: [URL="http://www.forosdelweb.com/f77/recorrer-xml-314073/"]http://www.forosdelweb.com/f77/recorrer-xml-314073/[/URL] ...
  #1 (permalink)  
Antiguo 18/04/2011, 11:18
 
Fecha de Ingreso: abril-2011
Mensajes: 1
Antigüedad: 13 años
Puntos: 0
Pregunta Recorrer niveles de un XML con AJAX para galería con Lightbox

Buenas a todos!!

Tengo un problemilla relacionado con Javascript y la lectura de un XML.

Mi problema es bastante parecido al de este tema:
[URL="http://www.forosdelweb.com/f77/recorrer-xml-314073/"]http://www.forosdelweb.com/f77/recorrer-xml-314073/[/URL]

Pero ese tema es tan antiguo; que he decidido abrir uno nuevo.
Soy un poco cateto en programación, y después de días intentando encontrar la solución, al final he decidido pedir un poco de ayuda.
Si alguien pudiera echarme una mano le estaría muuuuy agradecido

Cuál es mi intención?

Hacer una galería de imágenes dinámica por XML, aunque el XML lo creo yo, a mano.
Mediante un XML se cargan los thumbs de la galería.
Sólo quiero cargar 1 thumb por cada proyecto.
Cuando hago click sobre una imagen, se abre un pop-up lightbox y allí puedo ver todas las imágenes de ese proyecto, con su información en el pie.
He leído por ahí que no se puede hacer esto, de cargar una galería lighbox con sólo un link; pero me ha salido "algo", así que he seguido intentándolo.

Entonces, tengo un XML con esta estructura:

Código XML:
Ver original
  1. <galeria>
  2.  
  3. <proyecto>
  4.     <ref>referencia1</ref>
  5.     <info>info del proyecto</info>
  6.     <icono>/img/icono1.jpg</icono>
  7.     <imagenes>
  8.         <imagen>/img/img1.jpg</imagen>
  9.         <imagen>/img/img2.jpg</imagen>
  10.         <imagen>/img/img3.jpg</imagen>
  11.  
  12.     </imagenes>
  13.                            
  14. </proyecto>
  15.  
  16.        
  17. <proyecto>
  18.     <ref>referencia2</ref>
  19.     <info>info del proyecto2</info>
  20.     <icono>/img/icono2.jpg</icono>
  21.     <imagenes>
  22.         <imagen>/img/img4.jpg</imagen>
  23.         <imagen>/img/img5.jpg</imagen>
  24.     </imagenes>                                            
  25. </proyecto>
  26. </galeria>

y tengo un código javascript así; lo pego todo por si os ayuda:


Código Javascript:
Ver original
  1. // Esta función la ejecuto en el body de la página
  2. function solicitud(){
  3.     createRequest();
  4.     var url = "galeria.xml";
  5.     request.open ("GET", url, true);
  6.     request.onreadystatechange = procesado;
  7.     request.send(null);
  8.  
  9. }
  10.  
  11.  
  12. function procesado(){
  13.    if (request.readyState == 4){
  14.     if(request.status == 200){ 
  15.         var datos=request.responseXML;
  16.         var destino=document.getElementById("contenido"); // es el DIV donde irá cargada la galería
  17.                
  18.     var listaULproyectos = document.getElementById("ulProyectos"); //Esta lista está dentro del DIV
  19.  
  20.     var divOculto = document.getElementById("divOculto");
  21.  
  22.     var proyecto = datos.getElementsByTagName("proyecto");
  23.     var ref = datos.getElementsByTagName("ref");
  24.     var info = datos.getElementsByTagName("info");
  25.     var icono = datos.getElementsByTagName("icono");
  26.     var imagenes = datos.getElementsByTagName("imagenes");
  27.     var imagen = datos.getElementsByTagName("imagen");
  28.    
  29.  
  30.     var listaLiproyectos;
  31.     var nodeImg;
  32.     var nodeImg2;
  33.     var nodeA;
  34.     var nodeA2;
  35.  
  36.         for (i=0; i<proyecto.length; i++){
  37.                    
  38.             nodeImg = new Image();
  39.             nodeImg.src = icono[i].firstChild.nodeValue;
  40.  
  41.             nodeImg.alt = info[i].firstChild.nodeValue;
  42.             nodeImg.setAttribute ("class", "imas");
  43.                                        
  44.             nodeA = document.createElement("a");
  45.             nodeA.setAttribute("title",info[i].firstChild.nodeValue);
  46.                    
  47.             nodeA.setAttribute("href", +imagen[i].firstChild.nodeValue);
  48.             nodeA.setAttribute("rel", "lightbox["+ref[i].firstChild.nodeValue+"]");
  49.             nodeA.appendChild(nodeImg);
  50.                
  51.             listaLiproyectos = document.createElement("li");
  52.             listaLiproyectos.appendChild(nodeA);
  53.             listaULproyectos.appendChild(listaLiproyectos);
  54.         }
  55.     }
  56.    }
  57. }

Hasta aquí, consigo que se me carguen los 2 thumbs en el DIV.

El problema viene ahora:
No sé cómo hacer un bucle y que sólo entre dentro de "imágenes"; que en el proyecto[0] son 3 imágenes, y en el proyecto[1] son 2.

Es aquí donde necesito ayuda :(

Necesito que, de imagen[0] a imagen[2] añadir un "href" a sus respectivas URLs; con sus "imagen[x].firstChild.nodeValue" y que cojan el "ref" de su nodo padre "proyecto[0]" …
De igual modo, necesito que, de la imagen[3] a imagen[4] haga lo mismo, pero tomando la "ref" de su nodo padre "proyecto[1]" para posteriormente construir el enlace para el lightbox, más o menos así:

Código Javascript:
Ver original
  1. nodeA2.setAttribute("href", +imagen[x].firstChild.nodeValue);
  2. nodeA2.setAttribute("rel", "lightbox["+ref[i].firstChild.nodeValue+"]");
  3. nodeA2.appendChild(nodeImg);
  4. divOculto.appendChild(nodeA2);

Como necesito hacer un "href" a unas imágenes que aun no se ven, las incrusto dentro de un div oculto; algo que no sé si es muy ortodoxo… :S

Bueno, después de todo el rollo, me gustaría agradecer a todos los que hayan prestado atencion y intenten echarme un cable.

Gracias y saludos!!!!

Última edición por photek212; 18/04/2011 a las 11:27

Etiquetas: ajax, galeria, lightbox, nodos, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:58.