Fórum OpenCart Brasil

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

#28923
denisgomes escreveu:Honestamente eu não usaria arrays, faria o cálculo dos juros a partir da taxa mensal como usei no meu código.
Realmente o código ficou mais limpo sem o cálculo por fator, que eu havia usado pois não conseguia igualar com a simulação do PagSeguro, que deu certo na price com taxa de 2.49.

Ficou da seguinte forma:

- No local onde serão colocadas as simulações:
Código: Selecionar todos
<!-- exibe parcelamento -->
  <div class="parcelamento"><span>Parcelamento no Cartão:</span>
  <div id="parcelamento" class="htabs" style="margin-bottom:0;padding-bottom:0;"><a href="#tab-pagseguro">PagSeguro</a>
    <a href="#tab-pagamentodigital">PagamentoDigital</a>
  </div>
  <div id="tab-pagseguro" class="tab-content" style="margin-bottom:0;padding-bottom:0;">
  	<?php echo mostraParcelamento($price,$special,1,12,1,5,2.49); ?>
  </div>
  <div id="tab-pagamentodigital" class="tab-content"  style="margin-bottom:0;padding-bottom:0;">
  	<?php echo mostraParcelamento($price,$special,0); ?>
  </div>
  </div>
<!-- fim exibe parcelamento -->
- No script das Tabs:
Código: Selecionar todos
<script type="text/javascript"><!--
$('#tabs a').tabs();
$('#parcelamento a').tabs();
//--></script>
- Na função antes do rodapé:
Código: Selecionar todos
<?php
/*****************************************************************************************
 * Função para exibir simulação de parcelamento
 *
 *      Variáveis:
 *      precoProduto - Valor normal do produto
 *      precoPromo - Valor do produto em promoção
 *      tipoCalculo - Permite escolher juros simples (0) ou tabela price (1)
 *      maxParcelas - Define a quantidade máxima de parcelas para simulação
 *      parcelasSemJuros - Define quantas parcelas não terão juros
 *      parcelaMinima - Valor mínimo da parcela aceito pela loja
 *      taxaJuros - Taxa mensal de juros
 *      moedaLoja - String de moeda a ser removido do preço do produto para cálculos
 *
 *      Referências:
 *      Cálculo de Parcelamento Direto - Dênis Gomes
 *      - https://forum.opencartbrasil.com.br/viewtopic.php?f=41&t=171
 *****************************************************************************************/
function mostraParcelamento($precoProduto,$precoPromo,$tipoCalculo=0,$maxParcelas=12,$parcelasSemJuros=1,$parcelaMinima=5,$taxaJuros=1.99,$moedaLoja='R$') {
	
	if($precoPromo) {
		$precoCalculo = str_replace(',','.',str_replace('.','', str_replace($moedaLoja,"",strip_tags($precoPromo))));
	} else {
		if($precoProduto) {
			$precoCalculo = str_replace(',','.',str_replace('.','', str_replace($moedaLoja,"",strip_tags($precoProduto))));
		} else {
			return "Não foi possível calcular o parcelamento";
		}
	}
	
	// Inicia a primeira coluna
	$retorno = '<div style="width: 50%; float:left; font-size:11px;">';
	
	// Exibicao das parcelas
	for ($p = 1; $p <= $maxParcelas; $p++) {
		// Se a parcela nao tiver juros
		if ($p <= $parcelasSemJuros) {
			$valorParcela = $precoCalculo / $p;
		} else {
			// Se a parcela tiver juros
			switch($tipoCalculo) {
				case 1: // Tabela price
					$valorParcela = ($precoCalculo * ($taxaJuros/100))/(1-(1/(pow(1+($taxaJuros/100), $p))));
					break;
				default: // Juros simples
					$valorParcela = ($precoCalculo * pow(1+($taxaJuros/100), $p))/$p;
			}
		
		}

		// Escreve a parcela se ela for maior do que a parcela minima
		if ($valorParcela >= $parcelaMinima) {
			$valorParcela = number_format($valorParcela, 2, ',', '.');
			if ($p <= $parcelasSemJuros) {
				$retorno.= '<span style="color: #1AA1D9; margin:0; padding:0; line-height:normal;">' . $p . 'x de ' . $moedaLoja . $valorParcela . ' sem juros</span><br />';
			} else {
				$retorno.= $p . 'x de ' . $moedaLoja . $valorParcela . ' com juros<br />';
			}
		}
		
		// Fecha a primeira coluna e inicia a segunda
		if ($p == intval($maxParcelas/2)+1) {
			$retorno.= '</div><div style="width: 50%; float:right; font-size:11px;">';
		}
	}

	// Fecha a segunda coluna
	$retorno.= '</div>';
	
	// Exibe informações sobre o parcelamento
	$retorno.= '<div style="font-size:9px; padding-top:6px; line-height:normal; clear:both;"><span>Esta é apenas uma simulação, os valores reais serão apresentados no pagamento.';
	// Exibe os juros utilizados e o valor minimo da parcela se esta for maior que zero
	if ($parcelasSemJuros < $maxParcelas) {
		$taxaJuros = number_format($taxaJuros, 2, ',', '.');
		$retorno.= ' Juros de ' . $taxaJuros . '% ao m&ecirc;s.';
	}
	if ($parcelaMinima > 0) {
		$parcelaMinima = number_format($parcelaMinima, 2, ',', '.');
		$retorno.= ' Parcela m&iacute;nima de ' . $moedaLoja . $parcelaMinima.'.';
	}
	$retorno.= '</span></div>';
	return $retorno;
}
?>
Se houver melhor forma de informar seus créditos, peço informar.

