Yii Framework Forum: Chtml::button Com Duas Ações - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Chtml::button Com Duas Ações Rate Topic: -----

#21 User is offline   Newerton 

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

Posted 30 October 2012 - 06:25 PM

Mais primeiramente, você tem que resolver o problema do:
'data' => array(
        'qtde_folhas_requisicao' => 'js:$("#Requisicao_qtde_folhas_requisicao").val()',
        'series_disponiveis' => 'js:$("select#series_disponiveis option:selected").val()',
),


Você precisa enviar esses 2 valores para inserir na consulta.

Para usa JSON, segue o post deste tópico.
http://www.yiiframew...post__p__178298
Newerton Vargas de Araújo
0

#22 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 07 November 2012 - 01:35 PM

View PostNewerton, on 29 October 2012 - 07:39 AM, said:

Esses campos hiddenField() você vai só usa ele para pegar os valores? Ou vai usar para salvar no banco de dados?

Foi o que falei anteriormente, se você não for usar os hiddenField() não precisa enviar eles em HTML, ja pode ser enviado somente os valores em JSON.

Sobre o paramêtro 'data' você precisa enviar os valores do <input> verifica o ID dos 2 <inputs>, isso se eles existirem em HTML.

Newerton, boa tarde!

Modifiquei o código usando JSON, conforme você sugeriu.
Utilizei a extensão:
CarJson

O código busca os valores corretamente e exibe na div.
Necessito agora, joga-los para os campos inputs do formulário ( num_requisicao_inicial_medico e num_requisicao_final_medico) e estou com dificuldades. Esses campos sim fazem parte do formulário e vão ser gravados no banco.

O parametro 'data' está comentando pois com ele habilitado para de aparecer os dados buscados na div
O código atualmente está:

_form.php

 <div class="row">
            <?Php
                        
                    echo CHtml::label('Faixas | Séries | Quantidades Disponíveis', 'series_disponiveis');
                    //empty since it will be filled by the other dropdown
                    echo CHtml::dropDownList('series_disponiveis','', array('empty' => 'Escolha um Tipo de Receita', 
                    ));
                    echo CHtml::button('Exibir Faixa', array(
                              'ajax' => array(
                                  'type' => 'POST',
                                  'url' => CController::createUrl('Requisicao/buscaultimo'),
//                                   'data' => array(
//                                                    'quantidadefolhas' => 'js:$("#Requisicao_qtde_folhas_requisicao").val()',
//                                                    'seriesdisponiveis' => 'js:$("select#series_disponiveis option:selected").val()',
//
//                                                    ),
                                 'update' => '#req_dados_dinamicos',
//                                  'success' => 'function(data) {
//                                                    var primeirainicial = 0+$("#primeira_requisicao_inicial").val();
//                                                    var primeirafinal =   0+$("#primeira_requisicao_final").val();
//                                                    var proximainicial =  0+$("#Requisicao_proxima_requisicao_inicial").val();
//                                                    var proximafinal =    0+$("#Requisicao_proxima_requisicao_final").val();
//                                                    var seriesdisponiveis = $("#series_disponiveis").val();
//                                                   
//                                                    var quantidadefolhas =  $("#Requisicao_qtde_folhas_requisicao").val();
//                                                    var quantidadedisponivel =  $("#quantidadedisponivel").val();
//                                                    var quantidadedisponivel2= series_disponiveis.options[series_disponiveis.selectedIndex].text;
//                                                    var quebra=quantidadedisponivel2.split("|");
//                      alert("Primeira inicial: "+primeirainicial+ "Primeira final: "+primeirafinal+ "Proxima inicial: "+proximainicial+ "Proxima final: "+proximafinal);
//                      if(parseInt(quantidadefolhas)>parseInt(quebra[2])+1){
//                        alert("Quantidade de folhas requisitada"+quantidadefolhas+" deve ser menor ou igual a quantidade disponível"+quebra[2]);
//                      }    
//                    
//                     if(isNaN(primeirainicial) &&  isNaN(primeirafinal)){
//                        alert("primeira requisicao");
//                        var numinicialrequisicao = proximainicial;
//                        var numfinalrequisicao = proximafinal;
//                      
//                      }else{
//                        
//                         var numinicialrequisicao = primeirainicial;
//                         var numfinalrequisicao = primeirafinal;
//
//                      }
//                      alert(numinicialrequisicao + " " + numfinalrequisicao + " " + seriesdisponiveis);
//                      $("#Requisicao_num_requisicao_inicial_medico").val(numinicialrequisicao);
//                      $("#Requisicao_num_requisicao_final_medico").val(numfinalrequisicao);
//                      $("#Requisicao_id_num_sequencial").val(seriesdisponiveis);                                      
//
//
//  }
//  '
                            
                            )
                        )
                          );
           
                       ?>
     
        </div>
        
        <div id="req_dados_dinamicos" class="row">

        </div>

 <div class="row">
		<?php echo $form->labelEx($model,'num_requisicao_inicial_medico'); ?>
		<?php echo $form->textField($model,'num_requisicao_inicial_medico',   array('readonly' => true, 'size' => 8, 'maxlength'=>8)); ?>
		<?php echo $form->error($model,'num_requisicao_inicial_medico'); ?>
	</div>

	<div class="row">
		<?php echo $form->labelEx($model,'num_requisicao_final_medico'); ?>
		<?php echo $form->textField($model,'num_requisicao_final_medico', array('readonly' => true, 'size' => 8, 'maxlength'=>8)); ?>
		<?php echo $form->error($model,'num_requisicao_final_medico'); ?>
	</div>



