elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Tutorial] Crea tu propio carrito de compras para tu WebSite
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Tutorial] Crea tu propio carrito de compras para tu WebSite  (Leído 3,264 veces)
Floodish

Desconectado Desconectado

Mensajes: 8


Todo permitido, mientras sea con inteligencia.


Ver Perfil
[Tutorial] Crea tu propio carrito de compras para tu WebSite
« en: 16 Febrero 2016, 08:54 am »

Buenas gente, hace mucho tiempo andaba trabajando en un diseño de una mini-empresa de electrodomésticos, y ellos tenían la idea de crear su propio "carrito" de compras para vender electrodomésticos por la web (con tarjeta de crédito y paypal)

Bueno, me empecé a adentrar un poco más en el tema y noté que había muchas formas y diseños de hacerlos, pero me acuerdo de una buena página que use para hacer este script de la forma más dinámica y mejor posible.

1. Entendiendo el script

Antes de pasar a la programación y a los archivos, es IMPRESINDIBLE entender el funcionamiento de estos, y que lugar ocupan

- Metodo add

Array de clave valor. Se encarga de agregar un producto al carro. Es contable (es decir, podríamos agregar más de una vez el mismo y, así, comprar dos o más)

- remove_producto

identifica cada producto, cifrando con md5 la id del producto y así, eliminará por completo todas las unidades de ese mismo

- get_content

Nos devuelve un array con todos los productos del carrito y la información de cada uno de ellos.

- precio_total

Devuelve el precio total del carrito de compras, por defecto, si el carrito está vacío el valor es de 0.

- artículos_total

Devuelve el número total de artículos del carrito, por defecto, si el carrito está vacío el valor es de 0.

- La función destroy

Elimina por completo el carrito de compras, una vez hecho, nuestro carrito tendrá valor NULL.

2. Comenzando el script

Primero que nada, destacaremos toda nuestra lógica sobre el script dentro de un archivo llamado carrito.class.php, con el siguiente contenido

