Criando seu próprio Helper no CodeIgniter – formatar preço

Sabe quando você precisa gravar um valor financeiro no banco de dados mas precisa mostrar este valor formatado para o usuário em formato de moeda?

Então, existem várias funções espalhadas na web que te ensinam a fazer isto, e hoje vou mostrar uma função que uso há vários anos para fazer a formatação de preços.

E além disto, vou te mostrar como criar um Helper no CodeIgniter onde você coloca esta função e pode usá-la dentro do seu projeto inteiro.

Esta função faz basicamente o seguinte: a função interpreta que as últimas duas casas de um número qualquer serão os centavos. Então, além de ela colocar a vírgula separando as casas decimais, ela também coloca os pontos que separam os milhares.

Muitos sistemas financeiros gravam os valores números inteiro dentro da base de dados. A própria CIELO pede para que os valores sejam informados assim. Então, se você quer mostrar o valor R$ 1,00 ao usuário, deverá gravar este valor no banco de dados assim: 100. Sem pontos nem vírgulas. Depois, basta chamar esta função que vou mostrar que ela faz a formatação automaticamente.

Mas antes de começarmos, vamos entender o que é um helper.

Helper no CodeIgniter são funções que retornam algum valor quando são chamadas, e tem como principal característica a possibilidade de serem chamadas de qualquer lugar do seu sistema. Até mesmo de dentro de uma view.

Criando um helper

Para criar nosso próprio helper, crie um arquivo de nome funcoes_helper.php e salve dentro da pasta application/helpers.

Você precisa seguir a regra de nomenclatura para funcionar. A lógica é que você coloque um nome qualquer e depois _helper.php. Se não fizer isto, o CodeIgniter não vai reconhecer o seu helper.

Após criar o arquivo acima, coloque dentro dele o seguinte conteúdo:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('formata_preco'))
{
function formata_preco($valor)
{
$negativo = false;
$preco = "";
$valor = intval(trim($valor));
if ($valor < 0) {
$negativo = true;
$valor = abs($valor);
}
$valor = strrev($valor);
while (strlen($valor) < 3) {
$valor .= "0";
}
for ($i = 0; $i < strlen($valor); $i++) {
if ($i == 2) {
$preco .= ",";
}
if (($i <> 2) AND (($i+1)%3 == 0)) {
$preco .= ".";
}
$preco .= substr($valor, $i , 1);
}
$preco = strrev($preco);
return ($negativo ? "-" : "") . $preco;
}
}

Feito isso, salve o arquivo e já podemos utilizar a função.

Para testar, vá até uma view sua e digite o seguinte código para ser mostrado ao usuário:

<?

$valor = "100000000";

echo "Valor Original: R$ " . $valor;

echo "<br />";

$this->load->helper("funcoes");

echo "Valor Formatado: R$ " . formata_preco($valor);
?>

Neste código atribuímos na variável $valor um número inteiro qualquer sem pontos nem vírgulas.

Depois mostramos na tela este valor.

Em seguida, nós carregamos o nosso helper, utilizando a linha:

$this->load->helper("funcoes");

Repare que aqui você coloca somente a primeira parte do arquivo de helper que criamos, o resto o CodeIgniter já localiza automaticamente.

Após carregar seu helper, você chama o nome da função normalmente que fica lá dentro.

Lembrando que dentro deste seu helper, você pode ter quantas funções desejar.

No nosso caso, a função que faz a formatação de preços chama-se formata_preco($valor);

Esta função recebe um valor, que é um número inteiro, e devolve o número formatado.

Depois, basta acrescentar o R$ antes do número e pronto.

A saída deverá ser algo deste tipo:

Valor Original: R$ 100000000
Valor Formatado: R$ 1.000.000,00

É isso, espero que tenha sido útil.

Eu gostaria muito de saber qual é a sua dúvida no CodeIgniter. Faça um comentário abaixo e deixe a gente saber, quem sabe sua dúvida vira um post.

Abraços

Fábio

Fábio S. Reszko

Sou Programador PHP desde 2006 e eu acredito sinceramente que programar usando um Framework PHP é a solução para os problemas de códigos desorganizados, difíceis de entender e de dar manutenção no futuro. Se você também acredita nisto, então fique à vontade em explorar meu blog.