Mascara no filtro da cGridView

Bom dia galera!!

Alguém conhece alguma forma de utilizar uma mascara no filtro da GridView?!?

Estava precisando utilizar uma mascara para o filtro de data no formato 99/99/9999 …

Se alguém puder me ajudar agradeço …

Abraço a todos …

Pega ae!




$this->widget('zii.widgets.grid.CGridView', array(

    'id' => 'table-grid',

    'dataProvider' => $model->search(),

    'filter' => $model,

    'afterAjaxUpdate' => 'function(){

                                jQuery("#' . CHtml::activeId($model, 'datalancamento') . ',#' . CHtml::activeId($model, 'datapagamento') . '").datepicker(

                                    jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional[\'pt-BR\'], {\'changeMonth\':true,\'changeYear\':true,\'dateFormat\':\'dd/mm/yy\'})

                                );

                        }',

    'columns' => array(

...

        array(

            'name' => 'datalancamento',

            'value' => 'date("d/m/Y", strtotime($data->datalancamento))',

            'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array('model' => $model, 'attribute' => 'datalancamento', 'language' => 'pt-BR', 'options' => array('dateFormat' => 'dd/mm/yy', 'changeMonth' => true, 'changeYear' => true)), true),

        ),

        array(

            'name' => 'datapagamento',

            'value' => '($data->datapagamento <> \'0000-00-00\' && !is_null($data->datapagamento)) ? date("d/m/Y", strtotime($data->datapagamento)) : utf8_encode(\'Não pago\')',

            'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array('model' => $model, 'attribute' => 'datapagamento', 'language' => 'pt-BR', 'options' => array('dateFormat' => 'dd/mm/yy', 'changeMonth' => true, 'changeYear' => true)), true),

        ),

...

    ),

));



Olá, e como eu faria para aplicar uma máscara ao campo de filtro do tipo texto. Como eu deixaria por exemplo uma máscara de CPF (999.999.999-99) para um determinado filtro do Grid?

Leandro,

Você vai fazer de 2 jeito, o primeiro você coloca o caminho do plugin da mascara fora da CGridView em um Yii::app()->clientScript.

Ai para resolver o problema de quando mudar a página em ajax, você adiciona novamente o caminho do plugin dentro do ‘afterAjaxUpdate’.




...

'afterAjaxUpdate' => 'function(){jQuery("#' . CHtml::activeId($model, 'cpf') . '").mask('999.999.999-99');}'

...



Olá Newerton, tentei este código mas não deu resultado:


<?php Yii::app()->clientScript->registerCoreScript('jquery.maskedinput.min');?>

