Ayuda - Búsqueda - Miembros - Calendario
Versión Completa: Catálogo De Artículos Con Buscador
Swishmax.es. Foro de consulta en español > SwishMax > SwishMax 2
dios_ohm
Hola amigos:

Los archivos que podrán ver al pié de éste post corresponden a una parte de un catálogo generado desde SWISH Max 2 2009.01.20 pasan a manos de SwishStudio para finalizar en un CD autoejecutable, hago la aclaración porque seguramente les vá a llamar la atención el peso, la falta de preloaders y demás elementos que no posee por no ser para uso en la web.
Este catálogo hace tiempo que se viene reformulando, actualizando, en fin, fue creciendo; en sus comienzos contaba con no más de 100 artículos y hoy día llega casi a los 3000 entre todos los rubros, la parte que aquí les posteo es las más importante en cuanto a número de archivos externos a manejar; en lo que respecta al catálogo en sí, más allá de los gustos en cuanto diseño, se puede decir que funciona pero ha crecido tanto que surge la necesidad de agregarle un buscador de artículos por número de código de lista de precios; buscando en el foro, encontré muchísima ayuda que obviamente les agradezco sobremanera yá que si bien no me satisface plenamente mi logro personal, el objetivo está logrado, el buscador funciona y lo podrán ver al descargar los archivos y ponerlo en marcha, el tema que me lleva a escribirles, además de querer compartir la experiencia, es el de ver si a alguien se le ocurre una idea mejor en base a los elementos que les he descripto y que yá están listos para el cierre del catálogo a mediados de marzo, fundamentalmente lo que no me satisface es la velocidad de búsqueda, les dejo la inquietud y les agradezco de antemano el haber llegado hasta aquí.

Aclaración:
El MC madre es el archivo sabanas.swf, arranca con el archivo catalogo_sabanas.swf y desde ahí, mediante un botón, carga buscador_sabanas.swf

Un gran saludo desde Buenos Aires - Argentina

Ariel

PD: Debido al límite en cuanto a la subida de archivos dejo un enlace al .rar en cuestión

Enlace a catalogo.rar
YUNKE
Hola q tal, descargue y revise tus archivos y felicito lo q has logrado al cargar externamente los textos e imagenes, sim embargo cada item tiene un codigo q solo es "buscable" si se usa mayusqulas, ejemplo, uno es el "SG102", pero, si en el buscador pongo "sg102" q esta en minuscula me sale el error de qno esta en la base de datos, obviamente el item propiamente dicho esta, no se si le pudieses colocar en la accion:

else if (busqueda =="SG102") {
gotoAndPlay("SG102");
}
else if (busqueda =="sg102") {
gotoAndPlay("SG102");
}
____________________

Aqui repito el codigo pero diciendole q si tipeo en SG102 o sg102 me arroje el mismo resultado


cancrexo
-------INCISO---

Amigo Yunke.
No es por darmelas de listillo, pero esa solución que propones no es correcta. ¿Qué pasaría si el artículo fuese sG102?¿Y con Sg102? Haciéndolo como indicas, tampoco resultaría la búsqueda. Para eso mejor usar la función toLowerCase y realizar la búsqueda por minúsculas, por ejemplo.

---- FIN DEL INCISO ----

Amigo ohm:
Después de ver tus archivos, honestamente tengo que alabar tu tenacidad para poder armar eso, Y nada menos que con archivos de texto. Vaya tela. blink.gif

Solo por curiosidad ¿cuanto te ha llevado hacer eso? Porque ... buf!!

Ni que decir tiene que es algo que desde mi punto de vista, no se debe hacer. Que para algo existen las bases de datos hombre....
Eso con una base de datos Mysql y compilando el exe con Zinc 3.0 o SwishStudio quedaría bastante chulo. Y ni punto de comparación con la velocidad de búsqueda.

El sistema de búsqueda, aunque como tu dices funciona, me parece bastante lamentable (programaticamente hablando claro).

En el botón buscar Tienes algo así:
CÓDIGO
if (busqueda =="SG100") {
        gotoAndPlay("SG100");
    }
    else if (busqueda =="SG101") {
        gotoAndPlay("SG101");      
    }
    else if (busqueda =="SG102")
