Comunidad de diseño web y desarrollo en internet online

Carrito de compras en AS2

Citar            
MensajeEscrito el 20 Mar 2012 08:41 pm
Buenas, estoy realizando un carrito de compra en FLASH AS2 y si bien me eh encontrado con varios problemas, hemos salido adelante.
pero cuento con uno en particular que ya no se como resolverlo, eh intentado muchas cosas y no consigo nada.

Básicamente al agregarse un producto al carrito lo que necesitamos es comprobar si este producto ya se encuentra en el carrito o si efectivamente es un producto nuevo a agregar.

En caso que ya se encuentre en el carrito lo unico que se actualizara es la cantidad de dicho producto.

por ejemplo contamos con estos productos en el carrito

Producto_______Precio________Cantidad
Auto___________100000________1
PC____________5000__________2
Bicicleta________1200__________5

ahora el cliente vuelve a comprar una bicileta, este producto ya se encuentra en el carrito y por lo tanto solo sumamos +1 a la cantidad quedando nuestro carrito de la siguiente forma

Producto_______Precio________Cantidad
Auto___________100000________1
PC____________5000__________2
Bicicleta________1200__________6 (5+1)

Para gestionar los datos en el carrito cuento con 3 Arrays

array_productos (descripcion del producto)
array_precio (precio del producto)
array_cantidad (cantidad del producto)

Y yo lo que hice para que verificara los productos agregados fue comparar el array_producto con las posición siguiente a dicho array

Quedando así mi AS

Código ActionScript :

for(var k:Number=0; k<array_producto.length; k++){
if(array_producto[k+1] == array_producto[k]){
array_cantidad[k]=Number(array_cantidad[k] + array_cantidad[k+1]);

array_cantidad.splice(k+1);
array_cantidad.splice(k+1);
}
}


esto funciona por la mitad, ya que al agregar el primer producto al carrito va de marabilla pero cuando agrego un segundo producto y quiero volver a agregar del primero ya deja de funcionar, es decir:

Agrego el producto AUTO, presiono el botón de comprar 3 veces, se visualiza en mi carrito una única posición con dicho producto.

Luego agrego el producto PC, presiono el botón de comprar 2 veces, se visualiza en mi carrito una única posición con dicho producto.

quedando mi carrito así:

Producto_______Precio________Cantidad
Auto___________100000________3
PC____________5000__________2

ahora si vuelvo a agregar el producto AUTO, presiono el botón de compra 2 veces mas, mi carrito queda de esta manera:

Producto_______Precio________Cantidad
Auto___________100000________3 (los 3 primero)
PC____________5000__________2 (se agrega un producto nuvo)
Auto___________100000________3 (se agregan dos autos mas pero no se SUMAN... ERROR!)

Si es necesario que agregue todo el AS para el carrito o que suba el archivo para que lo puedan descargar, lo hare con gusto.

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Mar 2012 10:02 pm
no se si entiendo bien, pero no podrias antes de agregar el producto primero verificar si esta en el array de productos y de hay si existe tomar la posicion y agregarle en el array cantidad en la posicion del producto?

Por Cristian23

26 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Mar 2012 10:53 pm
Es lo que estoy haciendo, al momento que se presiona el botón comprar, se ejecuta el FOR donde tenemos el condicional que verifica si el producto esta o no en el carrito, de estar el producto en el carrito solo suma la cantidad agregada, ahora si el producto es nuevo agrega la descripción, cantidad y precio del producto en una nueva posición de cada array.

Pero al agregar dos productos diferentes en el carrito y repetir el primer, ya deja de sumar y agrega un tercer producto, en este caso = al primero.

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Mar 2012 12:42 am
Alguien que me pueda ayudar?

Estuve viendo este POST, pero no logre hacerlo funcionar para lo yo necesito

http://foros.cristalab.com/elementos-repetido-en-un-array--t21795/

Por si no fui claro en mi consulta, lo que necesito es ver que elementos del array están repetidos y eliminarlos, y en otro array necesito que las mismas posiciones de los elementos repetidos se sumen.

