Ver Mensaje Individual
  #9 (permalink)  
Antiguo 09/07/2016, 12:11
Avatar de manuparquegiralda
manuparquegiralda
 
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 10 meses
Puntos: 39
Respuesta: Sesiones como invitado

A ver, si es muy simple en realidad, son necesarias tres tablas en la BD para manejar el carrito y los pedidos.

TABLA CESTA

Con cuatro campos como mínimo: "ID", "ID_USER", "OBJ_PEDIDO", "FECHA". Como esta tabla solo la relacionas con los campos ID e ID_USER, en el campo OBJ_PEDIDO lo que hago es guardar una clase PHP serializada con todos los datos del carrito y los productos.

TABLA PEDIDOS

En la tabla pedido guardo todos los datos del pedido: "REF", "ID_USER", "ESTADO", "PORTES_CLIENTE", "PORTES_EMPRESA", "EMPRESA_TRANSPORTE", "COD_SEGUIMIENTO", "MODO_PAGO", "COMISION_BANCO", "DESC_CUPON", "DESC_PUNTOS", "DESC_SORTEO", "DESC_MANUAL", "FECHA", "NOMBRE", "FECHA_NAC", "DNI", "EMAIL", "TELEFONO", "DIRECCION", "LOCALIDAD"... en fin, todos los datos que necesites para tratar los pedidos y sacar estadísticas de la base de datos

TABLA VENDIDOS

En esta tabla guardas uno a uno todos los productos vendidos, relacionados con los pedidos y los usuarios: "ID", "REF_PRODUCTO", "REF_PEDIDO", "ID_USER", "COSTE", "IVA", "PVP", "CANTIDAD", "TALLA", "COLOR", "SABOR", "FECHA", "HORA".

------------------------------------------------------------------------------------------

Creas dos clases PHP, una llamada Cesta y otra llamada Producto_cesta . En la clase cesta al menos una propiedad que sea una array donde se irán guardando en cada valor un producto determinado en la clase Producto_cesta, de esta manera en la cesta guardas todos los datos de cada producto y la cantidad que compra, el color, la talla... todos los datos que necesites del producto.

Código PHP:
Ver original
  1. class Producto_cesta {
  2.     public $ref;
  3.     public $nombre;
  4.     public $color;
  5.     public $talla;
  6.     public $sabor;
  7.     public $cantidad;
  8.     public $coste;
  9.     public $iva;
  10.     public $pvp;
  11.     public $img_thumb;
  12.     /* .......... TODOS LOS DATOS QUE NECESITES ......... */
  13. }
  14.  
  15. class Cesta extends Producto_cesta{
  16.     public $productos = array();
  17.     public $id;
  18.     public $id_user;
  19.     public $puntos_fidelidad;
  20.     public $descuento_puntos;
  21.     public $invitado;
  22.     /* .......... TODOS LOS DATOS QUE NECESITES ........ */
  23.  
  24.  
  25.    public function add_producto($ref_producto){
  26.        /*
  27.        OPERACIONES NECESARIAS PARA AGREGAR UN PRODUCTO A LA CESTA
  28.  
  29.        Cada producto tendrá todos los datos en la clase Producto_cesta que se guaradará en un valor del array $productos
  30.        */
  31.    }
  32.  
  33.    public function rem_producto($ref_producto){
  34.        /* OPERACIONES NECESARIAS PARA QUITAR UN PRODUCTO A LA CESTA */
  35.    }
  36.  
  37.    public function total_productos(){
  38.        /* OPERACIONES NECESARIAS PARA CALCULAR TODOS LOS PRODUCTOS QUE HAY EN LA CESTA */
  39.    }
  40.  
  41.    public function calc_total(){
  42.        /* OPERACIONES NECESARIAS PARA CALCULAR EL TOTAL DE LA CESTA */
  43.    }
  44.  
  45.    public function comprobar_stock(){
  46.        /* OPERACIONES NECESARIAS PARA SABER SI ALGUNO DE LOS PRODUCTOS DE LA CESTA SE HA QUEDADO SIN STOCK Y EN CASO AFIRMATIVO BORRARLO DE LA CESTA*/
  47.    }
  48.  
  49.    /* ...... CREA TODOS LOS MÉTODOS QUE NECESITES PARA TRATAR TU CESTA ..... */
  50. }

Esta clase la serializas y la guardas en el campo OBJ_PEDIDO de la tabla CESTA en la BD y la extraes cuando lo necesites deserializándola y tratando los datos. No es una buena práctica guardar datos serializados en las bases de datos si los datos que guardas los quieres relacionar con otras tablas, este no es mi caso y así me va bien, si lo prefieres, puedes crear otra tabla llamada "PRODUCTOS_CESTA" y en lugar de guardar los productos en la clase Producto_cesta, los guardas en la tabla de la BD relacionados por el ID y el ID_USER de la tabla CESTA.

Cuando un usuario añade productos haces todas las operaciones necesarias y la guardas en la base de datos. Cuando un usuario hace un pedido, sacas los datos de la cesta, guardas los datos del pedido en la tabla de "pedidos", guardas los productos vendidos en el pedido en la tabla de "vendidos" y si el pedido se realizó correctamente borras la cesta del usuario de la tabla "cesta".

¿Por qué decidí ir guardando las cestas en la Base de Datos? Porque me encontré con clientes que no sabían comprar o tenían alguna duda o problema con el pago. Así que de esta manera, me hice un panel de control donde tengo accesos a todas las cestas de la compra y cuando el cliente llamaba con algún problema miraba su cesta y solucionaba sus dudas. Si solo la guardas en una variable de $_SESSION, a la cesta del cliente solo tendrá acceso el cliente y ante cualquier duda no podrás ayudarle correctamente.
__________________
Diseño Web - Arisman Web