Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Carrito de Compra en PHP
Carrito de Compra en PHP
com
Autores del manual Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com: Miguel Angel Alvarez
Director de DesarrolloWeb.com http://www.desarrolloweb.com
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
"
#$ cap%tulos&
3e pueden descargar los c!digos de este art%culo en un archi(o comprimido. !ibrer"a lib#carrito.p$p 'amos a atacar al problema creando una librer%a con la declaraci!n de una clase+ /ue luego utilizaremos para crear un objeto carrito. 4on dicho objeto implementaremos el trabajo t%pico del carro de la compra+ es decir+ introducir productos+ e-traerlos+ contabilizar precios+ etc. Esta librer%a la guardaremos en un archi(o llamado lib5carrito.php y contendr0 el c!digo de la clase carrito+ con todos sus m,todos y propiedades. El carrito se debe poder acceder en cual/uier momento+ siempre y cuando el (isitante permanezca en la p0gina. 6dem0s+ cada (isitante debe disponer de un carrito propio. 6un/ue podr%amos pensar en otras soluciones+ estas necesidades descritas inicialmente+ hacen muy recomendable el uso de (ariables de sesi!n+ puesto /ue o.recen la mejor .orma de tratar con datos espec%.icos de cada usuario+ /ue deben perdurar entre las distintas p0ginas /ue (isite. 'amos a mantener una (ariable de sesi!n con una instancia de la clase carrito+ /ue contendr0 el carro de la compra del (isitante. Esta (ariable de sesi!n se guardar0 en 753E3389 :;ocarrito;< y se debe crear al acceder a la p0gina+ siempre y cuando no se haya creado pre(iamente. )or ello+ en cada p0gina se ha de comprobar si hay un carrito creado y+ si no es as%+ se debe instanciar el objeto.
i. #=isset#753E3389 :;ocarrito;<&&> 753E3389 :;ocarrito;< ? new carrito#&@ A
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
Este c!digo lo hemos situado dentro del archi(o librer%a del carrito+ despu,s de la declaraci!n de la clase. Artculo por Miguel Angel Alvarez
'atos a utilizar )ara empezar+ tenemos /ue lle(ar la cuenta del nDmero de productos /ue se han introducido en el carrito. En el momento de creaci!n del objeto carrito+ el nDmero de productos debe ser igual a cero. Tambi,n necesitaremos guardar los id5producto de cada uno de los productos /ue se (ayan introduciendo en el carrito. Lo haremos a tra(,s del array 7array5id5prod+ /ue es una de las propiedades del objeto. 6hora bien+ probablemente sea Dtil guardar m0s /ue los simples identi.icadores de los productos. 3i se guarda su precio y su nombre puede ser Dtil para mostrar r0pidamente esos (alores sin necesidad de acceder a la base de datos. )ara ello se utilizan otro par de arrays+ /ue tambi,n se han creado como atributos del objeto carrito. Estos son 7array5nombre5prod+ para almacenar los nombres de los productos y 7array5precio5prod+ para guardar los precios de cada uno de los productos del carrito. Artculo por Miguel Angel Alvarez
Es pre.erible empezar por (er los atributos /ue tendr0 la clase carrito+ /ue ya adelantamos en el cap%tulo anterior.
//atributos de la clase (ar 7num5productos@ (ar 7array5id5prod@ (ar 7array5nombre5prod@ (ar 7array5precio5prod@
El atributo 7num5productos guarda el nDmero de productos almacenados en el carrito. 7array5id5prod guarda los identi.icadores de los productos comprados. 7array5nombre5prod almacena los nombres de los productos y por Dltimo+ 7array5precio5prod+ /ue guarda el precio de los productos. )or ejemplo+ si tu(i,semos un solo producto en el carrito+ 7num5productos (aldr%a uno. 6dem0s+ en los arrays tendr%amos una sola posici!n #con %ndice cero&+ donde se guardar%a el identi.icador+ nombre y precio. Estos datos se guardan por separado en cada uno de los tres arrays. M%todos del carrito 'amos ahora con las .unciones t%picas del carrito /ue se necesitar0 crear en algDn momento. Constructor 3e debe contar con un constructor /ue resuma las tareas de inicializaci!n del carrito. En concreto+ el constructor simplemente inicia a cero el nDmero de productos del carrito.
.unction carrito #& > 7thisFGnum5productos?H@ A (ota: Este objeto est0 construido con )*) 2+ donde los constructores tienen el mismo nombre /ue la clase+ en este caso ;carrito;. En )*) $ los constructores deben llamarse siempre 55constructor
)ntroducir un producto en el carrito 3e hace con el m,todo introduce5producto#&+/ue recibe los datos del producto y los introduce en el objeto carrito. Tambi,n aumenta en uno el nDmero de productos del carrito.
.unction introduce5producto#7id5prod+7nombre5prod+7precio5prod&> 7thisFGarray5id5prod:7thisFGnum5productos<?7id5prod@ 7thisFGarray5nombre5prod:7thisFGnum5productos<?7nombre5prod@ 7thisFGarray5precio5prod:7thisFGnum5productos<?7precio5prod@ 7thisFGnum5productosII@ A
El incremento se hace al .inal por/ue el numero de productos inicialmente es cero y el primer producto a insertar deseamos /ue tenga ese %ndice. *orrar un producto del carrito Debemos disponer de una .unci!n /ue nos permita eliminar un producto del carrito. En este caso (oy a crear una .unci!n /ue recibe el nDmero de l%nea del producto dentro del carrito+ /ue corresponde con el %ndice de los arrays de productos /ue deseamos borrar. )odr%amos recibir
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n. 2
tambi,n el identi.icador del producto a borrar o incluso puede ser /ue nos sea Dtil crear un par de .unciones para borrar productos del carrito+ una recibiendo la l%nea del carrito y otra recibiendo el identi.icador del producto. )ara este ejemplo me resulta m0s .0cil recibir la l%nea en la /ue est0 ese producto en el carrito.
.unction elimina5producto#7linea&> 7thisFGarray5id5prod:7linea<?H@ A
3implemente colocamos a cero el identi.icador de producto a borrar. o borramos directamente las (ariables de sesi!n por/ue eso nos obligar%a a recolocar todos los %ndices de las (ariables de sesi!n para /ue .uesen correlati(os. Este detalle tendremos /ue tenerlo en cuenta a la hora de mostrar el carrito+ pues si el identi.icador de producto es cero+ se entiende /ue el producto est0 eliminado del carrito. Tampoco disminuimos en uno el nDmero de productos+ por/ue en realidad no estamos eliminando un producto de la estructura de datos+ sino /ue lo estoy marcando a cero para saber /ue no hay nada /ue contabilizar en ese caso. En el siguiente cap%tulo (eremos la implementaci!n del m,todo m0s complicado del carrito+ /ue es el encargado de mostrar todos los productos /ue hay dentro. Artculo por Miguel Angel Alvarez
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
echo ;K/tableG;@ A
La .unci!n declara primero la (ariable suma donde se guardar0 la suma de importes de los productos. 3e muestran todos los productos con un bucle /ue recorre las l%neas del carrito+ desde la primera hasta el nDmero de productos. En cada l%nea del carrito se muestran sus datos+ teniendo cuidado por/ue si el identi.icador del producto era cero /uer%a decir /ue ese producto hab%a sido borrado del carrito. 6dem0s+ acumulamos en la (ariable suma el importe de todos los productos del carrito /ue no han sido borrados pre(iamente. Toda(%a dentro del bucle /ue recorre los productos del carrito+ colocamos un enlace para /ue el (isitante pueda eliminar un producto. *ay /ue darse cuenta /ue el enlace para borrar un producto indica como par0metro la l%nea del carrito /ue se debe borrar+ /ue era lo /ue nosotros necesit0bamos en la .unci!n creada para borrar los productos. Oa .uera del bucle+ imprimimos el importe total con la suma de los importes de los productos /ue hemos ido acumulando durante el bucle. C+digo completo de la clase 'eamos a continuaci!n c!mo /uedar%a la clase carrito completa+ para /ue no se nos pase ningDn detalle.
class carrito > //atributos de la clase (ar 7num5productos@ (ar 7array5id5prod@ (ar 7array5nombre5prod@ (ar 7array5precio5prod@ //constructor. Pealiza las tareas de inicializar los objetos cuando se instancian //inicializa el numero de productos a H .unction carrito #& > 7thisFGnum5productos?H@ A //8ntroduce un producto en el carrito. Pecibe los datos del producto //3e encarga de introducir los datos en los arrays del objeto carrito //luego aumenta en " el numero de productos .unction introduce5producto#7id5prod+7nombre5prod+7precio5prod&> 7thisFGarray5id5prod:7thisFGnum5productos<?7id5prod@ 7thisFGarray5nombre5prod:7thisFGnum5productos<?7nombre5prod@ 7thisFGarray5precio5prod:7thisFGnum5productos<?7precio5prod@ 7thisFGnum5productosII@ A //Cuestra el contenido del carrito de la compra //ademas pone los enlaces para eliminar un producto del carrito .unction imprime5carrito#&> 7suma ? H@ echo JKtable border?" cellpadding?;E;G KtrG KtdGKbG ombre productoK/bGK/tdG KtdGKbG)recioK/bGK/tdG KtdG K/tdG K/trGJ@ .or #7i?H@7iK7thisFGnum5productos@7iII&> i.#7thisFGarray5id5prod:7i<=?H&> Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n. 1
A A //muestro el total echo ;KtrGKtdGKbGT9T6L:K/bGK/tdGKtdG KbG7sumaK/bGK/tdGKtdG K/tdGK/trG;@ //total m0s 8'6 echo ;KtrGKtdGKbG8'6 #"1M&:K/bGK/tdGKtdG KbG; . 7suma N "."1 . ;K/bGK/tdGKtdG K/tdGK/trG;@ echo ;K/tableG;@ A //elimina un producto del carrito. recibe la linea del carrito /ue debe eliminar //no lo elimina realmente+ simplemente pone a cero el id+ para saber /ue esta en estado retirado .unction elimina5producto#7linea&> 7thisFGarray5id5prod:7linea<?H@ A
echo JKtrGJ@ echo ;KtdG; . 7thisFGarray5nombre5prod:7i< . ;K/tdG;@ echo ;KtdG; . 7thisFGarray5precio5prod:7i< . ;K/tdG;@ echo ;KtdGKa hre.?Jeliminar5producto.phpLlinea?7iJGEliminar productoK/tdG;@ echo JK/trGJ@ 7suma I? 7thisFGarray5precio5prod:7i<@
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
mete#producto.p$p Esta p0gina introduce el un producto en el carrito de la compra. Pecibe los datos del producto a introducir por la UPL. Lo /ue hace es llamar al m,todo introduce5producto#&+ pasando los datos del producto+ /ue se reciben por VET.
KL include#;lib5carrito.php;&@ 753E3389 :;ocarrito;<FGintroduce5producto#75VET:;id;<+ 75VET:;nombre;<+ 75VET:;precio;<&@ LG KhtmlG KheadG KtitleG8ntroduce )roductoK/titleG K/headG KbodyG )roducto introducido. KbrG KbrG Ka hre.?;inde-.php;GF 'ol(erK/aG KbrG KbrG Ka hre.?;(er5carrito.php;GF 'er carritoK/aG K/bodyG K/htmlG
ver#carrito.p$p La p0gina /ue muestra el carrito es b0sicamente una llamada al m,todo de la clase carrito /ue se encarga de mostrar el contenido del carro de la compra y la suma de los precios de los productos.
KL include#;lib5carrito.php;&@ LG KhtmlG KheadG KtitleG8ntroduce )roductoK/titleG K/headG KbodyG KL 753E3389 :;ocarrito;<FGimprime5carrito#&@ LG KbrG KbrG Ka hre.?;inde-.php;G'ol(erK/aG K/bodyG K/htmlG
eliminar#producto.p$p
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.
Esta p0gina recibe por VET el %ndice del producto /ue se desea borrar. 4on el %ndice+ se llama al m,todo elimina5producto+ /ue se encarga de marcar como eliminado el producto del carro.
KL include#;lib5carrito.php;&@ 753E3389 :;ocarrito;<FGelimina5producto#75VET:;linea;<&@ LG KhtmlG KheadG KtitleG8ntroduce )roductoK/titleG K/headG KbodyG )roducto eliminado. KbrG KbrG KbrG Ka hre.?;inde-.php;GF 'ol(erK/aG KbrG KbrG Ka hre.?;(er5carrito.php;GF 'er carritoK/aG K/bodyG K/htmlG
Carrito de la compra en PHP: www.desarrolloweb.com/manuales/56/ Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. o reproducir sin autorizaci!n.