Aquí va la clase TCarrito, como ves es muy sencilla, se limita a declarar las variables relacionadas al cliente, así como tres simples funciones para añadir, modificar y borrar líneas de artículos. Agregamos otra pequeña clase TLineas para guardar datos de cada uno de los artículos que contiene el carrito.
Código PHP:
Class TCarrito {
var $usuario_id;
var $nombre;
var $email;
var $dni;
var $direccion;
var $poblacion;
var $provincia;
var $cpostal;
var $pais;
var $pedido_direccion;
var $pedido_poblacion;
var $pedido_provincia;
var $pedido_cpostal;
var $pedido_pais;
var $telefono;
var $fax;
var $pass;
var $repite_pass;
var $boletin;
var $contrato;
var $formadepago;
var $observaciones;
var $lineas; // array de TLineas
function add_linea ( $referencia, $denominacion, $cantidad, $precio ) {
$lineas = New TLineas();
$lineas->referencia = $referencia;
$lineas->denominacion = $denominacion;
$lineas->cantidad = $cantidad;
$lineas->precio = $precio;
$this->lineas[] = $lineas;
}
function delete_linea ( $posicion ) {
if ( $this->lineas[$posicion] ) {
array_splice( $this->lineas, $posicion, 1 );
return true;
}
else {
return false;
}
}
function update_linea ( $posicion, $denominacion, $cantidad, $precio ) {
if ( $this->lineas[$posicion] ) {
$this->lineas[$posicion]->denominacion = $denominacion;
$this->lineas[$posicion]->cantidad = $cantidad;
$this->lineas[$posicion]->precio = $precio;
return true;
} else {
return false;
}
}
}
// La clase auxiliar para las lineas del carrito
Class TLineas {
var $referencia;
var $denominacion;
var $cantidad;
var $precio;
}
Y aquí la forma de uso en el servidor al recibir los datos del formulario.
Código PHP:
include("carrito.inc.php");
session_start();
include("../session_conn.php");
include("../funciones.php");
// Si no existe lo creamos.
if ( !isset( $_SESSION["carrito"] ) ) {
$_SESSION["carrito"] = new TCarrito();
}
// El usuario borra un elemento del carrito.
if ( ( $HTTP_GET_VARS["borrar"] ) or ( $HTTP_GET_VARS["borrar"] =='0' ) ) {
$_SESSION["carrito"]->delete_linea( $HTTP_GET_VARS["borrar"] );
}
// El usuario añade un elemento al carrito
if ( $HTTP_GET_VARS["ref"] ) {
$referencia = $HTTP_GET_VARS["ref"];
// Si el artículo ya se encuentra en el carrito incrementamos la cantidad más uno.
$agregar_articulo = 'SI';
for ( $i=0; $i <= count( $_SESSION["carrito"]->lineas )-1; $i++ ) {
if ( trim($_SESSION["carrito"]->lineas[$i]->referencia ) == trim( $referencia ) ) {
$agregar_articulo = 'NO';
$_SESSION["carrito"]->lineas[$i]->cantidad = $_SESSION["carrito"]->lineas[$i]->cantidad+1;
}
}
// El artículo no está en el carrito, lo buscamos en la base de datos y si lo encontramos lo añadimos a la sesion del carrito.
if ( $agregar_articulo == 'SI' ) {
// Capturamos los datos del artículo.
$SQL = "SELECT * FROM articulos WHERE referencia = '$referencia'";
$result = db_query( $SQL);
$row = mysql_fetch_array( $result );
$denominacion = $row["denominacion"];
$familia = $row["familia"];
$subfamilia = $row["subfamilia"];
$precio = $row["tarifa1"];
$_SESSION["carrito"]->add_linea ( $referencia, $denominacion, 1, $precio );
}
}
// El usuario actualiza los datos del carrito.
if ( $HTTP_POST_VARS["actualizar"] ) {
$cantidad = $HTTP_POST_VARS["cantidad"];
for ( $i=0; $i <= count( $_SESSION["carrito"]->lineas )-1; $i++ ) {
$_SESSION["carrito"]->lineas[$i]->cantidad = $cantidad[$i];
}
}
Como ves la cosa es bastante más sencilla de lo que pueda parecer, si quieres puedes verlo funcionar
online, aunque no está en producción.
Espero te sirva aunque sólo sea de inspiración