Mi problema se resume en convertir un número a un formato Money, parecido al empleado por Excel al dar formato a un número, ejemplo: "1000000" a "$1.000.000", esto con el objetivo que en las vistas a medida que el usuario va digitando el número se vaya aplicando la conversión.
No sé si Yii tiene algún tipo de función que haga esta conversión o me tocaría programarlo con Ajax.
Según entiendo esta función formatea el número de acuerdo a una especificación, ahora bien, necesito formatear el número en la caja de texto del formulario, no en la clase o controlador.
Si lo que querés es que vaya formateando a medida que el usuario escribe creería que no te queda otra que ajax. Me sumo al pedido si es esto lo que buscabas.
Xavier, me es de GRAN ayuda esto del moneymask pero tengo una consulta: como plantean en la página de la extensión, si estoy en un formulario haciendo un update, el campo sólo pone el símbolo $ pero NO los puntos y comas. Tenés idea de cómo solucionar eso?
Pues te va a tocar hacerle una actualización a la extensión.
1: primero ve a la pagina oficial del plugin Jquery-maskMoney y bájate la ultima versión que esta muchooo mas actualizada que la versión que contiene extensión de YII
2: después reemplaza la versión que contiene YII por la que acabas de descargar
una de las mejoras que se han hecho en las actualizaciones es que han agregado el método
$("#demo5").maskMoney('mask');
que permite aplicarle el formato a un valor por defecto (value) del campo de texto.
3: modifica nuevamente la extensión para que aplica el método nuevo, y así pueda aplicarle el formato a los valores que vengan por defecto o de un update de un campo de texto.
ubicación: /extensions/moneymask/MMask.php
Reemplaza la función run por esta
public function run() {
isset($this->config['symbol']) ? '': $this->config['symbol'] = Yii::app()->getLocale()->getCurrencySymbol($this->currency);
Yii::app()->clientScript->registerScript('processPrint', '
$("'.$this->element.'").maskMoney('.json_encode($this->config).');
$("'.$this->element.'").maskMoney("mask");
');
}
lo que hice fue agregar la siguiente linea:
$("'.$this->element.'").maskMoney("mask");
4: Finalmente borra los assets de la carpeta raíz del proyecto y prueba…