Código
  1. <?php
  2.  
  3. class Carrito
  4. {
  5.  
  6. //aquí guardamos el contenido del carrito
  7. private $carrito = array();
  8.  
  9. //seteamos el carrito exista o no exista en el constructor
  10. public function __construct()
  11. {
  12.  
  13. if(!isset($_SESSION["carrito"]))
  14. {
  15. $_SESSION["carrito"] = null;
  16. $this->carrito["precio_total"] = 0;
  17. $this->carrito["articulos_total"] = 0;
  18. }
  19. $this->carrito = $_SESSION['carrito'];
  20. }
  21.  
  22. //añadimos un producto al carrito
  23. public function add($articulo = array())
  24. {
  25. //primero comprobamos el articulo a añadir, si está vacío o no es un
  26. //array lanzamos una excepción y cortamos la ejecución
  27. if(!is_array($articulo) || empty($articulo))
  28. {
  29. throw new Exception("Error, el articulo no es un array!", 1);
  30. }
  31.  
  32. //nuestro carro necesita siempre un id producto, cantidad y precio articulo
  33. if(!$articulo["id"] || !$articulo["cantidad"] || !$articulo["precio"])
  34. {
  35. throw new Exception("Error, el articulo debe tener un id, cantidad y precio!", 1);
  36. }
  37.  
  38. //nuestro carro necesita siempre un id producto, cantidad y precio articulo
  39. if(!is_numeric($articulo["id"]) || !is_numeric($articulo["cantidad"]) || !is_numeric($articulo["precio"]))
  40. {
  41. throw new Exception("Error, el id, cantidad y precio deben ser números!", 1);
  42. }
  43.  
  44. //debemos crear un identificador único para cada producto
  45. $unique_id = md5($articulo["id"]);
  46.  
  47. //creamos la id única para el producto
  48. $articulo["unique_id"] = $unique_id;
  49.  
  50. //si no está vacío el carrito lo recorremos
  51. if(!empty($this->carrito))
  52. {
  53. foreach ($this->carrito as $row)
  54. {
  55. //comprobamos si este producto ya estaba en el
  56. //carrito para actualizar el producto o insertar
  57. //un nuevo producto
  58. if($row["unique_id"] === $unique_id)
  59. {
  60. //si ya estaba sumamos la cantidad
  61. $articulo["cantidad"] = $row["cantidad"] + $articulo["cantidad"];
  62. }
  63. }
  64. }
  65.  
  66. //evitamos que nos pongan números negativos y que sólo sean números para cantidad y precio
  67. $articulo["cantidad"] = trim(preg_replace('/([^0-9\.])/i', '', $articulo["cantidad"]));
  68.    $articulo["precio"] = trim(preg_replace('/([^0-9\.])/i', '', $articulo["precio"]));
  69.  
  70.    //añadimos un elemento total al array carrito para
  71.    //saber el precio total de la suma de este artículo
  72.    $articulo["total"] = $articulo["cantidad"] * $articulo["precio"];
  73.  
  74.    //primero debemos eliminar el producto si es que estaba en el carrito
  75.    $this->unset_producto($unique_id);
  76.  
  77.    ///ahora añadimos el producto al carrito
  78.    $_SESSION["carrito"][$unique_id] = $articulo;
  79.  
  80.    //actualizamos el carrito
  81.    $this->update_carrito();
  82.  
  83.    //actualizamos el precio total y el número de artículos del carrito
  84.    //una vez hemos añadido el producto
  85.    $this->update_precio_cantidad();
  86.  
  87. }
  88.  
  89. //método que actualiza el precio total y la cantidad
  90. //de productos total del carrito
  91. private function update_precio_cantidad()
  92. {
  93. //seteamos las variables precio y artículos a 0
  94. $precio = 0;
  95. $articulos = 0;
  96.  
  97. //recorrecmos el contenido del carrito para actualizar
  98. //el precio total y el número de artículos
  99. foreach ($this->carrito as $row)
  100. {
  101. $precio += ($row['precio'] * $row['cantidad']);
  102. $articulos += $row['cantidad'];
  103. }
  104.  
  105. //asignamos a articulos_total el número de artículos actual
  106. //y al precio el precio actual
  107. $_SESSION['carrito']["articulos_total"] = $articulos;
  108. $_SESSION['carrito']["precio_total"] = $precio;
  109.  
  110. //refrescamos él contenido del carrito para que quedé actualizado
  111. $this->update_carrito();
  112. }
  113.  
  114. //método que retorna el precio total del carrito
  115. public function precio_total()
  116. {
  117. //si no está definido el elemento precio_total o no existe el carrito
  118. //el precio total será 0
  119. if(!isset($this->carrito["precio_total"]) || $this->carrito === null)
  120. {
  121. return 0;
  122. }
  123. //si no es númerico lanzamos una excepción porque no es correcto
  124. if(!is_numeric($this->carrito["precio_total"]))
  125. {
  126. throw new Exception("El precio total del carrito debe ser un número", 1);
  127. }
  128. //en otro caso devolvemos el precio total del carrito
  129. return $this->carrito["precio_total"] ? $this->carrito["precio_total"] : 0;
  130. }
  131.  
  132. //método que retorna el número de artículos del carrito
  133. public function articulos_total()
  134. {
  135. //si no está definido el elemento articulos_total o no existe el carrito
  136. //el número de artículos será de 0
  137. if(!isset($this->carrito["articulos_total"]) || $this->carrito === null)
  138. {
  139. return 0;
  140. }
  141. //si no es númerico lanzamos una excepción porque no es correcto
  142. if(!is_numeric($this->carrito["articulos_total"]))
  143. {
  144. throw new Exception("El número de artículos del carrito debe ser un número", 1);
  145. }
  146. //en otro caso devolvemos el número de artículos del carrito
  147. return $this->carrito["articulos_total"] ? $this->carrito["articulos_total"] : 0;
  148. }
  149.  
  150. //este método retorna el contenido del carrito
  151. public function get_content()
  152. {
  153. //asignamos el carrito a una variable
  154. $carrito = $this->carrito;
  155. //debemos eliminar del carrito el número de artículos
  156. //y el precio total para poder mostrar bien los artículos
  157. //ya que estos datos los devuelven los métodos
  158. //articulos_total y precio_total
  159. unset($carrito["articulos_total"]);
  160. unset($carrito["precio_total"]);
  161. return $carrito == null ? null : $carrito;
  162. }
  163.  
  164. //método que llamamos al insertar un nuevo producto al
  165. //carrito para eliminarlo si existia, así podemos insertarlo
  166. //de nuevo pero actualizado
  167. private function unset_producto($unique_id)
  168. {
  169. unset($_SESSION["carrito"][$unique_id]);
  170. }
  171.  
  172. //para eliminar un producto debemos pasar la clave única
  173. //que contiene cada uno de ellos
  174. public function remove_producto($unique_id)
  175. {
  176. //si no existe el carrito
  177. if($this->carrito === null)
  178. {
  179. throw new Exception("El carrito no existe!", 1);
  180. }
  181.  
  182. //si no existe la id única del producto en el carrito
  183. if(!isset($this->carrito[$unique_id]))
  184. {
  185. throw new Exception("La unique_id $unique_id no existe!", 1);
  186. }
  187.  
  188. //en otro caso, eliminamos el producto, actualizamos el carrito y
  189. //el precio y cantidad totales del carrito
  190. unset($_SESSION["carrito"][$unique_id]);
  191. $this->update_carrito();
  192. $this->update_precio_cantidad();
  193. return true;
  194. }
  195.  
  196. //eliminamos el contenido del carrito por completo
  197. public function destroy()
  198. {
  199. unset($_SESSION["carrito"]);
  200. $this->carrito = null;
  201. return true;
  202. }
  203.  
  204. //actualizamos el contenido del carrito
  205. public function update_carrito()
  206. {
  207. self::__construct();
  208. }
  209.  
  210. }

