Máscara de moeda no campo CMaskedTextField

Estou precisando de uma ajuda pra criar uma máscara de moeda no campo CMaskedTextField ou de qualquer outra forma que só permita a digitação de números num campo de texto colocando os automaticamente no formato R$ 9.999,99, eu tentei usar o CMaskedTextField da seguinte forma:

<?php $this->widget(‘CMaskedTextField’, array(‘model’ => $model, ‘attribute’ => ‘aluguel’, ‘mask’ => ‘9.999,99’, ‘htmlOptions’ => array(‘size’ => 6)));?>

Obviamente não funcionou pois essa máscara não compreende os separadores de milhar e decimal, alguém pode ajudar?

tenta esta extensão: http://www.yiiframework.com/extension/yiimeiomask

tente assim:

<?php

$this->widget(‘CMaskedTextField’, array(

'model' =&gt; &#036;model,


'attribute' =&gt; 'aluguel',


'mask' =&gt; '9.999,99',


'[url=&quot;http://www.yiiframework.com/doc/api/1.1/CMaskedTextField#charMap-detail&quot;]charMap[/url]' =&gt; array('.'=&gt;'[&#092;.]' , ','=&gt;'[,]'),


'htmlOptions' =&gt; array('size' =&gt; 6)));

?>

;)

Não deu certo, quando eu clico no campo já aparece 9_999_99 =/

acabei de testar o código abaixo [versão 1.1.6]:




<?php

$this->widget('CMaskedTextField', array(

'model' => $model,

'attribute' => 'aluguel',

'mask' => '9.999,99',

'htmlOptions' => array('size' => 6)

));

?>



e funcionou sem problemas …

qual versão você está usando?

OK, esse código funciona mas e se o valor de aluguel for de apenas R$ 98,75? A formatação fica errada.

hmm entendo… neste caso seria necessário ter uma opção para avaliar a mascara na direção da direita-para-esquerda.

assim, usando o padrão ?9.999,99 funcionaria perfeitamente.

aparentemente a bibliotena Masked Input não possui este recurso. Enviei uma mensagem para o criador da lib… se/quando ele responder aviso por aqui ;)

por hora, recomendo tentar outro plugin de mascara [para jquery] como o http://plugins.jquery.com/project/maskinputmoney

[]'s

Instalei essa extensão e ela estava com um erro de php, corrigi o erro e depois veio um erro de javascript ai eu desisti dela, me parece uma boa idéia mas ela precisa de um bom trato ainda.

Qual erro está dando? Quem fez ela fui eu, e aqui pelo menos não ta dando problema … o meus sistemas usam ela.

O primeiro erro (php) foi na linha 54 do MeioMask.php:

$this->clientScript->registerScript(CLASS.’.’.Vars::OnlyChars($selector), $script);

Tive que tirar a função Vars::OnlyChars($selector) e deixar só o $selector, parece que na versão que estou usando não existe essa função.

Outra coisa, no exemplo de utilização da página http://www.yiiframework.com/extension/yiimeiomask/ falta um parâmetro no textField (value), sem ele dá erro também:

Em vez de echo CHtml::textField(‘textField’, array(‘id’=>‘maskedInput’)); fica echo CHtml::textField(‘textField’, ‘’, array(‘id’=>‘maskedInput’));

E o erro de javascript que eu não pesquisei a fundo:

Erro: defs is undefined

Arquivo-fonte: jquery.maskedinput.js

Linha: 75

A versão do Yii que eu estou usando é a 1.1.5

A questão do Vars::OnlyChars foi uma grande mancada minha. É uma classe que uso nos meus projetos.

Eu testei num projeto limpo e modifiquei algumas coisas e acertei a documentação. Da uma olhada lá agora. O erro de JS não deu aqui, pode ser que eu tenha corrigido antes e nem tenha reparado. Se der, me avisa pra eu tentar acertar.

Eu uso o plugin PriceFormat do jQuery: http://meiaduzia.com.br/cuducos2/priceformat/

Fácil e mortal :)

HUmm … parece muito bom mesmo … E ainda faz a questão da moeda no input.

Não conseguir usar o plugin jquery no yii. Na verdade, nunca usei um plugin do jquery no yii, então minha dificuldade provavelmente está ai.

Rola um hello-world ai? ;)

Valeu, abraço!

Oi Pessoal,

Tô tentando usar o PriceFormat, mas sempre dá erro, parece que ele não reconhece o .js

Onde coloco o arquivo e configuro para ele carregar?

Valeu a força.

Abraço.

Plugin:

http://jquerypriceformat.com/

Configuração rápida:

Pasta:


/js/jquery/jquery.price_format.1.7.min.js

Código:

_form.php


Yii::app()->getClientScript()->registerScriptFile(Yii::app()->baseUrl . '/js/jquery/jquery.price_format.1.7.min.js');


Yii::app()->clientScript->registerScript('jquery-priceformat', "

$('input[id*=_valor]').priceFormat({

    prefix: 'R$ ',

    centsSeparator: ',',

    thousandsSeparator: '.',

    clearPrefix: true

});

");

Obs.: Se você estiver usando no banco de dados decimal(10,2), acho melhor deixar assim:


Yii::app()->clientScript->registerScript('jquery-priceformat', "

$('input[id*=_valor]').priceFormat({

    prefix: '',

    centsSeparator: '.',

    thousandsSeparator: '',

    clearPrefix: true

});

");

Para evitar de fazer tratamento antes de ir para o banco de dados.

Caso o formulário seja no Fron-End deixa da forma anterior, fica estéticamente melhor para o cliente. Ai depois faça o tratamento removendo a virgula.


<div class="row valor">

        <?php echo $form->labelEx($model, 'valor'); ?>

        <?php echo $form->textField($model, 'valor'); ?>

        <?php echo $form->error($model, 'valor'); ?>

    </div>