Yii Framework Forum: Gridview + Ajax Buttons + $Data["id"] (Resolvido) - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Gridview + Ajax Buttons + $Data["id"] (Resolvido) Como passar o id para um AjaxButton na linha do GridView ? Rate Topic: -----

#1 User is offline   Gustavo Gonçalves 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 02-October 12
  • Location:Belo Horizonte, MG - Brasil

Posted 16 October 2012 - 03:23 PM

Pessoal, preciso da ajuda de vocês novamente.

Tenho uma Gridview, alimentada por um ArrayDataprovider.
Na última coluna, tenho os botões de Excluir e Atualizar.
Ao clicar nestes botões, executo um Ajax / Action no Controller para manipular os dados.

Abaixo estão três formas que encontrei, para incluir no parâmetro 'columns' da GridView.


O código abaixo, foi o mais próximo que consegui. Mas não sei como passar o ID para a função Javascript.

array(
				 'htmlOptions' => array('nowrap'=>'nowrap'),
				 'class'=>'bootstrap.widgets.TbButtonColumn',
                 'template'=>'{del}',
                 'buttons'=>array(
                          'del'=>array(
                          		   'label'=>'excluir',
                                   'click'=>'function() {
                  var str = $("#compras01-form").serialize();
				  var id_item = "<<<<<<<<< PRECISO DO ID >>>>>>>>>>>>";
                  $.ajax({
                   type: "POST",
                   data: str,
           		   url: "/xsanta/index.php?r=compras01/delItem&id="+id_item,
           		   success: function(data) { $("#div_itens").html(data); },
                        })}',
                                         ),
                        ),
			        ),	




Do jeito abaixo, não consigo nem ver o comando POST no Firebug:
		        array(
			            'name' => 'acoes',
			            'header' => 'acoes',
			            'type' => 'raw',
			            'value' => 'CHtml::ajaxLink(CHtml::Encode("Excluir"), 
			            							Yii::app()->controller->createUrl("delItem", array("id"=>$data)), 
			            							array("type"=>"POST",  "success"=>"allFine"))',
			        ),				




Teoricamente, o 3o. jeito é o mais fácil pois consigo pegar o código ID da linha. Mas não consegui executar a action através e Ajax. Ele joga a URL completa no browser, e gera um erro. Eu tentei através de ajaxOptions também, mas não deu certo.
				 array(
					'htmlOptions' => array('nowrap'=>'nowrap'),
					'class'=>'bootstrap.widgets.TbButtonColumn',
					'template'=>'{upd}{del}',
                    'buttons'=>array(       
                                'upd' => array(
                                  'url'=>'Yii::app()->controller->createUrl("editItem", array("id"=>$data["id"]))',
                               ),
                      			'del' => array(
                                  'url'=>'Yii::app()->controller->createUrl("delItem", array("id"=>$data["id"]))',
                                  'options' => array(
                                  		'ajax'=>array('type'=>'POST', 
                                  					   "success"=>"allFine",
                                  					   'url' => 'js:$(this).attr("href")',
                                  					   'cache' => 'false'
													   ),
													 ),
                                ),
                         	),				 
				),



Já pesquisei demais, tentei todas as opções que meu fraco conhecimento permitia.

Agora preciso da ajuda de vocês,

Obrigado.
0

#2 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 818
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 16 October 2012 - 07:01 PM

Gustavo,

Conseguiu resolver o problema?
Newerton Vargas de Araújo
0

#3 User is offline   Gustavo Gonçalves 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 02-October 12
  • Location:Belo Horizonte, MG - Brasil

Posted 16 October 2012 - 07:08 PM

Pessoal,

Encontrei esse help que salvou meu dia:
http://www.yiiframew...s-in-cgridview/

Aprendi a usar os comandos abaixo:
$(this).parent().parent().children(':first-child').text()
$(this).parent().parent().children(':nth-child(2)').text()

Com eles, posso pegar o ID ou outra coluna do meu GridView.

O meu código final ficou assim:

array(
 'htmlOptions' => array('nowrap'=>'nowrap'),
 'class'=>'bootstrap.widgets.TbButtonColumn',
 'template'=>'{del}',
 'buttons'=>array(
           'del'=>array(
	   'label'=>'excluir',
           'click'=>'function() {
                  var str = $("#compras01-form").serialize();
		  var id_item = $(this).parent().parent().children(":first-child").text();
                  $.ajax({
                   type: "POST",
                   data: str,
           		   url: "/website/index.php?r=compras01/delItem&id="+id_item,
           		   success: function(data) { $("#div_itens").html(data); },
                  })}',
           ),
       ),
),