Meu cliente está em fase final de cadastramento de produtos. Assim que a loja estiver liberada, posto o link no tópico de novas lojas do fórum pro pessoal ver como ficou a simulação para mais de um facilitador de pagamento usando tabs.

Abraço,

Ivan Vieira
Editado pela última vez por ivanvieira em 11 Out 2012, 08:40, em um total de 1 vez.
#30989
Olá Ivan Vieira, sou iniciante no OpenCart, estou com dúvida no caminho que devo inserir este script para exibir o parcelamento. O caminho, catalog/view/theme/[meu tema]/template/product, está correto? Se sim, fiz exatamente o processo que você descreve acima e o mesmo não exibe o parcelamento.. Alguma dica aonde posso estar errando?

Observação:
- PagSeguro Configurado.
- Moeda "R$ " (com espaço), também configurada.

Obrigado!
#31286
Olá wesleyroversonsouza, você precisa editar o arquivo product.tpl no seguinte caminho /catalog/view/theme/[seu tema]/template/product/product.tpl.
Vamos lá, ao abrir o arquivo product.tpl [uso Notepad++ para editar meus arquivos] localiza esse parte do script abaixo [* no meu caso coloquei abaixo]:
Código: Selecionar todos
 <?php if ($minimum > 1) { ?>
 <div class="minimum"><?php echo $text_minimum; ?></div>
 <?php } ?>
 </div>
- Inserir esse script:
Código: Selecionar todos
<!-- Inicio | CSS Parcelamento -->
<style type="text/css">
.product-info .parcelamento {
padding: 10px 5px 10px 5px;
line-height: 20px;
color: #4D4D4D;
border-bottom: 1px solid #E7E7E7;
}
.product-info .parcelamento span {
color: #7f8c99;
display:inline-block;
margin-bottom:8px;
}
</style>
<!-- Final | CSS Parcelamento -->
	
<!-- Inicio | Exibir Parcelamento -->
  <div class="parcelamento"><span>Parcelamento no Cartão:</span>
  <div id="parcelamento" class="htabs" style="margin-bottom:0;padding-bottom:0;"><a href="#tab-pagseguro">PagSeguro</a>
    <a href="#tab-pagamentodigital">PagamentoDigital</a>
  </div>
  <div id="tab-pagseguro" class="tab-content" style="margin-bottom:0;padding-bottom:0;">
     <?php echo mostraParcelamento($price,$special,1,12,1,5,2.49); ?>
  </div>
  <div id="tab-pagamentodigital" class="tab-content"  style="margin-bottom:0;padding-bottom:0;">
     <?php echo mostraParcelamento($price,$special,0); ?>
  </div>
  </div>