RequisicaoController.php


 public function actionbuscaultimo()
       {
             $parametro = ((int) $_POST['Requisicao']['qtde_folhas_requisicao']);
            
             $parametro2 = (int)$_POST['series_disponiveis'];
              
          
             Yii::import('application.extensions.json.CArJSON');
             $requisicoes = Requisicao::model()->findBySql("SELECT (MAX(req.num_requisicao_final_medico)+1) as proxima_requisicao_inicial, (MAX(req.num_requisicao_final_medico)+:keyword) as proxima_requisicao_final,
                                                            ns.num_sequencial_inicial as primeira_requisicao_inicial, ns.num_sequencial_inicial+:keyword-1 as primeira_requisicao_final,
                                                                    MAX(ns.num_sequencial_final) - MAX(req.num_requisicao_final_medico) as quantidade_disponivel,
                                                                    ns.num_sequencial_final - ns.num_sequencial_inicial as quantidade_disponivel_sem_requisicao
                                                                                                            FROM 
                                                                                                            sch_scspm.tb_num_sequencial ns
                                                                                                            LEFT JOIN sch_scspm.tb_requisicao req
                                                                                                                            ON 
                                                                                                                            (ns.id_num_sequencial = req.id_num_sequencial)

                                                                                                                             WHERE
                                                                                                                                    ns.id_num_sequencial = :keyword2
                                                                                                                    GROUP BY ns.num_sequencial_inicial, ns.num_sequencial_final", array(':keyword' => $parametro, ':keyword2' => $parametro2));

            $json = new CArJSON();
            // Define which relations do you want to load
            $relations = array('medico', 'clinica', 'grafica');
            // Define which attributes, foreach relations do you want to load
            // root denote attributes for the main model
             if ($requisicoes->proxima_requisicao_inicial ==  NULL || $requisicoes->proxima_requisicao_final ==  NULL) {
                 $attributes = array(
                     'root' => array('primeira_requisicao_inicial','primeira_requisicao_final')
                  );

             }  else {
                 $attributes = array(
                    'root' => array('proxima_requisicao_inicial', 'proxima_requisicao_final'),
                );
             }

            echo $json->toJSON($requisicoes, $relations, $attributes);
               
    }


Na div é exibido resultado da seguinte forma:

[{"attributes":{"proxima_requisicao_inicial":5431881,"proxima_requisicao_final":5431890},"relations":{"medico":null,"clinica":null,"grafica":null}}]
0

#23 User is offline   Newerton 

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

Posted 07 November 2012 - 05:36 PM

samjf,

O 'update' que usou, e para retorno em HTML, se quizer usar o JSON, usa o 'success'

'success' => 'function(data) {
console.log(data.attributes.proxima_requisicao_inicial);
console.log(data.attributes.proxima_requisicao_final);
}