...
{


Es decir quetienes más de 900 líneas de código y vas haciendo un if (una sentencia de comparación suuuuuuper lenta) para cada posible elemento hasta dar con el que quieres. Osease que si buscas el elemento digamos número 300, tendrás que hacer antes 299 comparaciones if. Sin comentarios...

La escena buscador tiene aproximadamente 6700 línea de código ph34r.gif , cuando creo que con no más de 30 líneas se podría implementar lo que has hecho. Por ejemplo. En el botón buscar pones solo este código:
CÓDIGO
on (release,keyPress("<Enter>")) {
  
    gotoAndPlay(2);
    

}


En la escena buscador borra todos los efectos place y remove del textbox y deja solo este código en dicha escena:
CÓDIGO
onSelfEvent (load) {
    var file_contents : String;    
    lv = new LoadVars();    
   lv.onData = function(datos){
        if(datos == undefined){
            trace("error");
            gotoAndPlay("ERROR");  
        }else{
            // Se encontró el archivo
            file_contents = datos.split("\r\n").join("\n");
            trace(datos)
            gotoAndPlay(3)    
        }  
    }  
}
onFrame (1) {
    stop();
}
onFrame (2){
    cadenaAbuscar = busqueda.toLowerCase().trim();
    trace("Buscando: "+ cadenaAbuscar);    
    fade.gotoAndPlay(1);  
    lv.load("textos/sabanas/" + cadenaAbuscar + ".txt");
    stop();
}
onFrame (4){
    foto.loadMovie("imagenes/sabanas/" + cadenaAbuscar +".jpg");
    this.textscroll.SetText(file_contents);
    stop();
}
onFrame(5){
     setLabel("ERROR");
     file_contents = "";
     foto.unloaMovie(); // O carga una foto de errror
     this.textscroll.SetText("No se encontró el modelo");
     stop()
}


Y obtienes exactamente el mismo resultado, un búsqueda mucho más rápida y evitas la necesidad de modificar el swi cada vez que añades un artículo.


Vuelvo a repetir: me has dejado alucinado con tu tenacidad y el tiempo que has perdido.

Salu2
dios_ohm
...::: Inciso/

Amigo Yunke:

Muchas gracias por tu preocupación y tu tiempo, aquí el amigo Cangrexo nos pega duro pero merece la pena leerlo cuando nos dá cátedra.
Ví tu último trabajo, MUY BUENO por cierto, espero que le hagas caso al "profe", leí su opinión y la comparto totalmente.

Un gran saludo!

/Fin del inciso :::...

Amigo Cangrexo:

Tienes toda la razón del mundo en cuanto a la pobreza programática, es sin ninguna duda parte de mi ignorancia que de hecho fue lo que me ha traido hasta aquí con la intención de aprender y aprehender de todos ustedes, de más está decirte que no tengo más que palabras de gratitud por el tiempo que has empleado para analizar mi tema y solucionar tan simplemente algo que jamás hubiera resuelto por las mías por más, como bien dices, tiempo y tenacidad que haya puesto de mi parte, respecto a tu inquietud por saber el tiempo que me ha llevado te cuento que gracias al bloc de notas junto con sus funciones reemplazar, copiar y pegar me lo han hecho menos tedioso de lo que puedas imaginar.

Lo de la base de datos MySQL es una asignatura que tengo pendiente, no dudo en cuanto a lo de la versatilidad y velocidad pero quedará para la presentación de la próxima temporada, el tiempo asecha y debo terminar ésto cuanto antes administrando los recursos existentes de la mejor manera posible; ya te fastidiaré con mis consultas llegado el momento.

He analizado y puesto en marcha tu código, es maravilloso como funciona, me he atrevido a modificarle algunas cosas y a agregarle otras que sin duda se te han pasado en la carrera por escribir al contestarme, cabe destacar que también me he atrevido a utilizarlo para la parte del catálogo, me ha ido bastante bien, pero claro, mi ignorancia programática es tal que no he podido lograr mi propósito plenamente, si tienes tiempo para fijarte verás que a fuerza de algunas horas y mucha tenacidad logré hacerlo funcionar, las dificultades que encuentro, y no hallo la forma para resolverlas, son las siguientes:

1) Necesito que el botón "botonadelante" y el botón "botonatras" aparezcan y desaparezcan oportunamnete, osea, que expuesto el primer artículo (SG100) se vea sólo el "botonadelante", que el "botonatras" aparezca una vez que está en pantalla el segundo artículo (SG102) y por último que el "botonadelante" desaparezca al llegar al último artículo (SGxxx) si es que no quedan más artículos/archivos para cargar desde la carpetas relacionadas, en este caso "imagenes/sabanas/" y "textos/sabanas/".