Te recomiendo que releas este archivo unas cuantas veces, así entenderías el total funcionamiento de este archivo y de por sí, el del script

3. Funcionamiento final

Crear un nuevo carrito


Código
  1. $carrito = new Carrito();


Añadir un producto al carrito


Código
  1. //array que crea un producto
  2. $articulo = array(
  3. "id" => 14,
  4. "cantidad" => 3,
  5. "precio" => 50,
  6. "nombre" => "camisetas"
  7. );
  8.  
  9. //añadir el producto
  10. //$carrito->add($articulo);


Eliminar un producto por su unique_id


Código
  1. $carrito->remove_producto("45c48cce2e2d7fbdea1afc51c7c6ad26");


Ese es el aspecto de un campo unique_id de cada producto.

Obtener el contenido del carrito


Código
  1. $carrito->get_content();


Obtener el precio total del carrito

Código
  1. $carrito->precio_total();


Obtener el número de artículos del carrito


Código
  1. $carrito->articulos_total();


Eliminar el contenido del carrito


Código
  1. $carrito->destroy();


Una vez creado el carrito y añadido algún producto, simplemente podemos mostrar los artículos de la siguiente forma.


Código
  1. //asignamos a $carro el método get_content() que contiene el contenido del carrito
  2. $carro = $carrito->get_content();
  3. if($carro)
  4. {
  5. foreach($carro as $producto)
  6. {
  7. echo $producto["id"];
  8. echo "<br />";
  9. echo $producto["unique_id"];
  10. echo "<br />";
  11. echo $producto["cantidad"];
  12. echo "<br />";
  13. echo $producto["precio"];
  14. echo "<br />";
  15. echo $producto["nombre"];
  16. echo "<br />";
  17. }
  18. }

De acá, solo quedaría juntar todo lo que nos falta a nuestro gusto y con nuestro diseño y listo, script funcionando

Espero que les haya servido, saludos y suerte ;-)


« Última modificación: 16 Febrero 2016, 09:04 am por Floodish » En línea

<?php
         include("cerebro.php");
                  // lo que pensamos
             $a = "hacktivismo";
             $b = "is real";
                           // lo que estamos por hacer...
                      echo "el $a<br>";
                      echo $b;
?>
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con carrito de compras en php
PHP
scorpion01 0 4,620 Último mensaje 18 Mayo 2010, 22:27 pm
por scorpion01
Ayuda Con Carrito Compras PHp MYSQL
PHP
lokito1986 3 5,583 Último mensaje 23 Abril 2011, 19:32 pm
por Spider-Net
Duda Con El CARRITO de Compras PHP MYSQL ---!!
PHP
lokito1986 4 6,241 Último mensaje 1 Mayo 2011, 16:26 pm
por dimitrix
Ayuda para instalar carrito de compras
Desarrollo Web
Linton 2 2,087 Último mensaje 24 Febrero 2013, 12:53 pm
por Linton
Descuentos en carrito de compras
PHP
_vicho_ 6 5,028 Último mensaje 9 Junio 2013, 11:38 am
por jdc
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines