javascript

Carrito de compras con JavaScript

En este post de JavaScript y desarrollo web te mostraré cómo implementar un carrito de compras en el lado del cliente con JS.

Será un ejemplo completo de un proyecto en donde además de tener el carrito de compras tendremos un módulo de tienda (pero no habrá transacciones ni pagos reales) y módulo de gestión de productos.

Este proyecto se basa ampliamente en el CRUD con AJAX, PHP y MySQL publicado anteriormente, pero agregamos la gestión del carrito de compras dentro de localStorage.

Como siempre, te dejaré el código completo y listo para descargar.

Gestión de productos

Gestión de productos para el carrito de compras con JS

Como ya lo comenté arriba, este proyecto se basa y toma código de otro publicado anteriormente; por lo que si no entiendes algunos conceptos te recomiendo leer el post que cité arriba.

En este caso ya no veremos cómo guardar, obtener, editar y eliminar los productos, solo nos vamos a centrar en la gestión del carrito de compras, aunque igualmente te dejaré el código completo.

Librería para carrito de compras

Voy a usar mi propia clase que encierra el comportamiento del carrito de compras:

See the gist on github.

Es solo una envoltura que encierra todo el comportamiento del carrito, para poder reusarlo en varios lugares. De nuevo, si quieres profundizar, leer el artículo que dejé en el enlace.

Tienda

Tienda – Lista de productos para agregar al carrito de compras con JavaScript

La tienda es el lugar en donde se muestran los productos al usuario para que se puedan agregar al carrito de compras. En este lugar mostraremos los productos y dependiendo del estado de cada uno, botones.

Si el producto está en el carrito, se muestra que ya está agregado junto con un botón para removerlo. En caso de que no, se muestra un botón para agregarlo.

See the gist on github.

En este caso hacemos un filtro, pues primero obtenemos todos los productos del back-end y ya en el lado del cliente al renderizar los vamos filtrando.

Hay un montón de código debido a que la plantilla lleva varios divs y clases; aquí se ve claramente el uso de frameworks o de al menos librerías para el manejo de plantillas con JS.

Para cada clic del botón existe una función que invoca a un método del carrito y refresca el conteo del encabezado. Presta atención a las líneas 59 y 69.

Refrescar conteo de productos en el encabezado

Como te puedes dar cuenta, en el encabezado existe el botón de ver carrito junto con el conteo de productos. En este caso se necesita refrescar cuando el usuario agrega o quita un producto, pero también cuando navega en otros lugares.

La solución a esto fue colocar la función que refresca el conteo del carrito de compras en el encabezado. Para empezar puse un id al span que tiene el conteo, mismo que es conteoCarrito:

See the gist on github.

Después lo he refrescado con JavaScript, además de exponer esa función de manera global para que pueda ser llamada desde otros lugares.

See the gist on github.

Ahora esa función se llama en el encabezado, pero podemos llamarla desde cualquier otro lugar. En estos casos obtenemos el mismo carrito porque usamos la clave por defecto al instanciarlo, si tú usas otra clave, recuerda indicarla también al construir el objeto en el encabezado.

Ver carrito de compras

Ver carrito de compras con productos almacenados en localStorage usando JavaScript

Para finalizar con los fragmentos de código importante, otro módulo de gran relevancia es el de ver el carrito de compras. En el mismo renderizamos una tabla con los productos, pero estos ya no vienen del servidor, sino que son tomados del lado del cliente.

Aquí deberías enviar los productos o cada id de los mismos al servidor cuando se termine la compra, pero hacer una comprobación en cuanto al precio e ID.

See the gist on github.

Además de tener una referencia a la tabla para dibujar todos los productos, tenemos una referencia al total (para mostrar el total una vez calculado) y una al botón que termina la compra.

El total lo estamos calculando y dibujando en las líneas 16, 18 y 51. Para el caso del clic del botón (línea 6) solo imprimimos los productos, aquí el programador es libre de hacer con la lista lo que mejor le parezca, pues este ejemplo solo contempla el manejo del carrito de compras.

Configurando el proyecto

Si descargas el código, recuerda crear la base de datos y el archivo env.php (no incluido) basándote en el archivo env.ejemplo.php.

Configura tus credenciales en el archivo env.php e importa las tablas de esquema.sql; después de eso puedes visitar el proyecto en tu localhost o servidor de internet y comenzar a probar.

Poniendo todo junto

El código completo y actualizado de esta implementación de carrito de compras con JavaScript usando almacenamiento del lado del cliente lo encuentras en su respectivo repositorio.

Recuerda que esto se basa en el CRUD de PHP con JavaScript y MySQL, pero los productos bien podrían venir de cualquier servicio del lado del servidor.

En caso de que te guste PHP, ya hice una implementación del carrito de compras usando sesiones.

Te dejo con más sobre JavaScript, así como un vistazo a otros proyectos open source.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

1 hora hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

2 horas hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

1 día hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

1 semana hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

1 semana hace

Imprimir PDF generado con HTML

Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…

1 semana hace

Esta web usa cookies.