He intentado hacerlo sin éxito jugando con if y else respecto a los botones utilizando _visible = true/false, ya verás en "mi" código que terminé por adoptar ésto último pero no he logrado el cometido a pesar del esfuerzo y aquí me tienes, volviéndote a consultar en busca de tu respuesta con una posible solución.

2) En mi código original utilizaba los place y remove en el textbox para de algún modo resetearlo y que al avanzar o retroceder de artículo el texto se presente desde comienzo y no del modo que lo había dejado el artículo anterior y/o posterior, con el nuevo código no hay caso, no lo logro.

Cambiando de tema, hay algo muy curioso que no entiendo porque sucede y para que puedas verlo en la carpeta "Catalogo" encontrarás una imágen (no_entiendo_el_porque.jpg) donde te muestro la diferencia que se aprecia entre la presentación del texto exhibido en el textscroll entre los archivos "buscador_sabanas.swf" y "catalogo_sabanas.swf" cuando se ejecutan, podrás ver que en el buscador (Ej. artículo SG100) no aparece el scrollbar y en el catálogo, con el mismo artículo, si aparece, es llamativo dado que en ambos casos la información parte del mismo archivo (sg100.txt) alojado en "textos/sabanas/".

En el archivo catalogo.rar que adjunto están todos los archivos .swi, .swf y parte de los .jpg y .txt de modo que no pese tanto y puedan quedar a la mano de todos los usuarios sin depender de mi servidor, notarás un .txt y un .jpg de más (sg299.txt y sg299.jpg) que los añadí con el fin de que veas la diferencia en el entrelineado del texto si los llamas desde el buscador o desde el catálogo y obviamnete haciendo referencia a lo que me parece curioso y te he comentado unas líneas más arriba.

Te dejo mi inquietud y vuelvo a decirte que no tengo más que palabras de gratitud para contigo, gracias Cangrexo, verdaderamente Muchas Gracias!

Un gran saludo desde Buenos Aires - Argentina

Ariel
cancrexo
Hola
Para lo del botón atrás, intento mirarlo y te digo algo. En cuanto a lo del interlineado, el Flashplayer suele interpretar los saltos de línea tipo *NIX \r\n como dos saltos de línea y no uno. Por eso he aplicado un pequeño filtro a la carga de datos para que esto se corrija. Fíjate en el método onData del loadVars tienes lo sgute.:
CÓDIGO
file_contents = datos.split("\r\n").join("\n");

que hace lo que te comento. Si quieres que sigan saliendo los saltos de línea "dobles", prueba con:
CÓDIGO
file_contents = datos;



Salu2
dios_ohm
Buen día Maestro!

Ya he efectuado el cambio en el código y como era de esperar, funciona de maravilla.

Nuevamente, GRACIAS!

Saludos!
dios_ohm
Hola

A modo de actualización adjunto el archivo actualizacion.rar que contiene los archivos con la solución a los problemas de "reseteo" del textbox y de los saltos de línea.

CITA(dios_ohm @ 15-03-2010 - 07:51 AM) *
2) En mi código original utilizaba los place y remove en el textbox para de algún modo resetearlo y que al avanzar o retroceder de artículo el texto se presente desde comienzo y no del modo que lo había dejado el artículo anterior y/o posterior, con el nuevo código no hay caso, no lo logro.


Respecto al "reseteo" logré realizarlo modificando algunas líneas en el código de las escenas e insertando en las líneas de tiempo un remove y un place en el MC textscroll tal como lo había hecho oportunamente en mi código... "tenaz" smile.gif