Grax de ante mano!

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Mar 2012 10:59 pm
Ya encontré como, luego de tanto, escribir y tachar... gracias a todos!
¡CRISTALAB ES EL MEJOR SITIO LEJOS!

Este código en AS2 lo necesitaba para un carrito de compras.
Básicamente lo que hace es, comprobar los productos que hay en el carrito, quitar los repetidos manteniendo las cantidades.

Si alguien lo necesita o esta buscando algo parecido, se los dejo.
copien y peguen, se vana poder ayudar con los trace que les deje y mis comentario!

Código ActionScript :


//Creamos y llenamos nuestros ARRAYS para el ejemplo
var carrito_descripcion:Array = new Array ("moto", "auto", "moto", "moto","bici","auto","auto","bici");
var carrito_precio:Array = new Array ("65000","65000","65000","65000","65000","65000","65000","65000");
var carrito_cantidad:Array = new Array ("2","3","1","4","5","6","3","4");

//Indicamos que solo se ejecute si el carrito de compras cuenta con mas de un producto
if (_root.carrito_descripcion.length > 1)
{
   //Utilizamos los dos FOR para realizar las comparaciones de cada posicion del ARRAY
   trace("INICIANDO NUEVA COMPARACION")
   for (var a:Number = 0; a < _root.carrito_descripcion.length; a++)
   {
      for (var b:Number = 0; b < _root.carrito_descripcion.length; b++)
      {   
         trace("=========================")
         trace("Comparando la posicion " + a + " con la posicion " + b + " del ARRAY");
         //Condiciones que ponemos para que se realise la compracion
         //1° - Las posiciones a comparar deben ser diferentes
         //2° - El producto a comparar debe ser el mismo
         //3° - La cantidad de dicho producto no puede ser igual a cero
         if (b != a && _root.carrito_descripcion[a] == _root.carrito_descripcion[b] && _root.carrito_cantidad[b] != 0)
         {   
            //Si se cumplen las condiciones de arriba, se suman las cantidades del mismo producto
            _root.carrito_cantidad[a] = Number(Number(_root.carrito_cantidad[a]) + Number(_root.carrito_cantidad[b]));
            //Este condicional pondra en cero aquellas posiciones del ARRAY que ya fueron comparadas
            if (a < b){   _root.carrito_cantidad[b] = 0;}
         }
         else
         {   
            //Este condicional solo lo utilizo para guiarme
            if (b == a)
            {
               trace("A=B : No es posible comparar posiciones iguales del ARRAY");
            }
            else
            {
               trace("No es posible sumar las cantidades de dos productos diferentes");
            }
         }
      }
      
      trace("==========================ELIMINANDO REPETIDOS==========================");
      //Esta seccion se encargara de eliminar todos los elementos repetidos en el ARRAY, pero solo aquellos
      //que sus cantidades sean igual a cero.
      var _length:Number = _root.carrito_descripcion.length;
      var e:Number = 0;
      //Indicamos cuantas veces repetimos el LOOP, en este caso tantas veces como posiciones de ARRAY
      for (var c:Number = 0; c < _length; c++)
      {
         //Indicamos que solo se continuara en caso que la cantidad de ese producto sea igual a cero.
         if (_root.carrito_cantidad[e] == 0)
         {
            //Si se cumple la condicion de arriba, eliminamos esa posicion del ARRAY en todos los ARRAY's
            //que esten involucrados.
            _root.carrito_cantidad.splice(e,1);
            _root.carrito_descripcion.splice(e,1);
            _root.carrito_precio.splice(e,1);

         }
         else
         {   
            //En caso que la condicion no se cunpla, continuamos con la proxima posicion del Array
            //sumandole +1 a nuestra variable e.
            ++e;
         }
            
      }
      trace("IMPRIMIENDO RESULTADOS DEL CARRITO");
            trace(_root.carrito_descripcion);
            trace(_root.carrito_precio);
            trace(_root.carrito_cantidad);
   }
}

trace("RESULTADO FINAL DEL CARRITO");
trace(_root.carrito_descripcion);
trace(_root.carrito_precio);
trace(_root.carrito_cantidad);

Por PX10

70 de clabLevel



 

chrome

 

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