Fórum OpenCart Brasil

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

#61140
Respondendo a dúvida do @samirdesign do @tudogadget do @SiriQueiju do @thiiix7 e de quem mais estiver interessado, segue abaixo a modificação do código feito pelo @denisgomes e com uma ajuda do @maxno que também postou um tuto legal sobre o assunto. Resumindo, juntei os códigos que os dois criaram e o resultado foi este:
Código: Selecionar todos
<?php
                $maximo_parcelas = 12;
                $parcela_minima = 5;
                $parcelas_sem_juros = 1;
                // juros total do Bcash: 1.99 (pode variar de acordo com a categoria escolhida com eles)
                // juros total do PagSeguro: 1.71
                $juros = 1.71; 
                $moeda_da_loja = 'R$ ';
                $tipo_de_calculo = 1;

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

                if ($preco_numero >= $parcela_minima*2) {
                
                // Exibicao das parcelas
                for ($p = 1; $p <= $maximo_parcelas; $p++) {

                  // Se a parcela nao tiver juros
                  if ($p <= $parcelas_sem_juros) {
                    $valor_parcela = $preco_numero / $p;
                    $valor_total = ($preco_numero / $p) * $p;                    
                  }

                  // Se a parcela tiver juros
                  if ($p > $parcelas_sem_juros) {
                    if ($tipo_de_calculo == 0) { // Bcash
                      $valor_parcela = ($preco_numero * pow(1+($juros/100), $p))/$p;
                      $valor_total = (($preco_numero * pow(1+($juros/100), $p))/$p) * $p;
                    }
                    if ($tipo_de_calculo == 1) { // PagSeguro
                    	// parc = resultado de: fator do pagseguro x quantidade de parcelas. Ex: 0,52255 x 2 = 1.0451. Utilizar arredondamento, somente 4 casas após a vírgula!
                    	// fatores atuais (fonte pagseguro): 
                    	// 2x = 0,52255 
                    	// 3x = 0,35347
                    	// 4x = 0,26898
                    	// 5x = 0,21830
                    	// 6x = 0,18453
                    	// 7x = 0,16044
                    	// 8x = 0,14240
                    	// 9x = 0,12838
                    	// 10x = 0,11717
                    	// 11x = 0,10802
                    	// 12x = 0,10040
                    	    	
                    	$parc[2] = '1.0451';
                  	$parc[3] = '1.0604';
                  	$parc[4] = '1.0759';
                  	$parc[5] = '1.0915';
                  	$parc[6] = '1.1072';
                  	$parc[7] = '1.1231';
                  	$parc[8] = '1.1392';
                  	$parc[9] = '1.1554';
                  	$parc[10] = '1.1717';
                  	$parc[11] = '1.1882';
                  	$parc[12] = '1.2048';
                      $valor_parcela = ($preco_numero * $parc[$p]) / $p;
                      $valor_total = $preco_numero * $parc[$p];
                    }
                  }			
                  // Escreve a parcela se ela for maior do que a parcela minima
                  
                  if ($valor_parcela >= $parcela_minima) {
                    $valor_parcela = number_format($valor_parcela, 2, ',', '.');
                    $valor_total = number_format($valor_total, 2, ',', '.');
                    if ($p <= $parcelas_sem_juros) {
                      echo $p . 'x de <span style="font-size:18px">' . $moeda_da_loja . $valor_parcela . '</span>' . ' sem juros<br />';
                    } else {
                      echo $p . 'x de <span style="font-size:18px">' . $moeda_da_loja . $valor_parcela . '</span> com juros - Total <span style="font-size:18px">' . $moeda_da_loja . $valor_total . '</span><br />';
                    }
                  }
                  
                }
                }
                
                // Exibe os juros utilizados e o valor minimo da parcela se esta for maior que zero
                if ($parcelas_sem_juros < $maximo_parcelas) {
                  $juros = number_format($juros, 2, ',', '.');
                  echo 'Juros de ' . $juros . '% ao mês<br />';
                }
                if ($parcela_minima > 0) {
                  $parcela_minima = number_format($parcela_minima, 2, ',', '.');
                  echo 'Parcela mínima de ' . $moeda_da_loja . $parcela_minima . '<br />';
                }                
              ?>