Saludos!
cancrexo
Bien. También podrías llamar al método setText del textbox para que se borrase:
CÓDIGO
textscroll.SetText("");

debería funcionar. Ojo: teniendo en cuenta las rutas y todo eso (usando this, _parent o lo que haga falta)

Salu2
dios_ohm
Hola Cangrexo!

Te vá a costar pero me vas a sacar bueno biggrin.gif

Sábes? Había visto el método SetText en la página de Componentes de Swishzone y al leer "...after text has been added." obvié la nota que más abajo reza lo de no llamar al método hasta el frame (2) para que se complete la inicialización.

Actualizaciónes:
En la línea de tiempo de ambos archivos quité los place y los remove de los MC textscroll

Buscador:
CÓDIGO
    // Escena: Buscador - buscador_sabanas.swi ..::Reset textscroll::..
    onFrame (2){
    error.unloadMovie();
    textscroll.SetText("");
    cadenaAbuscar = busqueda.toLowerCase().trim();
    trace("Buscando: "+ cadenaAbuscar);    
    fade.gotoAndPlay(1);  
    lv.load("textos/sabanas/" + cadenaAbuscar + ".txt");
    stop();
}

Catálogo:
CÓDIGO
    // Escena: Catalogo - catalogo_sabanas.swi ..::Reset textscroll::..
    onFrame (3) {
    textscroll.SetText("");
    }


A estas alturas creo que está de más, pero te comento que funciona perfectamente.
Una vez más, GRACIAS Maestro!
Saludos!

PD: Sigo trabajando en el catálogo, sin éxito aún, con lo de los botones y el _visible = true/false blush.gif
cancrexo
Hola.
Para lo de los botones puedes hacerlo de multiples formas. El problema desde mi punto de vista es saber cuál es el objeto siguiente y cuál el anterior. Si supones que los objetos esta ordenados, que no falta ninguno etc, podrías usar una variable global (por ejemplo objectoActual)que indique el número del elemento/objeto y con ese número compondrías el nombre del archivo a cargar. Comprobando el valor de esta variable te bastaría para saber que botón tienes que activar desactivar.

Salu2
dios_ohm
Hola Cangrexo!


Ante todo gracias por responder, acá te dejo lo que yá tenía y lo que supongo que debería tener en función de tu respuesta, lo que no sé es si estoy encaminado o fuera del camino, te pido por favor que bien tengas tiempo lo veas y me comentes.

Lo que yá tenía:
CÓDIGO
onSelfEvent (load) {
              foto = 100;
              texto = 100;    
    var file_contents : String;    
    lv = new LoadVars();    
    lv.onData = function(datos){
        if(datos == undefined){
            trace("error");
            gotoAndPlay("ERROR");
        }else{        
    file_contents = datos;
    trace(datos)
    gotoAndPlay(5);    
        }
        }
}


Lo que supongo que debería tener:
CÓDIGO
onSelfEvent (load) {      
               _global.foto = 100;
               _global.texto = 100;
        var file_contents : String;    
        lv = new LoadVars();
        lv.onData = function(datos){
    if (datos < 100) {
            trace("primera");
            gotoAndPlay("PRIMERA");
    }
    else if (datos > 103) {
            trace("ultima");
            gotoAndPlay("ULTIMA");
        }
    else {  (file_contents = datos)
            trace(datos)
            gotoAndPlay(5);
    }
}
}


Saludos!
cancrexo
No. No me refiero a eso. Lo primero sería que esos botones adelante y atrás incrementasen/decrementasen esa variable global. Después con cada pulsación de los botones, además de modificar dicha variable, se realizará una carga del archivo que toque.


Salu2

dios_ohm
Hola Cangrexo!

Aquí me tienes nuevamente, desde yá que agradezco sobremanera tu respuesta; si te has fijado en mi último adjunto (actualizacion.rar) el tema de incrementar/decrementar ya lo había implementado, sin éxito claro, de ahí también parte mi consulta repecto a si estaba encaminado o no como para avanzar en función de esa especie de bosquejo comparativo de scripts que reseñé en mi post anterior; de todos modos te comento que no me he quedado de brazos cruzados, realizé un sinfin de ejemplos para ver la posibilidad de resolver el asunto pero no hay caso, no hallo el modo.