Se estiver retornando os valores (5431881 e 5431890_ no console do firebug, ai é somente colocar esse valores dentro do $('#IDseuinput').val(data.attributes.*)
Newerton Vargas de Araújo
0

#24 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 08 November 2012 - 06:44 AM

View PostNewerton, on 07 November 2012 - 05:36 PM, said:

samjf,

O 'update' que usou, e para retorno em HTML, se quizer usar o JSON, usa o 'success'

'success' => 'function(data) {
console.log(data.attributes.proxima_requisicao_inicial);
console.log(data.attributes.proxima_requisicao_final);
}


Se estiver retornando os valores (5431881 e 5431890_ no console do firebug, ai é somente colocar esse valores dentro do $('#IDseuinput').val(data.attributes.*)

Newerton, obrigado mais uma vez!

Acontece que eu realmente não tenho muita afinidade com Javascript.
Consegui debugar o console e deu erro:

TypeError: data.attributes is undefined

Quando mando imprimir o data o resultado é o mesmo que aparecia na div anteriormente:
[{"attributes":{"proxima_requisicao_inicial":5431881,"proxima_requisicao_final":5431890},"relations":{"medico":null,"clinica":null,"grafica":null}}]

Tentei mudar para imprimir apenas com o nome do campo :
proxima_requisicao_inicial e proxima_requisicao_final e não consegui.

Teria que mudar algo no método controller? Na documentação do carjson não encontrei muita coisa referente a esse método. Me parece que ele sempre tem que retornar os valores dessa forma model + relações + atributos pelo menos nesse método toJSON.

Não estou sabendo qual sintaxe poderia pegar cada campo.
Mas estou continuando a tentar aqui.

Me parece que tenho não posso acessar o campo direto, tenho que percorrer antes.
Referência
0

#25 User is offline   Newerton 

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

Posted 08 November 2012 - 04:06 PM

samjf,

Achei meu erro hehe

O array em JSON que retorna:
[{"attributes":{"proxima_requisicao_inicial":5431881,"proxima_requisicao_final":5431890},"relations":{"medico":null,"clinica":null,"grafica":null}}]

A variável attributes é um array, não me atentei a isso.

Faz assim:
console.log(data.attributes[0].proxima_requisicao_inicial);
console.log(data.attributes[0].proxima_requisicao_final);


Uma outra coisa que tem que adicionar é:

Debaixo do:
'type' => 'POST',

Adiciona:
'dataType' => 'json',


Senão a leitura de retorno será HTML (Somente texto),

Depois de ver tudo, não consigo entender uma coisa.

Como consegue esses valores?
$parametro = ((int) $_POST['Requisicao']['qtde_folhas_requisicao']);
$parametro2 = (int)$_POST['series_disponiveis'];


Eles não está sendo enviado ao clicar o botão.

This post has been edited by Newerton: 08 November 2012 - 04:06 PM

Newerton Vargas de Araújo
0

#26 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 09 November 2012 - 05:29 AM

View PostNewerton, on 08 November 2012 - 04:06 PM, said:

samjf,

Achei meu erro hehe

O array em JSON que retorna:
[{"attributes":{"proxima_requisicao_inicial":5431881,"proxima_requisicao_final":5431890},"relations":{"medico":null,"clinica":null,"grafica":null}}]

A variável attributes é um array, não me atentei a isso.

Faz assim:
console.log(data.attributes[0].proxima_requisicao_inicial);
console.log(data.attributes[0].proxima_requisicao_final);


Uma outra coisa que tem que adicionar é:

Debaixo do:
'type' => 'POST',

Adiciona:
'dataType' => 'json',


Senão a leitura de retorno será HTML (Somente texto),

Depois de ver tudo, não consigo entender uma coisa.

Como consegue esses valores?
$parametro = ((int) $_POST['Requisicao']['qtde_folhas_requisicao']);
$parametro2 = (int)$_POST['series_disponiveis'];


Eles não está sendo enviado ao clicar o botão.


O erro permanece, só que agora está retornando como objeto.

Não teria que fazer tipo um foreach nesse caso? Existe essa possibilidade no jS?

Sobre os parametros eles são enviados sim, caso contrário a consulta que retorna os dados não iria funcionar.

Acredito que eles são enviados nesse momento:
'url' => CController::createUrl('Requisicao/buscaultimo'),

Aí no controller pego os dados via $_POST.

Tentei dessa forma para percorrer:

           echo CHtml::button('Exibir Faixa', array(
                              'ajax' => array(
                                  'type' => 'POST',
                                  'dataType' => 'json',
                                  'url' => CController::createUrl('Requisicao/buscaultimo'),
                                  'update' => '#req_dados_dinamicos',
                                  'success' => "function(data) {
                                                  for (var i in data) {
                                                       console.log('Nome: ' + i + ' / Valor: ' + data[i]);
                                                  }
                                          }"                                         

      )
                        )
                          );