<!-- Final | Exibir Parcelamento -->
Após isso localize (quase no final do product.tpl):
Código: Selecionar todos
<script type="text/javascript"><!--
$('#tabs a').tabs();
//--></script>
- Insira o javascript abaixo do $('#parcelamento a').tabs();, ficando assim:
Código: Selecionar todos
<script type="text/javascript"><!--
$('#tabs a').tabs();
$('#parcelamento a').tabs();
//--></script>
Próximo e ultimo passo, no final do arquivo localize <?php echo $footer; ?>. Antes dele insira o seguinte script:
Código: Selecionar todos
<?php
/*****************************************************************************************
 * Função para exibir simulação de parcelamento
 *
 *      Variáveis:
 *      precoProduto - Valor normal do produto
 *      precoPromo - Valor do produto em promoção
 *      tipoCalculo - Permite escolher juros simples (0) ou tabela price (1)
 *      maxParcelas - Define a quantidade máxima de parcelas para simulação
 *      parcelasSemJuros - Define quantas parcelas não terão juros
 *      parcelaMinima - Valor mínimo da parcela aceito pela loja
 *      taxaJuros - Taxa mensal de juros
 *      moedaLoja - String de moeda a ser removido do preço do produto para cálculos
 *
 *      Referências:
 *      Cálculo de Parcelamento Direto - Dênis Gomes
 *      - https://forum.opencartbrasil.com.br/viewtopic.php?f=41&t=171
 *****************************************************************************************/
function mostraParcelamento($precoProduto,$precoPromo,$tipoCalculo=0,$maxParcelas=12,$parcelasSemJuros=1,$parcelaMinima=5,$taxaJuros=1.99,$moedaLoja='R$') {
   
   if($precoPromo) {
      $precoCalculo = str_replace(',','.',str_replace('.','', str_replace($moedaLoja,"",strip_tags($precoPromo))));
   } else {
      if($precoProduto) {
         $precoCalculo = str_replace(',','.',str_replace('.','', str_replace($moedaLoja,"",strip_tags($precoProduto))));
      } else {
         return "Não foi possível calcular o parcelamento";
      }
   }
   
   // Inicia a primeira coluna
   $retorno = '<div style="width: 50%; float:left; font-size:11px;">';
   
   // Exibicao das parcelas
   for ($p = 1; $p <= $maxParcelas; $p++) {
      // Se a parcela nao tiver juros
      if ($p <= $parcelasSemJuros) {
         $valorParcela = $precoCalculo / $p;
      } else {
         // Se a parcela tiver juros
         switch($tipoCalculo) {
            case 1: // Tabela price
               $valorParcela = ($precoCalculo * ($taxaJuros/100))/(1-(1/(pow(1+($taxaJuros/100), $p))));
               break;
            default: // Juros simples
               $valorParcela = ($precoCalculo * pow(1+($taxaJuros/100), $p))/$p;
         }
      
      }

      // Escreve a parcela se ela for maior do que a parcela minima
      if ($valorParcela >= $parcelaMinima) {
         $valorParcela = number_format($valorParcela, 2, ',', '.');
         if ($p <= $parcelasSemJuros) {
            $retorno.= '<span style="color: #1AA1D9; margin:0; padding:0; line-height:normal;">' . $p . 'x de ' . $moedaLoja . $valorParcela . ' sem juros</span><br />';
         } else {
            $retorno.= $p . 'x de ' . $moedaLoja . $valorParcela . ' com juros<br />';
         }
      }
      
      // Fecha a primeira coluna e inicia a segunda
      if ($p == intval($maxParcelas/2)+1) {
         $retorno.= '</div><div style="width: 50%; float:right; font-size:11px;">';
      }
   }

   // Fecha a segunda coluna
   $retorno.= '</div>';
   
   // Exibe informações sobre o parcelamento
   $retorno.= '<div style="font-size:9px; padding-top:6px; line-height:normal; clear:both;"><span>Esta é apenas uma simulação, os valores reais serão apresentados no pagamento.';
   // Exibe os juros utilizados e o valor minimo da parcela se esta for maior que zero
   if ($parcelasSemJuros < $maxParcelas) {
      $taxaJuros = number_format($taxaJuros, 2, ',', '.');
      $retorno.= ' Juros de ' . $taxaJuros . '% ao m&ecirc;s.';
   }
   if ($parcelaMinima > 0) {
      $parcelaMinima = number_format($parcelaMinima, 2, ',', '.');
      $retorno.= ' Parcela m&iacute;nima de ' . $moedaLoja . $parcelaMinima.'.';
   }
   $retorno.= '</span></div>';
   return $retorno;
}
?>


