Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/07/2009, 12:59
Avatar de Sergestux
Sergestux
 
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 10 meses
Puntos: 20
Galeria de imagenes - codigo fuente

Hola colegas del foro, veran estoy haciendo una galeria de productos, que todavia no tengo los productos definitivos, pero mientras me los pasan estoy realizando una con datos de prueba.

He subido la galeria a un hosting gratuito, aunque la galeria ya es funcional me hace falta varios detalles, como por ejemplo remarcar la categoria y el producto que se estan mostrando, varios detallitos que me gustaria me ayudaran a completar entre todos a manera de aprendizaje y que sirva de ayuda para los que se estan inicando en esto de flex.
La galeria puede verse aca, y estos son los archivos del proyecto:

http://sergestux.hostei.com/galeria/estilos.css
http://sergestux.hostei.com/galeria/imagenes/
http://sergestux.hostei.com/galeria/catalogo.xml

Las imagenes y el archivo xml las tome de un ejemplo de adobe.
Este es el codigo de la galeria al momento:

Código xml:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" borderColor="#FBFDFF" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #FFFFFF]"
  3.     creationComplete="Iniciar();">
  4. <mx:HTTPService id="XMLCat" url="catalogo.xml" resultFormat="e4x" result="CargarCatalogo();"/>
  5.     <mx:Blur id="blurImage" duration="1000"
  6.        blurXFrom="0.0" blurXTo="10.0"
  7.        blurYFrom="0.0" blurYTo="10.0"/>
  8.     <mx:Blur id="unblurImage" duration="1000"
  9.        blurXFrom="10.0" blurXTo="0.0"
  10.        blurYFrom="10.0" blurYTo="0.0"/>
  11.     <mx:WipeDown id="wipeOut" duration="1000"/>
  12.     <mx:WipeDown id="wipeIn" duration="1000"/>    
  13.        
  14. <mx:Script>
  15.     <![CDATA[
  16.        //import mx.collections.XMLListCollection;
  17.        import flash.events.KeyboardEvent;    //Para la cja de busqueda
  18.        import mx.controls.Alert;
  19.        private var Categoria:String;
  20.  
  21.        //Inicializo la aplicacion
  22.        private function Iniciar():void
  23.        {
  24.            XMLCat.send();            //Consulto el catalogo de productos
  25.        }
  26.        
  27.        //Solo se ejecuta una vez al inicio
  28.        private function CargarCatalogo():void
  29.        {
  30.            myrep.dataProvider=XMLCat.lastResult.Categoria;        //Cargo todos los productos            
  31.            myrep2.dataProvider=XMLCat.lastResult.Categoria.product;    //Cargo todos los productos
  32.            Categoria='0';    //Todos los productos al inicio
  33.            //Aca se podria cargar algun producto relevante por default (tendria que estar especificado en el xml)
  34.        }    
  35.  
  36.        //Se activa cuando se presiona sobre algun producto en especifico            
  37.        private function VerDetalle(Id:String):void
  38.        {    
  39.            Imagen.showBusyCursor=true;    //Por si tarda demasiado la carga de la imagen
  40.            Imagen.visible=false;        //Para activar el efecto                
  41.            txtNombre.text=XMLCat.lastResult.Categoria.product.(@productId==Id).name;
  42.            txtDescripcion.text=XMLCat.lastResult.Categoria.product.(@productId==Id).description;
  43.            Imagen.source=XMLCat.lastResult.Categoria.product.(@productId==Id).image;            
  44.            Imagen.showBusyCursor=false;
  45.            Imagen.visible=true;     //Para activar el efecto
  46.            //Aca me hace indicar de alguna forma que este producto es el que se esta visualizando en el panel principal
  47.        }
  48.        
  49.        //Se activa cuando se presiona sobre alguna categoria en especifica
  50.        private function VerCategoria(Id:String, Item:int):void
  51.        {    
  52.            if(Id=='0')    //Si son todos los productos
  53.            {
  54.                myrep2.dataProvider=XMLCat.lastResult.Categoria.product;    //Se carga todo el catalogo
  55.                PanelBuscar.title="Todos";
  56.            }
  57.            else
  58.            {
  59.                myrep2.dataProvider=XMLCat.lastResult.Categoria.(@id==Id).product;    //Se carga la categoria especifica
  60.                PanelBuscar.title=XMLCat.lastResult.Categoria.(@id==Id).@descripcion;    //La descripcion de la categoria seleccionada
  61.            }
  62.            Categoria=Id.toString();
  63.        //Aca se podria cargar algun producto relevante de esta categoria por default (tendria que estar especificado en el xml)
  64.        //Aca me hace falta indicar de alguna forma que alguna categoria es la que se esta visualizando por ahora                        
  65.        }
  66.  
  67.        //Se activa cuando se presiona una tecla en la caja de busqueda
  68.        private function TeclaPres(eventObj:KeyboardEvent):void
  69.        {
  70.            //if (eventObj.keyCode == 13)    //Para restringir que unicamente al presionar enter se haga la busqueda            
  71.                if (TxtBuscar.text.length > 0)    //Solo cuando haya algo que buscar
  72.                    Buscar(TxtBuscar.text)    
  73.        }
  74.        
  75.        //Busca un producto en los actuales, regresa la cantidad de productos que coinciden
  76.        private function Buscar(Producto:String):int
  77.        {
  78.            myrep2.dataProvider=XMLCat.lastResult.Categoria.product.(name.toString().toUpperCase().search(Producto.toUpperCase()) >= 0);        //Convierto ambos a mayuscula y busco
  79.            return myrep2.dataProvider.length;
  80.        }
  81.  
  82.        //Dispatched after all the subcomponents of a repeater are created
  83.        //Se activa cada que se cambia el dataprovider del repeater de productos        
  84.        private function UpdateCantProd():void
  85.        {
  86.            LblProductos.text=String(myrep2.dataProvider.length);    //Se actualiza la etiqueta de cantidad de productos
  87.        }        
  88.        
  89.    ]]>
  90. </mx:Script>  
  91.  
  92. <mx:Canvas width="100%" height="100%">
  93.  
  94. <mx:HDividedBox width="100%" height="100%">
  95.     <mx:Panel width="100%" height="100%" title="Producto" horizontalAlign="center">
  96.         <mx:VBox width="100%" height="100%" horizontalAlign="center">    
  97.             <mx:Tile width="100%" direction="horizontal" horizontalAlign="center">
  98.                 <mx:LinkButton label="Todos" click="VerCategoria('0',0)"/>            
  99.                 <mx:Repeater id="myrep">
  100.                     <mx:LinkButton id="BtnCategoria" label="{myrep.currentItem.@descripcion}"
  101.                        click="VerCategoria(event.currentTarget.getRepeaterItem().@id, 1);"/>
  102.                 </mx:Repeater>                    
  103.             </mx:Tile>
  104.             <mx:Label id="txtNombre"/>
  105.             <mx:Image id="Imagen" horizontalAlign="center" showEffect="{wipeIn}"/>            
  106.             <mx:Text id="txtDescripcion" width="500"/>
  107.         </mx:VBox>
  108.     </mx:Panel>
  109.     <mx:Panel id="PanelBuscar" title="Todos" width="200" height="100%">                
  110.             <mx:VBox width="100%" height="100%">
  111.                 <mx:VBox  width="100%" height="59" borderStyle="solid" cornerRadius="6" verticalAlign="middle" horizontalAlign="center">
  112.                     <mx:HBox width="100%">
  113.                             <mx:Label  text="Buscar" />
  114.                             <mx:TextInput id="TxtBuscar" keyUp="TeclaPres(event)"
  115.                                maxChars="30" restrict="A-Z a-z 0-9" width="138" />
  116.                     </mx:HBox>
  117.                     <mx:HBox width="100%">
  118.                         <mx:Label text="Productos:" fontWeight="bold" color="#05004C"/>
  119.                         <mx:Label text="0" id="LblProductos" color="#05004C" fontStyle="italic"/>
  120.                     </mx:HBox>
  121.                 </mx:VBox>
  122.                 <mx:VBox width="100%" height="450">
  123.                     <mx:Repeater id="myrep2" repeatEnd="UpdateCantProd();">
  124.                         <mx:VBox width="100%" styleName="VBoxFoto" horizontalAlign="center">
  125.                             <mx:LinkButton label="{myrep2.currentItem..name.text()}"                                
  126.                                click="VerDetalle(event.currentTarget.getRepeaterItem()..@productId)"                                
  127.                                />
  128.                             <mx:Image horizontalAlign="center" width="50" height="50" source="{myrep2.currentItem..image.text()}"
  129.                                click="VerDetalle(event.currentTarget.getRepeaterItem()..@productId)"
  130.                                 mouseDownEffect="{blurImage}" mouseUpEffect="{unblurImage}"                                                                
  131.                                />
  132.                         </mx:VBox>
  133.                     </mx:Repeater>
  134.                 </mx:VBox>
  135.             </mx:VBox>
  136.     </mx:Panel>
  137. </mx:HDividedBox>
  138. </mx:Canvas>
  139. <mx:Style source="estilos.css"/>
  140. </mx:Application>