leidy2201
(Leidy Martinez)
May 6, 2014, 3:01pm
1
Hola cómo están?? Cada vez que sigo incursionando en yii más dudas y detalles salen…
Necesito ayuda en esto por favor…
Tengo un campo cédula, que tiene un autocompletar… el autocompletar funciona, pero aún así no me quiere traer los datos que llamo en el respectivo query de la función…
_form:
<div class="row">
<?php echo $form->labelEx($model,'Cédula:'); ?>
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'strcedula',
'name'=>'strcedula',
'source'=>$this->createUrl('Tblusuario/autocomplete'),
// additional javascript options for the autocomplete plugin
'options'=>array(
'showAnim'=>'fold',
'minLength'=>'2',
'focus'=>'js:function(event, ui) {
alert(ui.item.strcedula);
$("#strcedula").val(ui.item.strcedula);
return false;
}',
'select'=>"js:function(event, ui) {
$('#strcedula').val(ui.item.cedula);
$('#strnombre').val(ui.item.nombre);
return false;
}",
),
));
<?php echo $form->error($model,'strcedula'); ?>
</div>
En el controlador:
public function actionAutocomplete()
{
$res =array();
if (isset($_GET['term'])) {
$qtxt = "Select distinct a.cedper as cedula,a.nomper as nombre,a.apeper as apellido
from sno_personal a
join sno_hpersonalnomina b on a.codemp = b.codemp and a.codper = b.codper
join sno_ubicacionfisica d on d.codemp = b.codemp AND b.codubifis = d.codubifis
where a.estper='1' AND b.codubifis = '0225' AND cedper LIKE :strcedula";
$command =Yii::app()->dbsigesp->createCommand($qtxt);
$command->bindValue(":strcedula", '%'.$_GET['term'].'%', PDO::PARAM_STR);
$res =$command->queryColumn();
}
echo CJSON::encode($res);
Yii::app()->end();
}
LA IDEA ES QUE ME TRAIGA APARTE DE LA CEDULA, EL NOMBRE Y APELLIDO DE LA PERSONA Y PLASMARLO EN LOS RESPECTIVOS CAMPOS QUE TENGO EN EL _FORM(NO LOS COLOQUÉ AQUI)… QUISE HACER PRUEBAS CON EL ALERT QUE ESTA EN EL FOCUS PARA VER SI POR LO MENOS M TRAE LA CEDULA… Y NADA… EL ALERT VIENE VACIO…
HACE EL AUTOCOMPLETAR PERO NO ME TRAE EL DATO NI EN EL FOCUS NI EN EL SELECT…
QUE PODRÁ SER?? GRACIAS…
jdgz
(Jose Daniel Galvan)
May 6, 2014, 3:44pm
2
Hola cómo están?? Cada vez que sigo incursionando en yii más dudas y detalles salen…
Necesito ayuda en esto por favor…
Tengo un campo cédula, que tiene un autocompletar… el autocompletar funciona, pero aún así no me quiere traer los datos que llamo en el respectivo query de la función…
_form:
<div class="row">
<?php echo $form->labelEx($model,'Cédula:'); ?>
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'strcedula',
'name'=>'strcedula',
'source'=>$this->createUrl('Tblusuario/autocomplete'),
// additional javascript options for the autocomplete plugin
'options'=>array(
'showAnim'=>'fold',
'minLength'=>'2',
'focus'=>'js:function(event, ui) {
alert(ui.item.strcedula);
$("#strcedula").val(ui.item.strcedula);
return false;
}',
'select'=>"js:function(event, ui) {
$('#strcedula').val(ui.item.cedula);
$('#strnombre').val(ui.item.nombre);
return false;
}",
),
));
<?php echo $form->error($model,'strcedula'); ?>
</div>
En el controlador:
public function actionAutocomplete()
{
$res =array();
if (isset($_GET['term'])) {
$qtxt = "Select distinct a.cedper as cedula,a.nomper as nombre,a.apeper as apellido
from sno_personal a
join sno_hpersonalnomina b on a.codemp = b.codemp and a.codper = b.codper
join sno_ubicacionfisica d on d.codemp = b.codemp AND b.codubifis = d.codubifis
where a.estper='1' AND b.codubifis = '0225' AND cedper LIKE :strcedula";
$command =Yii::app()->dbsigesp->createCommand($qtxt);
$command->bindValue(":strcedula", '%'.$_GET['term'].'%', PDO::PARAM_STR);
$res =$command->queryColumn();
}
echo CJSON::encode($res);
Yii::app()->end();
}
LA IDEA ES QUE ME TRAIGA APARTE DE LA CEDULA, EL NOMBRE Y APELLIDO DE LA PERSONA Y PLASMARLO EN LOS RESPECTIVOS CAMPOS QUE TENGO EN EL _FORM(NO LOS COLOQUÉ AQUI)… QUISE HACER PRUEBAS CON EL ALERT QUE ESTA EN EL FOCUS PARA VER SI POR LO MENOS M TRAE LA CEDULA… Y NADA… EL ALERT VIENE VACIO…
HACE EL AUTOCOMPLETAR PERO NO ME TRAE EL DATO NI EN EL FOCUS NI EN EL SELECT…
QUE PODRÁ SER?? GRACIAS…
Tienes que cambiar queryColumn por queryAll y acceder a los valores tal y como lo defines en tu consulta (cedula, nombre y apellido)
alert(ui.item.cedula);
alert(ui.item.nombre);
alert(ui.item.apellido);
No estoy seguro si esto funciona. La otra solucion seria concatenar tus columnas y colocar alguna separador (ej. coma) y hacer un explode para separar los datos. En este caso si debes usar queryColumn.
leidy2201
(Leidy Martinez)
May 6, 2014, 4:30pm
3
Colocando el queryAll no me funciona el autocompletar, pero si funcionan los alert…
leidy2201
(Leidy Martinez)
May 6, 2014, 6:23pm
4
Al colocar el queryAll no tengo que cambiar el $command->bindValue??
leidy2201
(Leidy Martinez)
May 6, 2014, 7:34pm
5
Tienes que cambiar queryColumn por queryAll y acceder a los valores tal y como lo defines en tu consulta (cedula, nombre y apellido)
alert(ui.item.cedula);
alert(ui.item.nombre);
alert(ui.item.apellido);
No estoy seguro si esto funciona. La otra solucion seria concatenar tus columnas y colocar alguna separador (ej. coma) y hacer un explode para separar los datos. En este caso si debes usar queryColumn.
Hola DAniel gracias por tu respuesta, lo hice como me dijiste al principio, pero al colocar el queryAll me lleva los datos(cedula,nombre,apellido) al :_form, pero el autocompletar aparece vacío… SI coloco el queryColumn es todo lo contrario, aparece el listado d las cedulas en el autocompletar pero no me trae los demas datos…
que me faltaría?? gracias
jdgz
(Jose Daniel Galvan)
May 6, 2014, 7:52pm
6
Hola DAniel gracias por tu respuesta, lo hice como me dijiste al principio, pero al colocar el queryAll me lleva los datos(cedula,nombre,apellido) al :_form, pero el autocompletar aparece vacío… SI coloco el queryColumn es todo lo contrario, aparece el listado d las cedulas en el autocompletar pero no me trae los demas datos…
que me faltaría?? gracias
Yo lo veo bien, dame oportunidad de implementarlo y te comento.
jdgz
(Jose Daniel Galvan)
May 6, 2014, 8:34pm
7
Utilizando queryAll tu codigo deberia quedar algo como:
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'id'=>'strcedula',
'name'=>'strcedula',
'source'=>$this->createUrl('Tblusuario/autocomplete'),
'options'=>array(
'showAnim'=>'fold',
'minLength'=>'2',
'focus'=>'js:function(event, ui) {
$("#strcedula").val(ui.item.cedula);
return false;
}',
'select'=>"js:function(event, ui) {
alert(ui.item.cedula);
alert(ui.item.nombre);
alert(ui.item.apellido);
var nombre_completo = ui.item.nombre + ' ' + ui.item.apellido;
$('#strcedula').val(ui.item.cedula);
$('#strnombre').val(ui.item.nombre_completo);
return false;
}"
)
));
// aqui el truco
Yii::app()->clientScript->registerScript('input', '
$("#strcedula").data("autocomplete")._renderItem = function( ul, item ) {
// si solo quieres cedula quita nombre
return $( "<li></li>" ).data( "item.autocomplete", item ).append( "<a>" + item.cedula + " - " + item.nombre + "</a>").appendTo(ul);
};
');
leidy2201
(Leidy Martinez)
May 6, 2014, 8:48pm
8
[RESUELTO] A la perfección… Muchisisisisimas gracias…
jdgz
(Jose Daniel Galvan)
May 6, 2014, 8:53pm
9
Perfecto!!!,
Me regalas un +1 para mejorar mi reputacion dentro del sitio?
Gracias,
leidy2201
(Leidy Martinez)
May 6, 2014, 9:03pm
10
Disculpa la pregunta pero cómo hago eso?? jeje… es q soy nueva en esto de foros también
jdgz
(Jose Daniel Galvan)
May 6, 2014, 9:06pm
11
En la solucion propuesta en la parte de abajo tienes un circulo verde con el signo de + en blanco, ahi debes darle el clic.