Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/07/2007, 23:09
Avatar de _ssx
_ssx
 
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años
Puntos: 60
Re: Carro de la compra

Hola :) Exactamente modifique ese script para hacer lo que tu deseas.. solo modifique la clase y lo pense de esta manera..

1.- tener dos variables principales.. una que llevara el control del numero de productos en el carro.. y otra que tendra el numero de items.. por ejemplo..

4 Pantalones Dx
5 Blusas Mx
9 Calzones SX

Si te das cuenta hay 18 productos pero solo 3 items distintos, entonces con esto deducimos que cuando agreguemos un producto al carro necesitamos ver si ya existe y si existe solo sumarle a la cantidad del producto uno mas.. y si no agregar otro al array..

Ojo.. cuando eliminamos un item del carro.. no lo eliminamos en realidad solo lo "marcamos" poniendolo en 0.. para que al mostrar los elementos no los imprimamos..

esto lo hice mas o menos asi..



Código PHP:
<?
class carrito {
    
//atributos de la clase
    
var $IndiceArray;
       var 
$num_productos;
       var 
$array_id_prod;
       var 
$array_borrado_prod;
    var 
$array_talla_prod;
    var 
$array_nomtalla_prod;
    var 
$array_color_prod;
    var 
$array_nomcolor_prod;
    var 
$array_modelo_prod;
    var 
$array_nommodelo_prod;
    var 
$array_imagen_prod;
       var 
$array_nombre_prod;
    var 
$array_precio_prod;
    var 
$array_unidades_prod;

    function 
carrito () {
        
//esta variable va a llevar el numero TOTAL de productos
           
$this->num_productos=0;
           
//esta va a llevar el indice de productos
           
$this->IndiceArray=0;
    }
//metodo modificado para agregar productos al carro
 
function introduce_producto($id$talla$nomtalla$color$nomcolor$modelo$nommodelo$imagen$nombre$precio$unidades){
        
//verificamos si no hay productos registrados..
        
if($this->num_productos<=0)
            {
            
//registramos el producto
            
$this->array_id_prod[$this->IndiceArray]=$id;
            
$this->array_nomtalla_prod[$this->IndiceArray]=$nomtalla;
            
$this->array_color_prod[$this->IndiceArray]=$color;
            
$this->array_nomcolor_prod[$this->IndiceArray]=$nomcolor;
            
$this->array_modelo_prod[$this->IndiceArray]=$modelo;
            
$this->array_nommodelo_prod[$this->IndiceArray]=$nommodelo;
            
$this->array_imagen_prod[$this->IndiceArray]=$imagen;
            
$this->array_nombre_prod[$this->IndiceArray]=$nombre;
            
$this->array_precio_prod[$this->IndiceArray]=$precio;
            
$this->array_unidades_prod[$this->IndiceArray]=$unidades;
$this->IndiceArray++;                            $this->num_productos++;
            }else
                
//ahora verificamos si el producto enviado ya existe
                //si es asi para solo aumentar sus unidades
                    
{
                    
//le enviamos el ID y cuantas unidades va a checar si existe
                    
if($this->existeProducto((int)$id,(int)$unidades)
                            {
                            
//aumentamos solo las unidades del producto enviado
                            
} else {
                                    
//registramos un nuevo item
                                    
$this->array_id_prod[$this->IndiceArray]=$id;
                                    
$this->array_nomtalla_prod[$this->IndiceArray]=$nomtalla;
                                    
$this->array_color_prod[$this->IndiceArray]=$color;
                                    
$this->array_nomcolor_prod[$this->IndiceArray]=$nomcolor;
                                    
$this->array_modelo_prod[$this->IndiceArray]=$modelo;
                                    
$this->array_nommodelo_prod[$this->IndiceArray]=$nommodelo;
                                    
$this->array_imagen_prod[$this->IndiceArray]=$imagen;
                                    
$this->array_nombre_prod[$this->IndiceArray]=$nombre;
                                    
$this->array_precio_prod[$this->IndiceArray]=$precio;
                                    
$this->array_unidades_prod[$this->IndiceArray]=$unidades;
                                    
$this->IndiceArray++;
                                    
$this->num_productos++;
                                    }
                    }
        
        }
//Este metodo verificara si ya agregaste el producto y si es asi solo le sumara a su cantidad..
function existeProducto($id,$uni)
    {
    for (
$j=0$j<$this->IndiceArray$j++){
        
//echo "Comparamos ->>".$this->array_id_prod[$j]." con ->>".$id." a ver donde hay coincidencia<br>";
        //buscamos coincidencia con el ID
        
if($this->array_id_prod[$j]==$id)
            {
            
//si encuentra el producto aumentamos unidades en su array
            
$this->array_unidades_prod[$j]+=$uni;
            
//tambien aumentamos el numero de productos
            
$this->num_productos+=$uni;
            
//lo reactivamos por si ya habia sido borrado
            
$this->array_borrado_producto[$j]=1;
            
$salida 1;
            break;
            } else 
                {
                
$salida 0;
                }
    }
    return 
$salida;
}


//este metodo quita el numero de unidades que quieras de el producto seleccionado
//lo usas asi...
// $_SESSION["ocarrito"]->removeItem(1,10);
//donde 1 = al id del producto
//donde 10 = a la cantidad que vas a quitarle de unidades
function removeItem()
    {
    
$argumentos func_get_args();
    if(
$argumentos[1]>=1)
        {
        
$this->array_unidades_prod[$argumentos[0]]-=$argumentos[1];
        
$this->num_productos-=$argumentos[1];
        }else {
    
$this->array_borrado_prod[$argumentos[0]] = 0;
    
$this->num_productos-=$this->getCantidad($argumentos[0]);
    
$this->array_unidades_prod[$argumentos[0]] = 0;
    }
    
//actualizamos el numero de productos
    
}
    
    
//este metodo devuelve cuantas unidades tiene un producto
function getCantidad($id)
    {
    return 
$this->array_unidades_prod[$id];
    }
?>
ahh una cosa más en el mètodo imprime_carrito.. necesitarias.. cambiar el for a algo asi..

Código PHP:
 for ($i=0;$i<$this->IndiceArray;$i++){
            if(
$this->array_borrado_prod[$i]!=0){ 
En fin si tienes más dudas ;) pss aki andamos.. o por msn o msg privado
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador

Última edición por _ssx; 03/07/2007 a las 23:13 Razón: Error de dedo :D