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.
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