Meine Tabelle heißt basicforms und meine Spalte heißt baseform
TranslationController.php
public function actionAutoCompleteLookup()
{
if(Yii::app()->request->isAjaxRequest && isset($_GET['q']))
{
$name = $_GET['q'];
$limit = min($_GET['limit'], 50);
$criteria = new CDbCriteria;
$criteria->condition = "baseform LIKE :sterm";
$criteria->params = array(":sterm"=>"$name%");
$criteria->limit = $limit;
$userArray = basicform::model()->findAll($criteria);
$returnVal = '';
foreach($userArray as $userAccount)
{
$returnVal .= $userAccount->getAttribute('baseform');
}
echo $returnVal;
}
}
<?php $this->widget('CAutoComplete',
array(
//name of the html field that will be generated
'name'=>'user_name',
//replace controller/action with real ids
'url'=>array('translation/AutoCompleteLookup'),
'max'=>10, //specifies the max number of items to display
//specifies the number of chars that must be entered
//before autocomplete initiates a lookup
'minChars'=>2,
'delay'=>50, //number of milliseconds before lookup occurs
'matchCase'=>false, //match case when performing a lookup?
//any additional html attributes that go inside of
//the input field can be defined here
'htmlOptions'=>array('size'=>'40'),
'methodChain'=>".result(function(event,item){\$(\"#user_id\").val(item[1]);})",
));
?>
Wie weit kommst du denn? Würde erst mal mit Firebug checken, ob ein AJAX-Request geschickt wird und was der zurückliefert. Was mir außerdem auffällt: Die Route "translation/AutoCompleteLookup" sollte besser "translation/autoCompleteLookup" geschrieben werden. Actionnamen starten immer mit einem Kleinbuchstaben (auch wenns im Controller anders geschrieben ist).
Ich habe das Script erfolgreich eingebaut, nun beschweren sich aber die Besucher meiner Webseite, dass Sie im Suchformular zweimal ENTER drücken müssen, bevor die Suchmaske die Eingabe weiter übergibt.
Wie kann ich das einmalige Enter abfangen und direkt in die Suchmaske übermitteln
Du kannst die result()-Methode des Plugins verwenden, um das Auswahlereignis zu überwachen. Wenn du da ein Javascript anhängst, das dein Formular abschickt, sollte das klappen. Am besten verwendest du die methodChain, um so eine Funktion an den Autocompleter zu übergeben. Sowas in dieser Art (nicht getestet):