Capaldi

Untitled

Nov 10th, 2018
39
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. /**
  3. *
  4. * Implementa o carrinho de compras
  5. * @author David CHC
  6. *
  7. */
  8. final class Carrinho{
  9. /**
  10. *
  11. * Método construtor
  12. * Caso não existe a $_SESSION['carrinho'],
  13. * ele criar atribuindo um array vazio
  14. *
  15. */
  16. public function __construct(){
  17. if(!isset($_SESSION['carrinho'])){
  18. $_SESSION['carrinho'] = array();
  19. }
  20. }
  21. /**
  22. *
  23. * Adiciona um produto ao carrinho
  24. *
  25. * Veja que criar uma chave, tendo a composição de 2 items:
  26. * o ID do produto e o ID da cor do produto
  27. * Essa maneira não irá sobreescrever quando quiser
  28. * vários produtos com cores diferentes.
  29. *
  30. * Um detalhe, se não tiver cor, ele atribui o valor zero,
  31. * facilitando na hora de verificar se tem cor ou não
  32. *
  33. * @param integer $id é código do produto adicionado
  34. * @param integer $qtd é quantidade
  35. * @param integer $cor_id é a cor do produto
  36. *
  37. */
  38. public function adicionar($id_produto, $qtd = 1, $cor_id=null){
  39. //verificar se o valor é nulo
  40. if(is_null($cor_id)){
  41. //Se for, monta o indice, sendo o valor para cor como 0
  42. $indice = sprintf('%s:%s', (int)$cor_id, 0);
  43. }else{
  44. //Se existe um valor, atribui ao indice
  45. $indice = sprintf('%s:%s', (int)$id_produto, (int)$cor_id);
  46. }
  47. /**
  48. * Se não existir esse indice no carrinho
  49. * Atribui ao carrinho com a quantidade
  50. */
  51. if(!isset($_SESSION['carrinho'][$indice])){
  52. $_SESSION['carrinho'][$indice] = (int)$qtd;
  53. }
  54. }
  55. /**
  56. *
  57. * Altera a quantidade do carrinho
  58. * O indice do array é a junção do ID do produto com o ID da cor
  59. *
  60. * @param string $indice é a chave do array
  61. * @param integer $qtd é quantidade para alterar
  62. */
  63. public function alterar($indice, $qtd){
  64. //verifica se existe esse indice
  65. if(isset($_SESSION['carrinho'][$indice])){
  66. //se o quantidade for maior que zero
  67. if($qtd > 0){
  68. //realiza a alteração
  69. $_SESSION['carrinho'][$indice] = (int)$qtd;
  70. }
  71. }
  72. }
  73. /**
  74. *
  75. * Excluir o produto do carrinho
  76. * @param string $indice
  77. */
  78. public function excluir($indice){
  79. //excluir o produto do carrinho
  80. unset($_SESSION['carrinho'][$indice]);
  81. }
  82. /**
  83. *
  84. * Retorna um array com os dados dos produtos no carrinho
  85. * @return array $result
  86. */
  87. public function listarProdutos(){
  88. //inicia a variável com array
  89. $result = array();
  90. foreach($_SESSION['carrinho'] as $indice => $qtd){
  91. //Separa o ID do produto do ID da cor
  92. list($id_produto, $cor_id) = explode(':', $indice);
  93. //Realizar a busca pelo produto, selecionado apenas o nome do produto e preço
  94. $query_product = mysql_query("SELECT produto, preco FROM produtos WHERE id_produto = '$id_produto'");
  95. //retorna os itens do tabela produtos
  96. $row_product = mysql_fetch_assoc($query_product);
  97. /**
  98. * Adicionar ao array o nome do produto, preço , quantidade, subtotal e a cor
  99. * È importante reparar que indice desse array será o mesmo
  100. * do carrinho.
  101. */
  102. $result[$indice]['produto'] = $row['produto'];
  103. $result[$indice]['preco'] = $row['preco'];
  104. $result[$indice]['qtd'] = $row['qtd'];
  105. $result[$indice]['subtotal']= $row['preco'] * $row['qtd'];
  106. $result[$indice]['cor'] = '';
  107. //Verifica se existe cor para o produto
  108. if($cor_id > 0) {
  109. //Faz a busca pela cor , seleciona apenas o nome da cor
  110. $query_cor = mysql_query("SELECT cor FROM cores WHERE cor_id = '$cor_id'");
  111. //retorna os itens do tabela cores
  112. $row_cor = mysql_fetch_assoc($query_cor);
  113. //Adiciona o nome da cor
  114. $result[$indice]['cor'] = $row_cor['cor'];
  115. }
  116. }
  117. return $result;
  118. }
  119.  
  120. /**
  121. *
  122. * Retorna o valor total do carrinho
  123. * Aqui apenas listaremos o produtos
  124. * somaremos o subtotal, que é
  125. * o preço vezes a quantidade
  126. * Isso já foi calculado no método listarProdutos
  127. */
  128. public function valorTotal(){
  129. //listar todos os produtos
  130. $produtos = $this->listarProdutos();
  131. //inicia a variável
  132. $total = 0;
  133. //listar os produtos, para resgatar o subtotal
  134.  
  135. foreach($produtos as $indice => $row){
  136. //realiza a soma
  137. $total += $row['subtotal'];
  138. }
  139.  
  140. return $total;
  141.  
  142. }
  143. }
  144. ?>
RAW Paste Data