Comunidad de diseño web y desarrollo en internet online

Cargar xml para utilizarlo después

Citar            
MensajeEscrito el 09 Sep 2009 11:39 am
Hola a todos, hace varios días que vengo renegando con esto lo he encarado de varias formas pero no he podído solucionarlo.
La idea es la siguiente, tengo una lista de productos y sus categorías, como la lista es larga lo voy separando por páginas, al presionar sobre una categoría, se filtra la lista y vuelve a mostrar desde la primera página.
No es nada complicado en el caso de utilizar php, pero con flash se me ha complicado.
En flash tengo un botón de categoría el cual lo voy duplicando por cada categoría que se encuentra en un xml, despues tengo 8 mc en donde voy agregando los datos de los productos a medida que los voy leyendo del xml, el código es el siguiente:

Código ActionScript :

// Variables que vamos a utilizar a lo largo de la pelicula
var xmlProductos:XML;
var xmlCategorias:XML;
registros = 0;
paginas = 0;
cantRegistros = 5;
categoria = -1;
clip = this;
// Funcion que carga la cantidad de de registros y de páginas dependiendo de una categoría y la cantidad de registros que se desea mostrar por páginas
function cargarValores(pCategoria){
   var texto_php = new LoadVars;
   texto_php.onLoad = function() {
      registros = texto_php.cantidad;
      paginas = texto_php.paginas;
   };
   texto_php.load(_root.carpeta+"calcular_productos.php?idcat=" + pCategoria + "&cant=" + cantRegistros);
};
// Función para cargar las categorías
function cargarCategorias(){
   var GenCat = new LoadVars;
   GenCat.load(_root.carpeta+"categorias.php"); 
   xmlCategorias = new XML();
   xmlCategorias.ignoreWhite = true;
   xmlCategorias.onLoad = function(exito){
      if(exito){
         var i = 0;
         while(xmlCategorias.firstChild.childNodes[i].firstChild != null){
            clip.categoria_mc.duplicateMovieClip ("categoria_mc" + i, i);
            clip["categoria_mc" + i].txt.text = xmlCategorias.firstChild.childNodes[i].firstChild.firstChild.nodeValue;
            clip["categoria_mc" + i].idcat.text = xmlCategorias.firstChild.childNodes[i].attributes.id;
            clip["categoria_mc" + i]._y += (clip["categoria_mc" + i]._height * (i+1));
            i++;
         }
      }
   }
   xmlCategorias.load(_root.carpeta+"categorias.xml");
};
//Funcion para limpiar la lista de productos
function limpiarLista(){
   for(var i=0;i<8;i++){
      clip["producto_mc" + i].codigo.text = "";
      clip["producto_mc" + i].producto.text = "";
      clip["producto_mc" + i].categoria.text = "";
      clip["producto_mc" + i].precio.text = "";
   }
};
// Función para cargar los productos, pero no mostrarlo
function cargarProductos(pCategoria){
   var GenProd = new LoadVars;
   GenProd.load(_root.carpeta+"productos.php?idcat=" + pCategoria);
   cargarValores(pCategoria);
   xmlProductos = new XML()
   xmlProductos.ignoreWhite = true;
   xmlProductos.load(_root.carpeta+"productos.xml");
};
// Función para mostrar los productos dependiendo de la categoría
function mostrarProductos(pNroPag){
   limpiarLista();
   var inicio = (pNroPag * cantRegistros) - cantRegistros;
   var final = 0;
   if(pNroPag == paginas){
      final = paginas;
   }
   else{
      final = pNroPag * cantRegistros;
   }
   _root.pos_mc.var1.texto.text = "Inicio = " + inicio;
   _root.pos_mc.var2.texto.text = "Final = " + final;
   for(i=inicio;i<final;i++){
      clip["producto_mc" + i].codigo.text = xmlProductos.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
      clip["producto_mc" + i].producto.text = xmlProductos.firstChild.childNodes[i].childNodes[2].firstChild.nodeValue;
      clip["producto_mc" + i].categoria.text = xmlProductos.firstChild.childNodes[i].childNodes[7].firstChild.nodeValue;
      clip["producto_mc" + i].precio.text = "$" + xmlProductos.firstChild.childNodes[i].childNodes[4].firstChild.nodeValue;
   }
};


A las categorías las carga bien, el problema es al cargar los productos que siempre me muestra undefined, yo lo que estoy haciendo es, primero cargo el archivo xml con la función cargarProdcuctos(pCategoria) en donde le paso la categoría por parametro y por medio de un script php genero el archivo xml, y luego con la función mostrarProductos(pNroPag) los quiero mostrar en los mc de la lista y en cada botón de número de página voy llamando a esta función.

La verdad es que no se porqué al querer cargar los datos del xml en la lista me da undefined, ya que si la parte de cargar los datos lo pongo en el evento onLoad del objeto xml me carga los datos, pero no puedo navegar por las páginas siguientes, solo me carga el primero.

Saludos.

Por totote

18 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Sep 2009 01:33 pm
Es un poco largo el code, pero en principio agrega algún random a la llamada del PHP apra asegurarte que no lo pilla del cache

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Sep 2009 01:46 pm
Jorge gracias por contestar, al final lo resolví de otra manera, modifiqué el script php para que me devuelva solo los registros que voy a mostrar y luego simulo el xml sobre el mismo script, y en flash cargo el script y luego lleno la lista en el evento onLoad del xml.

En fin, el código resultante es este

Código ActionScript :

// Variables que vamos a utilizar a lo largo de la pelicula
registros = 0;
paginas = 0;
cantRegistros = 5;
categoria = -1;
inicio = 0;
clip = this;
// Funcion que carga la cantidad de de registros y de páginas dependiendo de una categoría y la cantidad de registros que se desea mostrar por páginas
function cargarValores(pCategoria){
   var texto_php = new LoadVars;
   texto_php.onLoad = function() {
      registros = texto_php.cantidad;
      paginas = texto_php.paginas;
   };
   texto_php.load(_root.carpeta+"calcular_productos.php?idcat=" + pCategoria + "&cant=" + cantRegistros);
};
// Función para cargar las categorías
function cargarCategorias(){
   var xmlCategorias:XML = new XML();
   xmlCategorias.ignoreWhite = true;
   xmlCategorias.onLoad = function(exito){
      if(exito){
         var i = 0;
         while(xmlCategorias.firstChild.childNodes[i].firstChild != null){
            clip.categoria_mc.duplicateMovieClip ("categoria_mc" + i, i);
            clip["categoria_mc" + i].txt.text = xmlCategorias.firstChild.childNodes[i].firstChild.firstChild.nodeValue;
            clip["categoria_mc" + i].idcat.text = xmlCategorias.firstChild.childNodes[i].attributes.id;
            clip["categoria_mc" + i]._y += (clip["categoria_mc" + i]._height * (i+1));
            i++;
         }
      }
   }
   xmlCategorias.load(_root.carpeta+"categorias.php");
};
//Funcion para limpiar la lista de productos
function limpiarLista(){
   for(var i=0;i<8;i++){
      clip["producto_mc" + i].codigo.text = "";
      clip["producto_mc" + i].producto.text = "";
      clip["producto_mc" + i].categoria.text = "";
      clip["producto_mc" + i].precio.text = "";
   }
};
// Función para cargar los productos
function cargarProductos(pCategoria,pNroPag){
   limpiarLista();
   cargarValores(pCategoria);
   var xmlProductos:XML = new XML()
   xmlProductos.ignoreWhite = true;
   xmlProductos.onLoad = function(){
      i = 0;
      while(xmlProductos.firstChild.childNodes[i].firstChild != null){
         clip["producto_mc" + i].codigo.text = xmlProductos.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
         clip["producto_mc" + i].producto.text = xmlProductos.firstChild.childNodes[i].childNodes[2].firstChild.nodeValue;
         clip["producto_mc" + i].categoria.text = xmlProductos.firstChild.childNodes[i].childNodes[7].firstChild.nodeValue;
         clip["producto_mc" + i].precio.text = "$" + xmlProductos.firstChild.childNodes[i].childNodes[4].firstChild.nodeValue;
         i++;
      }
   }
   xmlProductos.load(_root.carpeta+"productos.php?idcat=" + pCategoria + "&pag=" + pNroPag + "&cant=" + cantRegistros);
   _root.pos_mc.var1.texto.text = "Inicio = " + inicio;
   _root.pos_mc.var2.texto.text = "Final = " + final;
};

Por totote

18 de clabLevel



Genero:Masculino  

firefox

 

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