[Resolvido] Preenchimento automático do formulário.

Laverson,

Coloca assim …




$prod = $_POST['Produto']['codigo'];



ou vc usa o $_POST no attributes.




// atribui o valor

$model->attributes = $_POST['Produto'];


// pega o valor aqui.

$model->codigo;



e ve se da certo.

radames_,

tentei assim e também não funcionou.

Alterei disso:

_form




...

'quant':$(this).val(),

'codigo': '".$model->fkProduto."', // <<<< Aqui (porque o valor que eu quero 

                                   //            enviar é a FK do Produto, que é um

                                   //            textField também)

...



Para isso:

_form




...

'quant':$(this).val(),

'codigo': '1', // <<<< Daqui

...



E deu certo, pelo que vi na primeira forma o $model->fkProduto é que não está funcionando.

i.e.

Se eu informo ou não o $model->fkProduto ele mesmo assim é enviado vazio.

Já usei o die($_POST[‘fkProduto’]); e ele realmente está vazio, quando uso die($_POST[‘quant’]); ele vem preenchido.

nossa to moscando aqui …

vc quer usar o ajax é isso




<?php echo CHtml::ajaxSubmitButton('Gerar Atividades',

	$this->createUrl("verfpf/ativid",array("id" => $id)),

	array(

			'type'		=> 'POST',

			'update'	=> '#idids',

			'dataType'	=> 'html', // json

	), array('submit' => $ok,)

)

?>


// tem também

CHtml::ajaxButton


CHtml::ajax



é isso …

da uma olhada nesse codigo e ve se te ajuda …




public function actionCepAjax()

{

	if(!Yii::app()->request->isAjaxRequest)

	{

		throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');

	}

	

	$nr_cep = preg_replace("/[^0-9]/","",Yii::app()->request->getParam('cd_cep'));

	$view = Correios::model()->find('nr_cep=:nr_cep',array(':nr_cep'=>$nr_cep));

	

	if($view)

	{

		echo CJSON::encode(array(

			'error'                     => 'false',

			'cd_uf'                     => utf8_encode($view->cd_uf),

			'nm_cidade'                 => utf8_encode($view->nm_cidade),

			'ds_bairro'                    => utf8_encode($view->ds_bairro),

			'cd_logradouro'                => utf8_encode($view->cd_logradouro),

			'nm_logradouro'                => utf8_encode($view->nm_logradouro),

			'nm_alternativo_logradouro'    => utf8_encode($view->nm_alternativo_logradouro),

		));

	}else

	{

		echo CJSON::encode(array( 'error' => 'true'));

	}

	Yii::app()->end();

}


VIEW:


<tr>

	<td colspan="3">

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

		<?php echo $form->textField($model,'cd_cep',array('size'     =>8,

			  'maxlength'=>8,  

			  'onblur'     =>CHtml::ajax(array('url'        => $this->createUrl('inscricao/cepAjax'),

							 'data'     => 'js:"cd_cep="+jQuery("#Coral_cd_cep").val()',

							 'type'        => 'post',

							 'dataType'    => 'json',

							 'success'    => "function(data){

									 if(data.error=='false')

									 {

										 $('#resposta').html('');

										 $('#Coral_sg_uf').val(data.cd_uf);

										 $('#Coral_ds_endereco').val(data.nm_logradouro);

										 $('#Coral_nm_bairro').val(data.ds_bairro);

										 $('#Coral_nm_cidade').val(data.nm_cidade);

									 }else{

										 $('#resposta').html('".Yii::t('crud','cep')."');

										 $('#Coral_sg_uf').val('');

										 $('#Coral_ds_endereco').val('');

										 $('#Coral_nm_bairro').val('');

										 $('#Coral_nm_cidade').val('');

									 }

								 }")), 

			  'style'  => 'width:150px'));?>

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

		<div class="errorMessage" id="resposta"></div>

	</td>    

</tr>        




Laverson,

Se você mudou o $_POST[‘codigo’] para $_POST[‘fkProduto’] do Controller, você tem que mudar o nome do attributo do ajax também.

de:




'codigo': '".$model->fkProduto."'



para:




'fkProduto': '".$model->fkProduto."'



radames_,

ainda não estudei seu código pois to meio sem tempo agora. =\

Newerton,

me expressei mal, eu tinha feito assim como você está dizendo, e mesmo assim vai vazio. =\

ele server para outo completar endereço via CEP do correio, saca?

att,

radames_,

sei cumé, eu quero usar o ajax mais não como um ajaxSubmitButton, e sim como o Newerton exemplificou.

Fiz vários testes aqui e realmente ele não consegue pegar o valor de $model->fkProduto.

Acrescentei uma nova função derivada da "quantidade" para o campo fkProduto e o valor era enviado, porém o quant não era, o inverso acontecia quando digitava no campo quant.

Já não sei mais o que fazer. =\

Laverson,

Veja se o $model está enviando o fkProduto para o _form.php

Coloca um ‘echo’ no _form e veja se ele está retornando vazio ou inteiro.

Outra coisa que você pode fazer, é olhar no código fonte pelo browser se a função ajax tem ou não o parâmetro ‘fkProduto’ preenchido com algum valor.

Newerton,

depois de muitos testes verifiquei que realmente o ‘quant’ e o ‘produto’ estão indo com valor sim. O problema é no select do preço que não está retornando nada.

Controller:




public function actionCalcularSubTotal()

{

    $subtotal = 0;

    if (!empty($_POST['produto'])) {

        $dado = Produto::model()->find(array(

                            'select'=>'preco',

                            'condition' => "descricao like ':descri'",

                            'params' => array(

                                    ':descri' => $_POST['produto']

                            )

                    ));

        // usei o Yii::app()->db->createCommand(); também e não funcionou. 


        die($dado); // <<< Fiz isso pra saber se estava retornando algo, 

                    // e não está. Também usei o print_r(); mema coisa.

        $subtotal = $dado[0] * $_POST['quant'];

    }

    echo $subtotal;

}



creio que o que vc quer é


"descricao like '%:descri%'"

Também não é isso, apenas com o like já serve pois o valor de ‘produto’ já vai com a descrição completa.

[Editado]

Eu usei assim pra obter a descrição

_form:




Yii::app()->clientScript->registerScript(

...

'produto': $('#Itens_fkProduto').val()

...



porque com o $model->fkProduto não funcionava. será por isso que não está sendo executada a busca?

Opa galera deu certo aqui.

Fica ai o código:

Controller:




$criteria=new CDbCriteria;


$criteria->select = 'preco';

$criteria->compare('descricao', $_POST['produto'], true);


$dado = Produto::model()->find($criteria);



Usando o CDbCriteria no lugar disso




$dado = Produto::model()->find(array(

                            'select'=>'preco',

                            'condition' => "descricao like ':descri'", // ou "descricao like '%:descri%'"

                            'params' => array(

                                    ':descri' => $_POST['produto']

                            )

                    ));



funcionou perfeitamente.

Vlw