<?php $this->widget('zii.widgets.grid.CGridView', array(

'afterAjaxUpdate'=>'function(){jQuery("#' . CHtml::activeId($model, 'ALUNO_CPF') . '").mask(\'999.999.999-99\');}')

[...]

	'columns'=>array(

		'ID',

		'ALUNO_ID',

		'ALUNO_REGISTRO',

		'ALUNO_CPF',

	)

[...]



Newerton tava precisando desse código mesmo, porém coloquei no meu sistema, mais quando vou buscar sempre nunca me trás valor. Terei que exportar alguma biblioteca Jquery??

Leandro,

Assim só vai funcionar se você for para proxima página, para funcionar já na primeira listagem faz assim:


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

   jQuery("#' . CHtml::activeId($model, 'ALUNO_CPF') . '").mask(\'999.999.999-99\');

");

Adrian,

Veja pelo firebug se o envio do filtro com os campos de datas se está indo yyyy-mm-dd ou dd/mm/yyyy.

Se estiver indo no formato da mascara, você precisa fazer um tratamento no search() do seu Model.

Por que os campos do banco de dados é yyyy-mm-dd, ai você precisa converter de dd/mm/yyyy para yyyy-mm-dd no search().

Newerton como é feito esse tratamento no seach() pois eu nunca fiz.

Valeu Newerton, com sua ajuda consegui resolver a parada. Só que tive que mudar a forma de renderizar a coluna. Acrescentei um Chtml::textField no filter.


<?php Yii::app()->clientScript->registerScript("maskedinput",

   "jQuery('#". CHtml::activeId($model, 'ALUNO_CPF') ."').mask('999.999.999-99');"); ?>

<?php $this->widget('zii.widgets.grid.CGridView', array(

	[...]

	'afterAjaxUpdate'=>'function(){jQuery("#' . CHtml::activeId($model, 'ALUNO_CPF') . '").mask("999.999.999-99");}',

	'columns'=>array(

		'ID',

		'ALUNO_ID',

		'ALUNO_REGISTRO',

		array(

			'name'=>'ALUNO_CPF',

			'value'=>certificados_online::getStatus($model->ALUNO_CPF),

			'filter'=>CHtml::textField('certificados_online[ALUNO_CPF]', $model->ALUNO_CPF, array('id'=>'certificados_online_ALUNO_CPF'))

		),[...]

Bom dia, usei o exemplo do Newerton para usar na função de data mas não está funcionando aqui comigo, alguém pode me ajudar?

segue abaixo meu gridview


<?php $this->widget('zii.widgets.grid.CGridView', array(

	'itemsCssClass'=>'table table-striped table-bordered table-hover',

        'htmlOptions'=>array(

            'class'=>'grid-view',

        ),

        'id'=>'visitas-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

                array('header'=>'#',

                    'value'=>'$row + 1 + ($this->grid->dataProvider->pagination->currentPage)',),

                array(

                    'name'=>'cd_usuario',

                    'filter'=>CHtml::listData(Usuario::model()->findAll(),'cd_usuario','ds_nome'),

                    'value'=>'$data->cdUsuario->ds_nome',

                ),

                array(

                    'name'=>'cd_pessoa',

                    'filter'=>CHtml::listData(Pessoa::model()->findAll(),'cd_pessoa','ds_nome'),

                    'value'=>'$data->cdPessoa->ds_nome',

                ),

		'ds_visita',

		'ds_detalhes',

                array(

                    'name'=>'dt_visita',

                    'filter'=>$this->widget('zii.widgets.jui.CJuiDatePicker', array(

                        'model'=>$model,

                        'attribute'=>'dt_visita',

                        'language' => 'pt-BR',

                        'htmlOptions'=> array(

                            'id'=>'datepicker_for_dt_visita',

                            'size'=>'10',

                        ),

                        'defaultOptions'=>array(

                            'showOn'=>'focus',

                            'dateFormat' => 'yy-mm-dd',

                            'chageMonth'=>true,

                            'changeYear'=>true,

                            'showButtonPanel'=>true,

                        )

                    ),

                            true),

                    'value'=>'Funcoes::formatadata($data->dt_visita)',

                ),

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>

Euflávio tenta assim:





<?php

$this->widget('zii.widgets.grid.CGridView', array(

    'itemsCssClass' => 'table table-striped table-bordered table-hover',

    'afterAjaxUpdate' => "reinstallDatePicker",

    'htmlOptions' => array(

        'class' => 'grid-view',

    ),

    'id' => 'visitas-grid',

    'dataProvider' => $model->search(),

    'filter' => $model,

    'columns' => array(

        array('header' => '#',

            'value' => '$row + 1 + ($this->grid->dataProvider->pagination->currentPage)',),

        array(

            'name' => 'cd_usuario',

            'filter' => CHtml::listData(Usuario::model()->findAll(), 'cd_usuario', 'ds_nome'),

            'value' => '$data->cdUsuario->ds_nome',

        ),

        array(

            'name' => 'cd_pessoa',

            'filter' => CHtml::listData(Pessoa::model()->findAll(), 'cd_pessoa', 'ds_nome'),

            'value' => '$data->cdPessoa->ds_nome',

        ),

        'ds_visita',

        'ds_detalhes',

        array(

            'name' => 'dt_visita',

            'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                'model' => $model,

                'attribute' => 'dt_visita',

                'language' => 'pt-BR',

                'htmlOptions' => array(

                    'id' => 'datepicker_for_dt_visita',

                    'size' => '10',

                ),

                'defaultOptions' => array(

                    'showOn' => 'focus',

                    'dateFormat' => 'yy-mm-dd',

                    'chageMonth' => true,

                    'changeYear' => true,

                    'showButtonPanel' => true,

                )

                    ), true),

            'value' => 'Funcoes::formatadata($data->dt_visita)',

        ),

        array(

            'class' => 'CButtonColumn',

        ),

    ),

));

Yii::app()->clientScript->registerScript('re-install-date-picker', "

function reinstallDatePicker(id, data) {

    $('#datepicker_for_dt_visita').datepicker();

}

");

?>



Ei Adrian, funcionou, mas agora a minha dúvida está na hora da pesquisa. se eu seleciono a data no formato brasileiro dd/mm/aaaa ele não encontra.

só busca caso eu digite no padrão yyy-mm-dd

Flávio,

Essa conversão de data, você vai fazer na função search() do seu Model.

Valeu Newerton, fiz aqui uma conversão de datas e funcionou. obrigado amigo!

Flávio, poderia explicar como fez?

Não sei se fazem deste jeito, se há outro jeito de fazer. Mais no meu caso eu resolvi assim:

  • no MODEL na public function search() adicionei uma linha com esta formatação, ficando assim



$criteria->addSearchCondition('DATE_FORMAT(data_abertura, "%d/%m/%Y")', $this->data_abertura, true);



Desta forma consigo fazer os filtros com a data no formato PT-Br :rolleyes: