Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

#8370
ATUALIZAÇÃO EM 14/06/2013: Neste código há um erro que eu não havia percebido no momento de calcular a quantidade máxima de parcelas. Recomendo não utilizar este código até que este problema seja resolvido. Não tenho previsão para tal pois não sei como resolver este problema agora.

ATUALIZAÇÃO EM 20/05/2013: Agora é possível definir o valor mínimo de cada parcela. Ainda é possível definir a quantidade máxima de parcelas, portanto o módulo escolherá automaticamente entre o parcelamento na quantidade máxima de parcelas permitida (p.ex. 12x de R$ 30 sem juros para um produto de R$ 360), ou o parcelamento possível com o valor mínimo da parcela. (p.ex. 5x de R$ 5,10 sem juros para um produto de R$ 25,50 se o valor mínimo da parcela for de R$ 5).

--------------------

O povo pediu e eu atendi: agora você pode mostrar o parcelamento dos produtos na página inicial e/ou nas categorias! Com cálculo direto, sem depender de rotinas de outros sites.

Atenção: este tutorial destina-se a exibir o parcelamento em qualquer listagem de produtos (página inicial, módulo "Produtos em destaque", categorias, etc). Para exibir o parcelamento na página do produto em si, você deve usar o meu outro tutorial.

Características
- Facilmente configurável no código
- Permite definir a quantidade máxima de parcelas
- Faz cálculos de parcelamentos com juros ou sem juros
- Duas fórmulas para cálculo do parcelamento: juros simples (usado no Pagamento Digital) e tabela Price (usado no PagSeguro e outros)
- Permite definir o valor mínimo das parcelas

Sua loja do OpenCart agora vai exibir a listagem de produtos como as grandes lojas:
<Nome do produto>
R$ 300,00
ou 12x de R$ 25,00
sem juros
e
<Nome do produto>
R$ 35,50
ou 7x de R$ 5,07
sem juros
Antes de começar
Acesse a configuração de moeda da sua loja e certifique-se de que o símbolo de moeda seja igual a "R$ " (sem aspas e com um espaço no final). Devido a uma limitação do OpenCart, a função de cálculo de parcelamento precisa remover o símbolo manualmente antes de fazer os cálculos, e ela está programada para remover o R$ com espaço no final. Se você não fizer esta alteração, o cálculo de parcelamento não funcionará.

Se sua loja usa outra moeda ou se você quiser usar o R$ sem o espaço no final, basta alterar a variável $moeda_da_loja abaixo (repare que nesta variável há um espaço depois do R$).

Para inserir
1. Abra a pasta /catalog/view/theme/<seu tema> e crie um arquivo com o nome parcelamento.php.
2. Neste arquivo, insira o seguinte código:
Código: Selecionar todos
<?php
/*
  Configuracoes do sistema de parcelamento
  ----------------------------------------
  $qtd_parcelas = Define a quantidade de parcelas a ser exibida para os produtos
  $juros = Taxa de juros mensal (deixe em 0 para parcelamento sem juros)
  $moeda_da_loja = Permite especificar a moeda utilizada na loja

  $tipo_de_calculo = Permite escolher o tipo de calculo a ser utilizado
  0 = Juros simples (Pagamento Digital)
  1 = Tabela Price (PagSeguro e outros)
*/

$qtd_parcelas = 12;
$juros = 3.99;
$moeda_da_loja = 'R$ ';
$tipo_de_calculo = 0;
$parcela_minima = 5.00;

if (!$product['special']) {
  $preco_numero = str_replace(',','.',str_replace('.','', str_replace($moeda_da_loja,"",strip_tags($product['price']))));
} else {
  $preco_numero = str_replace(',','.',str_replace('.','', str_replace($moeda_da_loja,"",strip_tags($product['special']))));
}

// Calcula o valor da parcela de acordo com o tipo de calculo utilizado
if ($tipo_de_calculo == 0) {
  $valor_total = ($preco_numero * pow(1+($juros/100), $qtd_parcelas));
  $max_parcelas = intval($valor_total/$parcela_minima);
  if ($max_parcelas < $qtd_parcelas) { $qtd_parcelas = $max_parcelas; }
  $valor_parcela = $valor_total/$qtd_parcelas;
}
if ($tipo_de_calculo == 1) {
  $valor_total = ($preco_numero * ($juros/100));
  $max_parcelas = intval($valor_total/$parcela_minima);
  if ($max_parcelas < $qtd_parcelas) { $qtd_parcelas = $max_parcelas; }
  $valor_parcela = $valor_total/(1-(1/(pow(1+($juros/100), $qtd_parcelas))));
}

// Exibe as frases de parcelamento
echo '<br />ou ' . $qtd_parcelas . 'x de ' . $moeda_da_loja . number_format($valor_parcela, 2, ',', '.');
if ($juros == 0) { echo '<br />sem juros'; } else { echo '<br />com juros de ' . $juros . '% ao m&ecirc;s'; }

?>
3. Decida onde você deseja inserir a exibição de parcelamento.
No OpenCart a chamada de exibição de preço do produto é realizada por vários arquivos (templates). Por exemplo: há um template para a página inicial, outro para as categorias, etc. Você deve abrir os arquivos referentes à seção do site onde você deseja inserir o parcelamento e colocar a chamada para a função de parcelamento.

Segue uma lista não completa de templates usados no OpenCart:
Listagem de produtos na categoria/departamento: /catalog/view/theme/<seu tema>/template/product/category.tpl
Comparação de produtos: /catalog/view/theme/<seu tema>/template/product/compare.tpl
Listagem de produtos de um fabricante/marca: /catalog/view/theme/<seu tema>/template/product/manufacturer_list.tpl
Pesquisa de produtos na loja: /catalog/view/theme/<seu tema>/template/product/search.tpl
Lista de produtos em promoção: /catalog/view/theme/<seu tema>/template/product/special.tpl
Módulo Novos produtos: /catalog/view/theme/<seu tema>/template/module/latest.tpl
Módulo Produtos em destaque: /catalog/view/theme/<seu tema>/template/module/featured.tpl
Módulo Produtos mais vendidos: /catalog/view/theme/<seu tema>/template/module/bestseller.tpl

Observe que no OpenCart 1.5 houve uma mudança na forma como os módulos são inseridos e utilizados. Os módulos acima (e outros) podem ser configurados para serem exibidos na barra lateral, no topo, no rodapé, na página inicial, etc.

4. Abra o arquivo de template desejado, localize a parte onde o preço é exibido e insira a chamada para a função.
Procure pela palavra price ou $price. Isso o ajudará a localizar o trecho da página onde o preço é exibido. Observe que cada tema possui uma forma diferente de exibir o preço, por isso o código fonte pode variar muito. Além disso, alguns templates podem chamar a exibição de preço mais de uma vez.