Resultado:
Nome: 0 / Valor: [object Object]
0

#27 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 28 November 2012 - 08:30 AM

View Postsamjf, on 09 November 2012 - 05:29 AM, said:

O erro permanece, só que agora está retornando como objeto.

Não teria que fazer tipo um foreach nesse caso? Existe essa possibilidade no jS?

Sobre os parametros eles são enviados sim, caso contrário a consulta que retorna os dados não iria funcionar.

Acredito que eles são enviados nesse momento:
'url' => CController::createUrl('Requisicao/buscaultimo'),

Aí no controller pego os dados via $_POST.

Tentei dessa forma para percorrer:

           echo CHtml::button('Exibir Faixa', array(
                              'ajax' => array(
                                  'type' => 'POST',
                                  'dataType' => 'json',
                                  'url' => CController::createUrl('Requisicao/buscaultimo'),
                                  'update' => '#req_dados_dinamicos',
                                  'success' => "function(data) {
                                                  for (var i in data) {
                                                       console.log('Nome: ' + i + ' / Valor: ' + data[i]);
                                                  }
                                          }"                                         

      )
                        )
                          );


Resultado:
Nome: 0 / Valor: [object Object]


Alguém tem alguma idéia de alguma solução para essa questão?
Estou usando paleativamente dois botões
Obrigado!
0

#28 User is offline   ricardograna 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 376
  • Joined: 31-March 09
  • Location:Manaus/AM - Brazil

Posted 03 December 2012 - 11:44 PM

	echo CHtml::AjaxButton('Exibir Faixa', array('Requisicao/buscaultimo'), 
 		array(                                  'type' => 'POST',
         	'dataType' => 'json',
         	'data' => array( 
                 'quantidadefolhas' => 'js:$("#Requisicao_qtde_folhas_requisicao").val()',
                 'seriesdisponiveis' => 'js:$("select#series_disponiveis option:selected").val()', 
         	), 
         	'success' => "function(data) { 
                 $('#campo').val(data.campo);
					.... 
                 }" 
         	) 
 		);



Controller:

