Este es un tutorial básico de PHP para crear carritos de compra y tiendas virtuales en linea. Mostrará las bases prácticas para el e-commerce, sin ahondar en elementos más complejos de seguridad y abstracción.
Supongamos que una empresa dedicada a dominios y hosting desea vender sus productos a través de su web. La empresa investigó nos encontró y encargó el proyecto de programación de su tienda on-line de comercio electrónico en PHP.
En primer lugar, lógicamente, destaparemos una cerveza para festejar nuestro nuevo trabajo e importante cliente obtenido. Luego..., ¡a programar!
La empresa cuenta con tres productos y desea que sus clientes puedan adquirir cuantas unidades deseen de cada uno de ellos. Otro punto muy importante es que sea posible comprar distintos productos dentro de un mismo pedido de compra (sin necesidad de tener que reiniciar el proceso luego de confirmar la compra).
Interfaz gráfica en HTML y CSS de la tienda
Lo primero que necesitaremos es crear una pantalla donde podamos presentar un producto, permitir al usuario seleccionar la cantidad de unidades que desea y finalmente ordenar el producto (común en todo script e-commerce). Comenzaremos con el primer producto Web Hosting para el cuál crearemos una página llamada "web-hosting.html" la cual luce de la siguiente manera:
El código de la pantalla es el siguiente:
Código :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>BlogdePhp.com, demo del script para crear una tienda on-line e-commerce - Web Hosting</title> <link rel="stylesheet" href="http://blogdephp.com/script/php/e-commerce/estilo.css" type="text/css" media="screen"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <div id="contenedor"> <div id="cabecera"> Demo script tienda on-line (e-commerce) en php: </div> <div id="cuerpo"> <div id="lateral"> <img src="./imagenes/web-hosting-linux-php.png" border="0"/> </div> <div id="principal"> <ul> <li> <label class="Negrita">Web Hosting Linux 1 Gb</label> <div id="navegacion"><a href="indice_productos.html">Productos</a> | <a href="ordenar_producto.php">Ver cesta</a> | <a href="javascript:history.back(1)">Volver</a></div> <li> 10 casillas de e-mail Pop3 <div id="nota"> <label class="Negrita">Nota 1</label>: puedes ordenar tranquilo, es sólo para probar el script e-commerce, no es una compra real.<br><br> <label class="Negrita">Nota 2</label>: Esta tienda on-line podría ayudarte a mejorar la calidad de servicio que ofreces a tus clientes e incrementar las ventas en tu negocio, ¿verdad?<br><br> Si te dedicas a otra actividad y no eres programador, puedes <a href="/instalacion-ecommerce-php-tienda-online">ingresar aquí y contratar el servicio de instalación de la tienda</a> en tu sitio. </div> <li> 10 Gb de Transf. Mensual <li> Antispam <li> Panel de control <li> Herramienta para back-up </ul> <ul> <div id="formulario"> <form action="ordenar_producto.php" method="post"> <li> Precio: u$s 50 (anual) <input type="hidden" name="producto" value="web-hosting"> <input type="hidden" name="precio-unitario" value="50"> <li>Unidades: <select name="unidades"> <option value="1" selected>1</option> <option value="2">2</option> <option value="3">3</option> </select> <li><div id="boton"><input type="image" src="./imagenes/comprar-hosting.png"></div> </form> </div> </ul> </div> </div> </body> </html>
Revisemos sus características técnicas más relevantes a nivel programación php:
- La sentencia <form action="ordenar_producto.php" method="post"> nos sirve para abrir un formulario y especificar el script php que tomará y procesará sus datos; luego que el usuario presione el botón submit. En este caso, se trata del script "ordenar_producto.php"
- Los dos campos ocultos "producto" y "precio unitario" que se declaran cada uno con la sentencia <input type="hidden" ... Recordemos que los campos ocultos nos sirven para configurar campos adicionales en el formulario sin que el usuario pueda ver o editar su valor en pantalla.
- El campo desplegable que le permitirá al usuario seleccionar la cantidad de unidades que desea comprar del producto
- El botón "submit", que permitirá al usuario ordenar el producto y pasar a la próxima pantalla. En nuestro caso la próxima pantalla es el script "ordenar_producto.php" la cual hemos definido al configurar el formulario (ver el 1er ítem de las consideraciones
Script en PHP de ordenes a nuestro carrito de compras
Lo segundo que necesitaremos es crear el script ordenar_producto.php que luce de la siguiente manera:
Y su código es el siguiente:
Código :
<? session_start();?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>BlogdePhp.com, demo del script para crear una tienda on-line e-commerce - Web Hosting</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" href="http://blogdephp.com/script/php/e-commerce/estilo.css" type="text/css" media="screen"> </head> <body> <? if(isset($_POST['producto'])){ // Para evitar agregar un producto al carrito cuando el usuario sólo presionó el link "Ver cesta" $_SESSION['productos_ordenados'][]=array( "producto"=> $_POST['producto'], "unidades"=> $_POST['unidades'], "precio-unitario"=> $_POST['precio-unitario'], "subtotal"=> $_POST['precio-unitario']*$_POST['unidades'] ); } ?> <div id="contenedor"> <div id="cabecera"> Demo script tienda on-line (e-commerce) en php: </div> <div id="cuerpo"> <div id="principal_carrito"> <ul> <li> <ul class="productos_ordenados Negrita"> <li>Producto<div id="navegacion_carrito"><a href="indice_productos.html">Productos</a> | <a href="ordenar_producto.php">Ver cesta</a> | <a href="javascript:history.back(1)">Volver</a></div></li> <li>Unidades</li> <li>Precio Unitario</li> <li>Subtotal</li> </ul> </li> <? if(isset($_SESSION['productos_ordenados'])){ foreach($_SESSION['productos_ordenados'] as $producto_ordenado){ $importe_total=$importe_total+$producto_ordenado['subtotal']; ?> <li> <ul class="productos_ordenados"> <li> <?= $producto_ordenado['producto'];?> </li> <li> <?= $producto_ordenado['unidades'];?> </li> <li>u$s <?= $producto_ordenado['precio-unitario'];?> </li> <li>u$s <?= $producto_ordenado['subtotal'];?> </li> </ul> </li> <? } ?> <li> <ul class="productos_ordenados total"> <li><label class="Negrita">Total:</label></li> <li></li> <li></li> <li><label class="Negrita">u$s <?= $importe_total;?> </label></li> </ul> </li> <? } else{ ?> <li>Su cesta se encuentra vacía</li> <? } ?> </ul> <div id="notacesta"> <label class="Negrita">Nota</label>: Esta tienda on-line podría ayudarte a mejorar la calidad de servicio que ofreces a tus clientes e incrementar las ventas en tu negocio, ¿verdad?<br><br> Si te dedicas a otra actividad y no eres programador, puedes <a href="/instalacion-ecommerce-php-tienda-online">ingresar aquí y contratar el servicio de instalación de la tienda</a> en tu sitio. </div> </div> </div> </body> </html>
y la función de éste script será:
- Tomar los datos del formulario
- Actualizar la cesta de compra de nuestro cliente (en la cesta de compra tenemos almacenados todos los productos ordenados por nuestro cliente)
- Mostrar la cesta de compra en pantalla; para que el cliente pueda revisar los productos ordenados y el precio total que lleva acumulado
Repasemos cada una de sus funciones:
1. Tomar los datos del formulario
Para tomar los datos del formulario utilizamos la variable $_POST['campo'] donde 'campo' es el nombre del dato previamente definido en el formulario. Por ejemplo, el nombre del campo desplegable es "unidades" (definido por el atributo "name" de la etiqueta "input"). Para tomar su valor en php, lo hacemos con la sentencia: $_POST['unidades']. El mismo tratamiento aplica a los campos ocultos.
2. Actualizar la cesta de compra de nuestro cliente
Aquí viene posiblemente el paso más complejo, así que ¡máxima atención!
Además de ingresar el producto actual en la cesta de compra, debemos tener un mecanismo para recordar los productos previamente ordenados por nuestro cliente. De esta manera, nuestro cliente puede continuar observando otros productos de la tienda, agregarlos en su cesta y confirmar su pedido de compra por única vez (sin necesidad de tener que confirmar el pedido por cada producto que va agregando a la cesta).
Para recordar los productos previamente ordenados por el usuario, por ejemplo un paquete reseller de web hosting ordenado hace 5 minutos, utilizaremos un concepto muy importante en programación web: las variables de SESSION php.
Entonces crearemos un array multidimensional de SESSION llamado $_SESSION['productos_ordenados']. Esto vendría a ser un conjunto de arrays los cuales, en nuestro ejemplo, tendrán la misma estructura (misma cantidad y nombres de campos).
Cada array, que forma parte del array multidimensional "$_SESSION['productos_ordenados']", será conformado por cuatro campos: producto, unidades, precio-unitario y subtotal. Y guardará información de cada producto ordenado por nuestro cliente; por ejemplo si el usuario compra dos Paquetes Reseller de Web Hosting nosotros lo expresaríamos de la siguiente manera en un array:
Código :
array( "producto"=> "reseller-web-hosting", "unidades"=> 2, "precio-unitario"=> 150, "subtotal"=> 300 );
Pero recordemos que éste array, tiene que estar dentro del array multidimensional; para que éste producto forme parte de los productos ordenados por el cliente en nuestro e-commerce.
Agregamos el array dentro del array multidimensional mediante la siguiente sentencia:
Código :
$_SESSION['productos_ordenados'][]=array( "producto"=> "reseller-web-hosting", "unidades"=> 2, "precio-unitario"=> 150, "subtotal"=> 300 );
Nota: En php los corchetes "[]" detrás del nombre del array se utiliza para agregar un nuevo elemento dentro del array.
En nuestro caso, con la sentencia "$_SESSION['productos_ordenados']=array ...", estamos agregando un nuevo elemento (que también es un array) dentro del array multidimensional "$_SESSION['productos_ordenados']".
Agradecemos a la empresa Solo10.com (nuestro supuesto cliente) por facilitarnos las imágenes y características de sus productos Registro de dominios, Web hosting y Web hosting para Resellers.
Desarrollar en php es parte de mi vida cotidiana, es posible que algunos conceptos teóricos los haya dado por sobreentendido... Si te agradaría profundizar algún punto en particular, por favor ingresa un comentario y lo revisamos juntos
Ver demo del script Tienda Virtual (e-commerce) en php
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Freddie el 05 de Mayo de 2011
Pero es una buena forma de entrar al lenguaje.
Por Sarlit el 05 de Mayo de 2011
Por Blogdephp el 05 de Mayo de 2011
Y si, me encuentro trabajando en nuevas funcionalidades de éste script, por ejemplo el registro de los pedidos de compra sobre una base de datos Mysql...
Muy pronto estarán listas estas nuevas publicaciones
Un saludo.-
Por EDGAR MORA el 30 de Mayo de 2011
Por Blogdephp el 04 de Junio de 2011
El array nos sirve para tener guardado en memoria el listado de productos ordenados por nuestro cliente en nuestra tienda on-line e-commerce.
Los utilizamos en el archivo ordenar_producto.php para dos cosas muy importantes:
1. Tomar cada producto ordenado por el cliente e imprimir su info en pantalla. Ver sentencia:
"foreach($_SESSION['productos_ordenados'] as $producto_ordenado){ ......."
2. Cuando el cliente ordena un nuevo producto, lo agregamos en el array. Ver sentencia:
"$_SESSION['productos_ordenados'][]=array(
"producto"=> $_POST['producto'],
"unidades"=> $_POST['unidades'],
"precio-unitario"=> $_POST['precio-unitario'],
"subtotal"=> $_POST['precio-unitario']*$_POST['unidades']
);
}"
Pronto estará disponible una actualización del script
Si continuas con dudas, por favor escribe y lo vemos juntos. un saludo!
Por Pipe el 25 de Noviembre de 2011
Por Joaquin el 14 de Mayo de 2015