Vejamos um exemplo usando o arquivo /template/product/category.tpl do tema padrão do OpenCart 1.5: próximo da linha 77 você encontrará o bloco:
Código: Selecionar todos
      <?php if ($product['price']) { ?>
      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>
Abaixo deste bloco insira a chamada:
Código: Selecionar todos
<? include $_SERVER['DOCUMENT_ROOT'] . '/catalog/view/theme/<seu tema>/parcelamento.php'; ?>
Mude <seu tema> acima para o nome da pasta do tema usado na sua loja. Se você estiver usando o tema padrão, coloque default. Verifique se existe algum outro bloco semelhante a este no resto do arquivo e, se houver, insira a chamada novamente.

Atenção: Algumas empresas de hospedagem impedem ou limitam a utilização da diretiva include alegando motivos de segurança (conversa fiada, mas enfim...). Este tutorial utiliza a diretiva include para que você possa usar esta rotina em diversos lugares e posteriormente alterar os parâmetros dela (taxa, parcelas, etc) alterando apenas um arquivo (parcelamento.php). Se você receber uma mensagem de erro no local onde inseriu o parcelamento, provavelmente a sua empresa de hospedagem bloqueou a utilização do include. Para resolver isso, escolha outra empresa de hospedagem ou então coloque todo o código do arquivo parcelamento.php no lugar da linha acima.

5. É isso aí!

Configurando
O código é auto-explicativo e bem comentado. Basta fazer as alterações desejadas:

$qtd_parcelas = Define a quantidade máxima de parcelas aceita pela loja.
$juros = Taxa de juros mensal. Escreva apenas os números e utilize ponto para separar as casas decimais (p.ex. 1.99)
$moeda_da_loja = Permite especificar a moeda utilizada na loja. Se a sua loja usa outra moeda além de R$, escreva aqui a moeda.
$tipo_de_calculo = Permite escolher o tipo de cálculo a ser utilizado no parcelamento: 0 = Juros simples (Pagamento Digital), 1 = Tabela Price (PagSeguro).
$parcela_minima = Permite definir o valor mínimo de cada parcela. O módulo vai determinar automaticamente a quantidade de parcelas que será exibida, com base neste valor.

Observações
- A função escreverá automaticamente 'com juros' ou 'sem juros' de acordo com a configuração correspondente.
- O OpenCart só disponibiliza o preço já formatado (R$ 130,00) e não como um número (130,00). Para fazer os cálculos das parcelas foi necessário fazer uma conversão para número usando a função str_replace. Você deve alterar a opção $moeda_da_loja e especificar o símbolo de moeda utilizado em sua loja caso ele seja diferente de "R$".
- Se o cálculo estiver errado ou não aparecer, verifique se você colocou um espaço em branco após o "R$" na configuração de moeda de sua loja.
- Se o cálculo não aparecer, será necessário revisar a forma como o tema de sua loja funciona. Alguns temas trabalham de forma diferente e é necessário fazer pequenas alterações no código.

- O comando include em PHP exige que seja informado o nome da pasta onde se encontra o arquivo parcelamento.php. Se a sua loja apresentar algum erro do tipo 'include file not found', verifique se você digitou o nome da pasta corretamente. O comando include é necessário para que você possa alterar posteriormente a quantidade de parcelas e juros em toda loja apenas alterando este arquivo.
- Este tutorial modifica um arquivo padrão (core) do OpenCart. Se você atualizar a versão da sua loja você terá de reaplicar estas alterações.

Dúvidas?
No que eu puder ajudar, é só perguntar.
Editado pela última vez por denisgomes em 10 Jul 2013, 15:10, em um total de 5 vezes.
#8392
Muito bom denis em destaques funcionou perfeitamente, so nao consegui fazer funcionar em produtos, o mais importante é em destaques que funcionou, mas se der certo nos restante fica mais completo.

Valew mesmo pela contribuição.
Código: Selecionar todos
Preço: R$100,00 Notice: Undefined variable: product in E:\home\xxxx\Web\com\catalog\view\theme\default\parcelamento.php on line 19Notice: Undefined variable: product in E:\home\xxxx\Web\com\catalog\view\theme\default\parcelamento.php on line 20
ou 12x de R$ 0,00
com juros de 1.99% ao mês
#8395
Denis foi mal ae, acho que acabei fazendo as alterações por este tópico, fiz agora o do outro tópico e td funcionou perfeitamente. fiquei com uma dúvida mas como é sobre o outro tópico vou postar la.

Mais uma vez valeu pela iniciativa, isso me ajudou um bocado.
#8573
Muito boa esta sua contribuição estava atrás disto a muito muito tempo, parabéns, agora eu preciso fazer funcionar, pois fiz como esta na sua explicação e não consegui o resultado esperado, pois esta me dando um erro:
Código: Selecionar todos
Warning: include(/home/estagioc/public_html/estejaonline/catalog/view/theme/default/parcelamento.php) [function.include]: failed to open stream: No such file or directory in /home/estagioc/public_html/estejaonline/loja/catalog/view/theme/default/template/module/latest_home.tpl on line 40

você pode dar um help ai, pois não sei que fiz de errado não sei se foi na posição do código include ou na remoção do espaço da moeda sei lá, só falta isso pra mim me ajuda ai :oops: .

Loja demo dando o erro citado:
http://lojavirtual.estagio7.com.br/loja/

Se quiser dar uma olhada para ver onde eu coloco o código:
http://lojavirtual.estagio7.com.br/loja/latest_home.txt

Versão 1.4.9.5
#8574
Este erro significa que a pasta do comando <? include... ?> está errada ou o arquivo parcelamento.php não está onde deveria estar.
#8576
Eu só mudei o nome do template que é o default e coloquei o arquivo parcelamento.php dentra da pasta ficando assim: catalog/view/theme/default/parcelamento.php

E dentro do latest_home.tpl:
Código: Selecionar todos
<? include $_SERVER['DOCUMENT_ROOT'] . '/catalog/view/theme/[b]default[/b]/parcelamento.php'; ?>

tem alguma coisa errada com o que eu fiz?

outra coisa com respeito ao R$ na administração eu só dei um espaço após o $ e salvei é isto mesmo que tem que fazer?
na Versão 1.4.9.5 onde eu tenho que colocar o comando <? include......
#8581
Acabei de descobrir...
Você colocou a loja virtual no diretório /loja/.
Então você deve usar:
Código: Selecionar todos
<? include $_SERVER['DOCUMENT_ROOT'] . '[b]/loja/[/b]catalog/view/theme/default/parcelamento.php'; ?>

Agora, pra quê isso?
#8594
É que é uma loja de demonstração para os clientes verem, agora esta começando a clarear as coisas os preço já esta aparecendo mas com o valor de R$ 0,00 e com outro tipo de erro agora:
Código: Selecionar todos
Notice: Undefined variable: product in /home/estagioc/public_html/estejaonline/loja/catalog/view/theme/default/parcelamento.php on line 19
Notice: Undefined variable: product in /home/estagioc/public_html/estejaonline/loja/catalog/view/theme/default/parcelamento.php on line 20
você imagina o que possa ser?
tirei o modo manutenção para ver se te ajuda a descobrir o que é agora.
http://lojavirtual.estagio7.com.br/loja

Desculpa por ficar te enchendo mas é que estou precisando muito disto e até agora vc foi o CARA que descobriu isso.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 19

Gente preciso de ajuda urgente. Na migraç&a[…]

Caro @reds , muito obrigado pela resposta.

PHP 8+ incompatibilidade

Toda tradução para a versão 3[…]

Ola @alex3257 Se você precisa apenas ver […]