Caso alguém tenha alguma sugestão melhor, favor compartilhar.
Quanto mais informação e gente utilizando o Yii, melhor para todos !

Abs,
0

#4 User is offline   Gustavo Gonçalves 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 02-October 12
  • Location:Belo Horizonte, MG - Brasil

Posted 16 October 2012 - 07:11 PM

View PostNewerton, on 16 October 2012 - 07:01 PM, said:

Gustavo,

Conseguiu resolver o problema?


Oi Newerton, obrigado pela atenção !
Coloquei aí uma solução que encontrei.
Se tiver alguma outra forma, vamos discutir !

Abraço!
0

#5 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 818
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 16 October 2012 - 07:16 PM

Gustavo,

Quais campos está sendo enviado no $("#compras01-form").serialize();?

Uma sugestão só, verifica no seu código-fonte renderizado no browser, veja se ele está criando 1 função para cada linha de registro, se isso estiver acontecendo, é bom você criar uma função fora no CGridView.

Digo isso por que ja tive problemas com essas funções nas páginação em ajax, as funções só funcionava se eu desativa o ajaxUpdate do CGridView.

Uma função que sempre pego de modelo, e a função padrão do Yii de remover os itens do CGridView:

$(document).on('click','#table-grid a.delete',function() {
	if(!confirm('Deseja realmente excluir este item?')) return false;
	var th=this;
	var afterDelete=function(){};
	$.fn.yiiGridView.update('table-grid', {
		type:'POST',
		url:$(this).attr('href'),
		success:function(data) {
			$.fn.yiiGridView.update('table-grid');
			afterDelete(th,true,data);
		},
		error:function(XHR) {
			return afterDelete(th,false,XHR);
		}
	});
	return false;
});

Newerton Vargas de Araújo
0

#6 User is offline   Gustavo Gonçalves 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 02-October 12
  • Location:Belo Horizonte, MG - Brasil

Posted 16 October 2012 - 07:56 PM

View PostNewerton, on 16 October 2012 - 07:16 PM, said:

Gustavo,
Quais campos está sendo enviado no $("#compras01-form").serialize();?


Oi Newerton, como eu utilizo Array no meu GridView, preciso criar vários hiddenFields (um para cada célula da grid) para conseguir acessá-los através do $_POST na Action "delItem" no Controller. No final da Action, depois do Array atualizado, faço um renderPartial que reconstrói o Grid e os hiddenFields. Foi a única forma que consegui de transportar estes dados de um lado para o outro. Tá bom assim ?

View PostNewerton, on 16 October 2012 - 07:16 PM, said:

Uma sugestão só, verifica no seu código-fonte renderizado no browser, veja se ele está criando 1 função para cada linha de registro, se isso estiver acontecendo, é bom você criar uma função fora no CGridView.


Conferi aqui e só aparece uma vez no html.
$(document).on('click','#itens-grid a.del',function() {
                  var str = $("#compras01-form").serialize();
				  var id_item = $(this).parent().parent().children(":first-child").text();
                  $.ajax({
                   type: "POST",
                   data: str,
           		   url: "/xsanta/index.php?r=compras01/delItem&id="+id_item,
           		   success: function(data) { $("#div_itens").html(data); },
                        })});



View PostNewerton, on 16 October 2012 - 07:16 PM, said:

Uma função que sempre pego de modelo, e a função padrão do Yii de remover os itens do CGridView:


Ajuda o novato pouca-prática aqui !!! Eu coloco esse código através do RegisterScript ?


Obrigado mais uma vez viu !
Pra quem está começando, estas dicas são essenciais !
0

#7 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 818
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 16 October 2012 - 08:23 PM

View PostGustavo Gonçalves, on 16 October 2012 - 07:56 PM, said:

Conferi aqui e só aparece uma vez no html.

Então pode manter a função nos botões que deve funcionar corretamente, só testa depois nas próximas páginas.



View PostGustavo Gonçalves, on 16 October 2012 - 07:56 PM, said:

Ajuda o novato pouca-prática aqui !!! Eu coloco esse código através do RegisterScript ?

Isso, você adiciona o script no Yii::app()->clientScript->registerScript(), mais se está aparecendo 1 vez a função nem se preocupa.

Sobre a forma de buscar os dados em javascript, e mais ou menos isso mesmo, e complicado essa parte, já tive uma linha grande somente com funções de parent().parent(), até chegar na coluna que eu precisava pegar o ID hehehe

Mais se está funcionando assim, pode ficar de boa!
Newerton Vargas de Araújo
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users