Acrescentei o valor total quando o parcelamento for com juros. Não fiz o mesmo quando for sem juros, pois ao meu ver é desnecessário já que o valor final sempre será o mesmo, porém deixei a fórmula pronta, bastando acrescentar no echo igual ao parcelamento com juros.

Removi as colunas e o table, pois no meu tema não ficaram legais, mas fica a critério de cada um utilizar ou não com colunas.

Testado na versão 1.5.6.4; não ocorreu nenhum erro. Se ocorrerem erros com vocês ou se tiverem dúvidas, postem seus comentários.

Agradecimentos:
A Deus, ao denisgomes, maxno e toda a comunidade.

Espero ter ajudado :D
#62058
jgs82 escreveu:Boa tarde pessoal,

Obrigado Denis e Rmatheus, coloquei na loja que estou testando e ficou bom.
Podem dar uma confere http://www.hostg.us/oc

Agora vou procurar como colocar na página principal a informação de pagamento em 12 vezes.
Valeu galera, aprendendo muito com vocês.
Abs
Muito bacana seu site gostei de alguns detalhes poderia me passa como vc colocou aquele preço em um circulo ? obrigado
#62060
rmatheus escreveu:Pessoal, desculpe mas não tinha visto as respostas. Segue o código:
Código: Selecionar todos
<!-- Exibicao de parcelas -->
              <?php
                /*
                  Configuracoes do sistema de parcelamento
                  ----------------------------------------
                  $maximo_parcelas = Define a quantidade maxima de parcelas aceita pela loja
                  $parcela_minima = Valor minimo da parcela aceito pela loja
                  $parcelas_sem_juros = Define quantas parcelas nao terao juros
                  $juros = Taxa de juros mensal
                  $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)
                */

                $maximo_parcelas = 12;
                $parcela_minima = 5;
                $parcelas_sem_juros = 3;
                $juros = 1.79;
                $moeda_da_loja = 'R$ ';
                $tipo_de_calculo = 1;

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

                if ($preco_numero >= $parcela_minima*2) {

               // A vista
              echo '<b>Deposito Itau ou Pagamento na Entrega</b><br />';
             $percentual = 5.0 / 100.0; // 5%
                 $valor_final = $preco_numero - ($percentual * $preco_numero);
                 $valor_final = number_format($valor_final, 2, ',', '.');
                echo '<span style="color: darkgreen;">' . "Por " . $moeda_da_loja . $valor_final . " (5% de desconto)" . '</span> <br /> <br />';
            
                // Titulo
                echo '<b>Cart&atilde;o de cr&eacute;dito (via PagSeguro)</b><br />';
                echo '<table width="100%">';

                // Inicia a primeira coluna
                echo '<div style="width: 50%; float:left;">';
            $valor_1x = number_format($preco_numero, 2, ',', '.');
                echo '<span style="color: darkgreen;">' . "1x de " . $moeda_da_loja . $valor_1x . "" . '</span><br />';
            
                // Exibicao das parcelas
                for ($p = 2; $p <= $maximo_parcelas; $p++) {

                  // Se a parcela nao tiver juros
                  if ($p <= $parcelas_sem_juros) {
                    $valor_parcela = $preco_numero / $p;
                  }

                  // Se a parcela tiver juros
                  if ($p > $parcelas_sem_juros) {
                    if ($tipo_de_calculo == 0) {
                      $valor_parcela = ($preco_numero * pow(1+($juros/100), $p))/$p;
                    }
                    if ($tipo_de_calculo == 1) {
                      $valor_parcela = ($preco_numero * ($juros/100))/(1-(1/(pow(1+($juros/100), $p))));
                    }
                  }

                  // Escreve a parcela se ela for maior do que a parcela minima
                  if ($valor_parcela >= $parcela_minima) {
                    $valor_parcela = number_format($valor_parcela, 2, ',', '.');
                    if ($p <= $parcelas_sem_juros) {
                      echo '<span style="color: darkgreen;">' . $p . 'x de ' . $moeda_da_loja . $valor_parcela . ' sem juros</span><br />';
                    } else {
                      echo $p . 'x de ' . $moeda_da_loja . $valor_parcela . ' com juros<br />';
                    }
                  }

                  // Fecha a primeira coluna e inicia a segunda
                  if ($p == intval($maximo_parcelas/2)) { echo '</div><div style="width: 50%; float:right;">'; }
                }
                
                // Fecha a segunda coluna e finaliza
                echo '</div>';
                echo '</table><br />';
                }
              ?>
            <!-- Exibicao de parcelas -->
Eu incluí logo antes de:
<?php if ($review_status) { ?>
O código não está limpinho e comentado como o Dênis havia feito anteriormente pois fiz a alteração apenas para a minha loja que é bem simples e usada mais para divulgar os produtos do que vender por ela propriamente dito.

e qual a versão do opencart suporta esse codigo ?
#62478
@RODRIGODEANANIAS @LEIDGE

Não testei, mas como a string do OC 2 em relação ao preço é igual a do 1.5.5.x, deve funcionar.

vá em catalog/view/theme/default/template/product/product.tpl e localize a linha:
Código: Selecionar todos
<?php if ($tax) { ?>
adicione duas linhas acima o código do tutorial, ficará assim:
Código: Selecionar todos
<?php
                $maximo_parcelas = 12;
                $parcela_minima = 5;
                $parcelas_sem_juros = 1;
                // juros total do Bcash: 1.99 (pode variar de acordo com a categoria escolhida com eles)
                // juros total do PagSeguro: 1.71
                $juros = 1.71; 
                $moeda_da_loja = 'R$ ';
                $tipo_de_calculo = 1;

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

                if ($preco_numero >= $parcela_minima*2) {
                
                // Exibicao das parcelas
                for ($p = 1; $p <= $maximo_parcelas; $p++) {

                  // Se a parcela nao tiver juros
                  if ($p <= $parcelas_sem_juros) {
                    $valor_parcela = $preco_numero / $p;
                    $valor_total = ($preco_numero / $p) * $p;                    
                  }

                  // Se a parcela tiver juros
                  if ($p > $parcelas_sem_juros) {
                    if ($tipo_de_calculo == 0) { // Bcash
                      $valor_parcela = ($preco_numero * pow(1+($juros/100), $p))/$p;
                      $valor_total = (($preco_numero * pow(1+($juros/100), $p))/$p) * $p;
                    }
                    if ($tipo_de_calculo == 1) { // PagSeguro
                       // parc = resultado de: fator do pagseguro x quantidade de parcelas. Ex: 0,52255 x 2 = 1.0451. Utilizar arredondamento, somente 4 casas após a vírgula!
                       // fatores atuais (fonte pagseguro): 
                       // 2x = 0,52255 
                       // 3x = 0,35347
                       // 4x = 0,26898
                       // 5x = 0,21830
                       // 6x = 0,18453
                       // 7x = 0,16044
                       // 8x = 0,14240
                       // 9x = 0,12838
                       // 10x = 0,11717
                       // 11x = 0,10802
                       // 12x = 0,10040
                              
                     $parc[2] = '1.0451';
                     $parc[3] = '1.0604';
                     $parc[4] = '1.0759';
                     $parc[5] = '1.0915';
                     $parc[6] = '1.1072';
                     $parc[7] = '1.1231';
                     $parc[8] = '1.1392';
                     $parc[9] = '1.1554';
                     $parc[10] = '1.1717';
                     $parc[11] = '1.1882';
                     $parc[12] = '1.2048';
                      $valor_parcela = ($preco_numero * $parc[$p]) / $p;
                      $valor_total = $preco_numero * $parc[$p];
                    }
                  }         
                  // Escreve a parcela se ela for maior do que a parcela minima
                  
                  if ($valor_parcela >= $parcela_minima) {
                    $valor_parcela = number_format($valor_parcela, 2, ',', '.');
                    $valor_total = number_format($valor_total, 2, ',', '.');
                    if ($p <= $parcelas_sem_juros) {
                      echo $p . 'x de <span style="font-size:18px">' . $moeda_da_loja . $valor_parcela . '</span>' . ' sem juros<br />';
                    } else {
                      echo $p . 'x de <span style="font-size:18px">' . $moeda_da_loja . $valor_parcela . '</span> com juros - Total <span style="font-size:18px">' . $moeda_da_loja . $valor_total . '</span><br />';
                    }
                  }
                  
                }
                }
                
                // Exibe os juros utilizados e o valor minimo da parcela se esta for maior que zero
                if ($parcelas_sem_juros < $maximo_parcelas) {
                  $juros = number_format($juros, 2, ',', '.');
                  echo 'Juros de ' . $juros . '% ao mês<br />';
                }
                if ($parcela_minima > 0) {
                  $parcela_minima = number_format($parcela_minima, 2, ',', '.');
                  echo 'Parcela mínima de ' . $moeda_da_loja . $parcela_minima . '<br />';
                }                
              ?>
// linhas do tema a serem localizadas
<?php } ?>
<?php if ($tax) { ?>
Se ocorrer algum erro, mandem seus comentários

Espero ter ajudado :D
#62532
Agora apareceu, so que 2 tabelas assim:
R$ 59,90
1x de R$ 59,90 sem juros
2x de R$ 29,95 sem juros
3x de R$ 19,97 sem juros
4x de R$ 16,11 com juros - Total R$ 64,45
5x de R$ 13,08 com juros - Total R$ 65,38
6x de R$ 11,05 com juros - Total R$ 66,32
7x de R$ 9,61 com juros - Total R$ 67,27
8x de R$ 8,53 com juros - Total R$ 68,24
9x de R$ 7,69 com juros - Total R$ 69,21
10x de R$ 7,02 com juros - Total R$ 70,18
11x de R$ 6,47 com juros - Total R$ 71,17
12x de R$ 6,01 com juros - Total R$ 72,17
Juros de 1,71% ao m�s
Parcela m�nima de R$ 5,00
Qtd
1

Comprar
Deposito Banco do Brasil ou Bradesco ou Pagamento na Entrega
Por R$ 56,91 (5% de desconto)

Cartão de crédito (via PagSeguro)
1x de R$ 59,90
2x de R$ 29,95 sem juros
3x de R$ 19,97 sem juros
4x de R$ 15,65 com juros
5x de R$ 12,63 com juros
6x de R$ 10,62 com juros
7x de R$ 9,18 com juros
8x de R$ 8,10 com juros
9x de R$ 7,27 com juros
10x de R$ 6,60 com juros
11x de R$ 6,05 com juros
12x de R$ 5,59 com juros
#62628
Oi, tudo bem! Eu sei que o Post é antigo, estou utilizo o esse código "parcelamento na página de produtos" e esse funciona normal.

Referente ao outro código "EXIBIR PARCELAMENTO EM QUALQUER LUGAR" (Também do Denis) quando altero o " $tipo_de_calculo " pra "1", que seria referente ao Pagseguro ele retorna uma mensagem de erro: " Division by zero in" e fica apenas "ou 0 de 0,00", o texto. E quando altero pra "0" volta ao normal, mas com os valores da tabela referente ao BCASH, que não é que quero no momento.

Alguém sabe o que pode ser?

Muito obrigado!
  • 1
  • 23
  • 24
  • 25
  • 26
  • 27

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 […]