Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- *
- * Implementa o carrinho de compras
- * @author David CHC
- *
- */
- final class Carrinho{
- /**
- *
- * Método construtor
- * Caso não existe a $_SESSION['carrinho'],
- * ele criar atribuindo um array vazio
- *
- */
- public function __construct(){
- if(!isset($_SESSION['carrinho'])){
- $_SESSION['carrinho'] = array();
- }
- }
- /**
- *
- * Adiciona um produto ao carrinho
- *
- * Veja que criar uma chave, tendo a composição de 2 items:
- * o ID do produto e o ID da cor do produto
- * Essa maneira não irá sobreescrever quando quiser
- * vários produtos com cores diferentes.
- *
- * Um detalhe, se não tiver cor, ele atribui o valor zero,
- * facilitando na hora de verificar se tem cor ou não
- *
- * @param integer $id é código do produto adicionado
- * @param integer $qtd é quantidade
- * @param integer $cor_id é a cor do produto
- *
- */
- public function adicionar($id_produto, $qtd = 1, $cor_id=null){
- //verificar se o valor é nulo
- if(is_null($cor_id)){
- //Se for, monta o indice, sendo o valor para cor como 0
- $indice = sprintf('%s:%s', (int)$cor_id, 0);
- }else{
- //Se existe um valor, atribui ao indice
- $indice = sprintf('%s:%s', (int)$id_produto, (int)$cor_id);
- }
- /**
- * Se não existir esse indice no carrinho
- * Atribui ao carrinho com a quantidade
- */
- if(!isset($_SESSION['carrinho'][$indice])){
- $_SESSION['carrinho'][$indice] = (int)$qtd;
- }
- }
- /**
- *
- * Altera a quantidade do carrinho
- * O indice do array é a junção do ID do produto com o ID da cor
- *
- * @param string $indice é a chave do array
- * @param integer $qtd é quantidade para alterar
- */
- public function alterar($indice, $qtd){
- //verifica se existe esse indice
- if(isset($_SESSION['carrinho'][$indice])){
- //se o quantidade for maior que zero
- if($qtd > 0){
- //realiza a alteração
- $_SESSION['carrinho'][$indice] = (int)$qtd;
- }
- }
- }
- /**
- *
- * Excluir o produto do carrinho
- * @param string $indice
- */
- public function excluir($indice){
- //excluir o produto do carrinho
- unset($_SESSION['carrinho'][$indice]);
- }
- /**
- *
- * Retorna um array com os dados dos produtos no carrinho
- * @return array $result
- */
- public function listarProdutos(){
- //inicia a variável com array
- $result = array();
- foreach($_SESSION['carrinho'] as $indice => $qtd){
- //Separa o ID do produto do ID da cor
- list($id_produto, $cor_id) = explode(':', $indice);
- //Realizar a busca pelo produto, selecionado apenas o nome do produto e preço
- $query_product = mysql_query("SELECT produto, preco FROM produtos WHERE id_produto = '$id_produto'");
- //retorna os itens do tabela produtos
- $row_product = mysql_fetch_assoc($query_product);
- /**
- * Adicionar ao array o nome do produto, preço , quantidade, subtotal e a cor
- * È importante reparar que indice desse array será o mesmo
- * do carrinho.
- */
- $result[$indice]['produto'] = $row['produto'];
- $result[$indice]['preco'] = $row['preco'];
- $result[$indice]['qtd'] = $row['qtd'];
- $result[$indice]['subtotal']= $row['preco'] * $row['qtd'];
- $result[$indice]['cor'] = '';
- //Verifica se existe cor para o produto
- if($cor_id > 0) {
- //Faz a busca pela cor , seleciona apenas o nome da cor
- $query_cor = mysql_query("SELECT cor FROM cores WHERE cor_id = '$cor_id'");
- //retorna os itens do tabela cores
- $row_cor = mysql_fetch_assoc($query_cor);
- //Adiciona o nome da cor
- $result[$indice]['cor'] = $row_cor['cor'];
- }
- }
- return $result;
- }
- /**
- *
- * Retorna o valor total do carrinho
- * Aqui apenas listaremos o produtos
- * somaremos o subtotal, que é
- * o preço vezes a quantidade
- * Isso já foi calculado no método listarProdutos
- */
- public function valorTotal(){
- //listar todos os produtos
- $produtos = $this->listarProdutos();
- //inicia a variável
- $total = 0;
- //listar os produtos, para resgatar o subtotal
- foreach($produtos as $indice => $row){
- //realiza a soma
- $total += $row['subtotal'];
- }
- return $total;
- }
- }
- ?>
Add Comment
Please, Sign In to add comment