Pronto, agora é só salvar e substituir o arquivo original. Dica: Faça um backup do arquivo original antes de altera-lo, pois caso apresente algum erro e você não consiga reverter, é só substituir que irá ficar como antes.
Qualquer dúvida estou a disposição :!:
#32291
Boa tarde! Nem preciso falar que essa modificação é boa demais!! O primeiro desenvolvedor do meu site falou que era impossível fazer algo parecido, mas então veio o denis pra mostrar o contrário. Valeu!
Mas eu estou tentando modificar a cor e o tamanho da fonte pra dar destaque ao parcelamento (a sugestão em umas páginas anteriores não funcionou para mim). Quero mudar a linha inteira, incluindo a variável number_format, mas não consigo inserir a tag <span style> de jeito nenhum, sempre da o unexpected '<'.
Já tentei de algumas maneiras o seguinte código:
echo <span style="font-size:14px; color #00ff00;">'<br />ou ' . $qtd_parcelas . 'x de ' . $moeda_da_loja . number_format($valor_parcela, 2, ',', '.')</span>;
já coloquei a função echo dentro do span, já coloquei apóstrofe e parênteses em todos os lugares, tentei muita coisa.
Como eu consigo fazer isso?
#32297
Nosfox, em se tratando de computadores, não existe essa de 'é impossível fazer'. Eu não sou programador mas já ouvi muito disso aqui dos meus clientes na minha cidade e eles sempre ficam abobados quando vêem que eu consigo fazer algo que outros diziam ser impossível ;)

O código está inteiro em PHP e para escrever alguma coisa em HTML deve-se colocar o comando ECHO e o seu conteúdo deve estar entre aspas ou apóstrofos, portanto o comando ficaria assim:
Código: Selecionar todos
ATUALIZADO

echo '<span style="font-size:14px; color #00ff00;"><br />ou ' . $qtd_parcelas . 'x de ' . $moeda_da_loja . number_format($valor_parcela, 2, ',', '.') . '</span>';
Se você usar apóstrofos para abrir e fechar o ECHO você deverá usar aspas no HTML, ou vice-versa. Esse negócio de apóstrofos e aspas sempre complica, então tome cuidado e preste atenção.
Editado pela última vez por denisgomes em 14 Dez 2012, 15:51, em um total de 1 vez.
#32367
É isso aí Denis, impossível não é, o que não pode é ter preguiça e se dar por satisfeito! Valeu pela resposta rápida!
Mas então cara, acho q ta faltando um apóstrofo aí nesse código (tem 9 no total), tentei colocar ele antes da quebra de linha mas não deu certo, e algumas permutações entre aspas e apóstrofos tb não deram. Aonde dá pra colocar mais um? Existe outro caractere para especificar uma string? Achei na internet falando sobre heredocs (<<< >>>) e newdocs ('EOD') mas não deram certo, acredito que pelo fato de eu não entendê-los muito bem.
#32443
wesleyroversonsouza escreveu:Ivan vc poderia me passar o caminho de cada implantação tipo

catalog/view/theme/default/template/?????

Para eu tentar fazer a integração?

Desde ja agradeço

Atenciosamente

Wesley
Olá Wesley! Estive afastado do fórum por motivo de trabalho, conseguiu implantar com as dicas do amigo gek2012, que pelo visto conseguiu sozinho já que não pude auxiliá-lo também em tempo hábil?

Abraço,
  • 1
  • 7
  • 8
  • 9
  • 10
  • 11
  • 19