hallo zusammen,
in das Cgridview modul habe ich für das feld "name" das Cautocomplete modul eingebunden. die 1.suchanfrage funktionert auch wunderbar, sprich ich tippe etwas in das suchfeld und bekomm auch vorschläge und kann die suche absetzen.
will ich jedoch erneut suchen, funktioniert das autocomplete modul nicht mehr. ich tippe in das suchfeld, es kommen jedoch keine vorschläge. erst wenn ich die seite komplett neu lade geht autocomplete wieder.
woran könnte das liegen?
ein anderes problem betrifft das selektieren der autocomplete vorschläge: wenn ich den eintrag per klick auswähle wird die suche sofort gestartet. wenn ich den eintrag per return übernehme, wird keine suche gestartet, sondern der eintrag landet nur im suchfeld und ich muss dann nochmal bestätigen.
danke für eure hilfe
View:
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
array(
'name' => 'name',
'filter'=> $this->widget('CAutoComplete',
array(
'name'=>'name',
'url'=>array('controller/autoCompleteLookup'),
'max'=>10,
'minChars'=>1,
'delay'=>0,
'matchCase'=>false,
'htmlOptions'=>array('size'=>'40'),
//'methodChain'=>".result(function(event,item){\$(\"#id\").val(item[1]);})",
), true),
),
array(
'name' => 'admin',
'filter' => array(0 => 'Admin', 1 => 'User'),
),
),
));
echo CHtml::hiddenField('id');
?>
Controller:
public function actionAutoCompleteLookup()
{
if(Yii::app()->request->isAjaxRequest && isset($_GET['q'])) {
$name = $_GET['q'];
$limit = min($_GET['limit'], 50);
$criteria = new CDbCriteria;
$criteria->condition = "name LIKE :sterm";
$criteria->params = array(":sterm"=>"%$name%");
$criteria->limit = $limit;
$userArray = Model::model()->findAll($criteria);
$returnVal = '';
foreach($userArray as $userAccount) {
$returnVal .= $userAccount->getAttribute('name').'|'
.$userAccount->getAttribute('id')."\n";
}
echo $returnVal;
}
}
Model:
public function search() {
$criteria=new CDbCriteria;
if(Yii::app()->request->getQuery("name")){
$criteria->compare('name', $_GET['name'], true);
}
$criteria->compare('admin',$this->admin);
return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
'sort'=>array(
'defaultOrder'=>'name ASC',
),
'pagination'=>array(
'pageSize'=>5
),
));
}