public function actionbuscaultimo()
   	{
     		$parametro = ((int) $_POST['quantidadefolhas']);
            
     		$parametro2 = ((int)$_POST['series_disponiveis']);
              
          
     		$requisicoes = Requisicao::model()->findBySql("SELECT (MAX(req.num_requisicao_final_medico)+1) as proxima_requisicao_inicial, (MAX(req.num_requisicao_final_medico)+:keyword) as proxima_requisicao_final,
                                                            ns.num_sequencial_inicial as primeira_requisicao_inicial, ns.num_sequencial_inicial+:keyword-1 as primeira_requisicao_final,
                                                                    MAX(ns.num_sequencial_final) - MAX(req.num_requisicao_final_medico) as quantidade_disponivel,
                                                                    ns.num_sequencial_final - ns.num_sequencial_inicial as quantidade_disponivel_sem_requisicao
                                                                                                            FROM 
                                                                                                            sch_scspm.tb_num_sequencial ns
                                                                                                            LEFT JOIN sch_scspm.tb_requisicao req
                                                                                                                            ON 
                                                                                                                            (ns.id_num_sequencial = req.id_num_sequencial)

                                                                                                                     		WHERE
                                                                                                                                    ns.id_num_sequencial = :keyword2
                                                                                                                    GROUP BY ns.num_sequencial_inicial, ns.num_sequencial_final", array(':keyword' => $parametro, ':keyword2' => $parametro2));

		if($requisicoes != null){
			echo CJSON::encode($requisicoes->attributes);
		}

	die;

}
	

Yes, It Is!
0

#29 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 08 January 2013 - 08:17 AM

View Postricardograna, on 03 December 2012 - 11:44 PM, said:

	echo CHtml::AjaxButton('Exibir Faixa', array('Requisicao/buscaultimo'), 
 		array(                                  'type' => 'POST',
         	'dataType' => 'json',
         	'data' => array( 
                 'quantidadefolhas' => 'js:$("#Requisicao_qtde_folhas_requisicao").val()',
                 'seriesdisponiveis' => 'js:$("select#series_disponiveis option:selected").val()', 
         	), 
         	'success' => "function(data) { 
                 $('#campo').val(data.campo);
					.... 
                 }" 
         	) 
 		);



Controller:

public function actionbuscaultimo()
   	{
     		$parametro = ((int) $_POST['quantidadefolhas']);
            
     		$parametro2 = ((int)$_POST['series_disponiveis']);
              
          
     		$requisicoes = Requisicao::model()->findBySql("SELECT (MAX(req.num_requisicao_final_medico)+1) as proxima_requisicao_inicial, (MAX(req.num_requisicao_final_medico)+:keyword) as proxima_requisicao_final,
                                                            ns.num_sequencial_inicial as primeira_requisicao_inicial, ns.num_sequencial_inicial+:keyword-1 as primeira_requisicao_final,
                                                                    MAX(ns.num_sequencial_final) - MAX(req.num_requisicao_final_medico) as quantidade_disponivel,
                                                                    ns.num_sequencial_final - ns.num_sequencial_inicial as quantidade_disponivel_sem_requisicao
                                                                                                            FROM 
                                                                                                            sch_scspm.tb_num_sequencial ns
                                                                                                            LEFT JOIN sch_scspm.tb_requisicao req
                                                                                                                            ON 
                                                                                                                            (ns.id_num_sequencial = req.id_num_sequencial)

                                                                                                                     		WHERE
                                                                                                                                    ns.id_num_sequencial = :keyword2
                                                                                                                    GROUP BY ns.num_sequencial_inicial, ns.num_sequencial_final", array(':keyword' => $parametro, ':keyword2' => $parametro2));

		if($requisicoes != null){
			echo CJSON::encode($requisicoes->attributes);
		}

	die;

}
	



Ricardo, deu erro!
<h1>PHP Error [8]</h1>
<p>Undefined index: Requisicao (/var/www/scspm-yii/protected/controllers/RequisicaoController.php:243
0

#30 User is offline   Lothor 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 147
  • Joined: 05-August 11
  • Location:Brazil

Posted 14 February 2013 - 09:49 AM

samjf, já resolveu o seu problema?

Sobre sua pergunta mais acima, é sim possível fazer um foreach no javascript, neste caso, seria um for in.

Segue aqui um exemplo de utilização: for in.

Onde no PHP temos:

foreach($objects as $key => $object) {...}

No JavaScript temos:

for($key in $objects) {
    // Para acessar o objeto se faz:
    console.log($objects[$key]);
}

0

#31 User is offline   Newerton 

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

Posted 14 February 2013 - 10:48 AM

Ele pode usar o $.each() do jquery para percorrer os dados.

Exemplo:
$.each(data, function(index, value){
    console.log(index + ' => ' + value);
});

Newerton Vargas de Araújo
1

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • 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