Esta não é um versão completamente funcional, mas já é uma base para o carrinho de compras de verdade.
< ?php
class Produto {
var $codigo;
var $descricao;
var $preco;
var $quantidade;
function Produto($codigo,$descricao,$preco,$quantidade) {
$this->codigo = $codigo;
$this->descricao = $descricao;
$this->preco = $preco;
$this->quantidade = $estoque;
}
function getCodigo() {
return this->codigo;
}
function getQuantidade() {
return this->getQuantidade;
}
function setQuantidade($quantidade) {
this->quantidade = $quantidade;
}
function getValor() {
return this->preco * this->quantidade;
}
}
class CarrinhoDeCompras() {
var $carrinho;
//Coloca o novo Carrinho de Compras na sessão
function CarrinhoDeCompras() {
session_start();
$_SESSION["carrinho"] = new Array();
}
//Atualiza os dados da sessão
function atualizaDados() {
$_SESSION["carrinho"] = $this->carrinho;
}
//Pega os dados da sessão
function getCarrinho() {
$this->carrinho = $_SESSION["carrinho"];
}
//Adiciona um item no carrinho de compras
function adicionaItem($produto) {
//Pega os dados atualizados da sessão
$this->getCarrinho();
$codigo = $produto->getCodigo();
//Seo produto ainda não está no carrinho adicione
if ($this->arrinho[codigo] != null) {
$this->carrinho[codigo] = $produto;
}
//Caso contrário, apenas incremente a quantidade do produto já existente
else {
$quantidade = $produto->getQuantidade() +
$carrinho[$codigo]->getQuantidade();
$this->carrinho[$codigo]->setQuantidade($quantidade);
}
//Atualiza os dados da sessão
$this->atualizaDados();
}
//Remove um item do carrinho de compras
function removeItem($produto) {
$this->getCarrinho();
$codigo = $produto->getCodigo();
unset($this->carrinho[codigo]);
$this->atualizaDados();
}
//Pega o valor total das compras do usuário
function getTotal() {
$this->getCarrinho();
$total = 0;
foreach($this->carrinho as $produto) {
$total += $produto->getValor();
}
return $total;
}
}
? >
É isso pessoal. Para aqueles que gostaram, sugiro a adição de novas funcionalidades como controle do estoque dos produtos que saem, novas classes que gerenciem formas de pagamento, etc. Quando tiverem com a loja virtual funcionando me avisem para eu visitar =D.
Até a próxima!
18 comentários:
Encontrei teu blog hoje na net e achei interessantíssimo.
Estou começando a estudar php e não tinha conhecimento de OO pra PHP.
Estarei acompanhando assiduamente seu blog.
Abraços.
Já ajudou bastante! Agradecida!
Nossa! quanto erro!
Para o amigo que encontrou muitos erros vale à pena mostrá-los e sugerir melhorias. Assim todos aprendemos e crescemos.
O correto seria:
< ?php
class Produto {
var $codigo;
var $descricao;
var $preco;
var $quantidade;
function Produto($codigo,$descricao,$preco,$quantidade) {
$this->codigo = $codigo;
$this->descricao = $descricao;
$this->preco = $preco;
$this->quantidade = $quantidade;
}
function getCodigo() {
return $this->codigo;
}
function getQuantidade() {
return $this->quantidade;
}
function setQuantidade($quantidade) {
$this->quantidade = $quantidade;
}
function getValor() {
return $this->preco * $this->quantidade;
}
}
class CarrinhoDeCompras {
var $carrinho;
//Coloca o novo Carrinho de Compras na sessão
function CarrinhoDeCompras() {
session_start();
$_SESSION['carrinho'] = Array();
}
//Atualiza os dados da sessão
function atualizaDados() {
$_SESSION["carrinho"] = $this->carrinho;
serialize($_SESSION["carrinho"]);
}
//Pega os dados da sessão
function getCarrinho() {
$this->carrinho = unserialize($_SESSION["carrinho"]);
}
//Adiciona um item no carrinho de compras
function adicionaItem($produto) {
//Pega os dados atualizados da sessão
$this->getCarrinho();
$codigo = $produto->getCodigo();
//Seo produto ainda não está no carrinho adicione
if (!isset($this->carrinho[$codigo])) {
$this->carrinho[$codigo] = $produto;
}
//Caso contrário, apenas incremente a quantidade do produto já existente
else {
$quantidade = $produto->getQuantidade() +
$carrinho[$codigo]->getQuantidade();
$this->carrinho[$codigo]->setQuantidade($quantidade);
}
//Atualiza os dados da sessão
$this->atualizaDados();
}
//Remove um item do carrinho de compras
function removeItem($produto) {
$this->getCarrinho();
$codigo = $produto->getCodigo();
unset($this->carrinho[codigo]);
$this->atualizaDados();
}
//Pega o valor total das compras do usuário
function getTotal() {
$this->getCarrinho();
$total = 0;
foreach($this->carrinho as $produto) {
$total += $produto->getValor();
}
return $total;
}
}
? >
Obrigado por postar o seu código, mas confesso que não entendi os erros apontados.
Pelo que eu vi você apenas adicionou as funções serialize e unserialize (ísso não é obrigatório, já que eu poderia jogar as variáveis na sessão sem serializá-las), e mudou a comparação de isset para !null que aparentemente dá no mesmo (E como eu removo o item do carrinho com unset, faz mais sentido usar isset para testar).
É possível que eu tenha esquecido um $ ou um ;, mas os erros apontados por você são discutíveis, amigo.
Abraços.
Alguma ajuda de como utilizar esta classe (exemplo simples),
Obrigado
Também achei alguns enganos, mas nada muito grave.
A lógica das classes está certa.
Só que você esqueceu do $ em algumas variaveis, como por exemplo:
$this->carrinho[codigo]
ao invés de:
$this->carrinho[$codigo]
ou
return this->codigo;
ao invés de:
return $this->codigo;
Disse engano, por em outras partes do código está certo. Parece confusão de quem tá acostumado a programar em Java, to certo?
O único erro foi na declaração do array:
errado:
$_SESSION["carrinho"] = new Array();
certo:
$_SESSION["carrinho"] = Array();
Fora isso o código está ótimo. Me ajudou bastante. Valeu!
Fala Bruno Nunes, acho que você deveria seguir os comentários e corrigir os erros possíveis no código, pelo que vejo, ainda continuam... o código está ótimo, mas precisa somente corrigir os erros de sintaxe.
Abraços!
Está dando erro quando deleto um produto.
Fatal error: Call to a member function getCodigo() on a non-object in C:\Servidor PHP\www\class_ecommerce.php on line 74
else if( $acao == "del" ){
$cod_produto = $_GET["cod"];
$carrinho->removeItem($cod_produto);
}
Rafael, você mexeu no código?
Porque não estou achando essa parte que você escreveu ai...
Abraços,
me add no msn: lucas@kachola.com
Aprendi muito
Obs.: Não adiciona produtos ao carrinho...
id = $id;
$this->codigo = $codigo;
$this->nome = $nome;
$this->preco = $preco;
$this->quantidade = $quantidade;
$this->quantidadecaixa = $quantidadecaixa;
}
function getId()
{
return $this->id;
}
function getCodigo()
{
return $this->codigo;
}
function getQuantidade()
{
return $this->quantidade;
}
function setQuantidade($quantidade)
{
$this->quantidade = $quantidade;
}
function getQuantidadeCaixa()
{
return $this->quantidadecaixa;
}
function getPreco()
{
return $this->preco * $this->quantidade;
}
}
?>
carrinho;
serialize($_SESSION["carrinho"]);
}
//Pega os dados da sessão
function getCarrinho()
{
if (!isset($_SESSION))
{
SESSION_START();
}
//$this->carrinho = unserialize($_SESSION["carrinho"]);
$this->carrinho = $_SESSION["carrinho"];
}
//Adiciona um item no carrinho de compras
function adicionaItem($produto)
{
//Pega os dados atualizados da sessão
$this->getCarrinho();
$id = $produto->getId();
//Seo produto ainda não está no carrinho adicione
if (!isset($this->carrinho[$id]))
{
echo "ainda nao está no carrinho
";
$this->carrinho[$id] = $produto;
}
//Caso contrário, apenas incremente a quantidade do produto já existente
else
{
echo "Já está no carrinho
";
$quantidade = $produto->getQuantidade() + $carrinho[$id]->getQuantidade();
$this->carrinho[$id]->setQuantidade($quantidade);
}
//Atualiza os dados da sessão
$this->atualizaDados();
}
//Remove um item do carrinho de compras
function removeItem($produto)
{
$this->getCarrinho();
$id = $produto->getId();
unset($this->carrinho[$id]);
$this->atualizaDados();
}
//Pega o valor total das compras do usuário
function getTotal()
{
$this->getCarrinho();
$total = 0;
foreach($this->carrinho as $produto)
{
$total += $produto->getPreco();
}
return $total;
}
//Pega o número de ítens no carrinho de compras
function getNumeroTotal()
{
$this->getCarrinho();
$total = 0;
foreach($this->carrinho as $produto)
{
$total += 1;
}
return $total;
}
}
?>
getGlobalPOSTorGET($idproduto);
// Id da Categoria
$idcategoria = "idcategoria";
$idcategoria = $objSe->getGlobalPOSTorGET($idcategoria);
// Id da SubCategoria1
$idsubcategoria1 = "idsubcategoria1";
$idsubcategoria1 = $objSe->getGlobalPOSTorGET($idsubcategoria1);
// Quantidade
$quantidade = "xunidades";
$quantidade = $objSe->getGlobalPOSTorGET($quantidade);
// Resgantando do banco informações adicionais do Produto
$codigo = "";
$nome = "";
$preco = "";
$quantidadecaixa = "";
$query = "select * from produto where id=$idproduto";
echo $query."
";
$resultado = $obj->executaQuery($query);
while ( $linha = mysql_fetch_array($resultado) )
{
$codigo = $linha['codigo'];
$nome = $linha['nome'];
$preco = $linha['preco'];
$quantidadecaixa = $linha['quantidade'];
}
// Setar dados do produto
$objProduto->setProduto($idproduto,$codigo,$nome,$preco,$quantidade,$quantidadecaixa);
// Adiciona o Produto ao Carrinho de Compras
$objCarrinhoDeCompras->adicionaItem($objProduto);
// Preço Total no Carrinho de Compras
echo "Quantidade->".$quantidade."
TOTAL->".$objCarrinhoDeCompras->getTotal()."
";
// Total no Carrinho de Compras
echo $objCarrinhoDeCompras->getNumeroTotal();
?>
QUEM NUNCA ERROU QUE ATIRE A PRIMEIRA PEDRA!!!
Bruno, apesar de todos esses erros você está de parabéns pela coragem de postar suas idéias! Continue assim e logo será um profissional na área! Abraço!
Eu preciso muito de um código completo de carrinho de compras em phpOO, onde posso conseguir um?
deusadru@gmail.com
Eu preciso muuuuuuito de um código completo em phpOO funcionando o carrinho de compras, estou a procura e está muitoooo difícil, se alguém pode me ajudar eu agradeceria muito.
deusadru@gmail.com
Postar um comentário