Acá te adjunto lo último que he realizado, te pido por favor que le eches una mirada en cuanto dispongas de tiempo y si está dentro de tus posibilidades me orientes en cuanto a como seguir y así ver si podemos ir cerrando este hilo.

Una vez más gracias de antemano, te dejo un gran saludo!

Edito:
Se me había pasado de agregar esta otra alternativa que he intentado implementar para con el botón anterior en el MC denominado Desarrollo.

CÓDIGO
on (release) {
if (foto == 101) {
     gotoSceneAndStop("Catalogo", 2);
    _parent.Desarrollo.gotoAndStop(2);
    _parent.Desarrollo.foto = foto -1;
    _parent.Desarrollo.texto = texto -1;
}
if (foto <= 101)      
     gotoSceneAndStop("Catalogo", 3);
    _parent.Desarrollo.gotoAndStop(4);
    _parent.Desarrollo.foto = foto -1;
    _parent.Desarrollo.texto = texto -1;
}
dios_ohm
Hola!

Aquí adjunto una solución poco ortodoxa pero que con mucha tenacidad me acaba de funcionar, de momento estoy liado con el tema de los niveles ya que este archivo no "juega" solo así que si alguien tiene alguna sugerencia al respecto será más que bienvenida.

Saludos!
juyyu
Hola mi estimado amigo ohm, estuve viendo este post y me quedé enganchado por el atrevimiento que tuviste, ya que coincido con Cancrexo que lo más acertado debió ser que utilices una base de datos para este proyecto; pero valga el esfuerzo, aqui dejo una salida a la navegación de cada artículo; explico un poco:
  • Creo que al momento de cargar deberíamos inicializar variables para el articulo inicial SG100 y el final SG405 (valores de ejemplo en este caso) o en su defecto la cantidad total de articulos. Esto permitiría ubicarnos en el artículo inicial o final al momento de navegar entre estos.
    No sé cómo podrías obtener la cantidad de artículos (archivos de texto o imágenes) para poder manejarlos, es por ello que simplemente me limité a poner los valores de acuerdo a la cantidad que encontré en los textos, pero no está de más aclararlo.
  • Otro de los detalles sería cuando falte una imagen y si exista un archivo de texto, esto se desordenaría usando acumuladores independientes ya que quedaría el valor anterior del archivo faltante, pero para conservar la relación simplemente podrías poner un acumulador para ambos (imagen y texto) para que usen el mismo código al navegar.
  • Del mismo modo, no sé cómo podríamos evitar que falte archivos con el mismo código en la secuencia, pero creo que para este caso estos detalles no ocurrirán, por lo que funcionará bien con todos los archivos en el paquete; en fin lo que pude aportar a tu trabajo son los botones de navegación; espero que te sirva.

Debo aclarar que no soy experto en programación en SwishMax pero conozco algo de programación en otros lenguajes.
Espero sirva de algo mi aporte para mejorar este proyecto.


CITA
Cambié el archivo adjunto ya que por error no comprimí todos los archivos; adicionalmente hice cambios para que puedas colocar texto con formato (adjunto muestra), hice nuevos botones y una distribución correcta de los mismos.
dios_ohm
Hola amigo Juyyu, tu aporte me resulta más que interesante, recibe mi gratitud por el interés y el tiempo que dedicaste a mi tenaz proyecto, por lo poco que he podido ver a través del .swf que contiene el .rar que adjuntaste, a pesar de las fallas, es muy atractiva tu propuesta y también esa especie de joystick de flechas, sería fantástico que adjuntes el .swi para tratar de ver en el código los errores y así, llegado el caso, poder llevar a cabo las modificaciones que surjan.
Saludos!
Esta es una versión "reducida (lo-fi)" de nuestro contenido. Para ver la versión completa con mas información, formato e imágenes, por favor haz click aquí.
Invision Power Board © 2001-2012 Invision Power Services, Inc.