AutoCompleteLookup Cookbook 25

Hallo,

ich schaffe es nicht das AutoCompleteLookup vom Cookbook 25 einzubauen: http://www.yiiframework.com/doc/cookbook/25/

Ich kriege einfach keine Ausgabe!

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

danke Mike.

Es war tatsächlich ein Fehler in der Groß und Kleinschreibung ^^

FRAGE 1

ein zweites Problem beim Kochbuch 25.

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

FRAGE 2


$sWert = $_GET['value'];

'htmlOptions'=>array('size'=>'40', 'autocomplete' => 'off', 'id' => 'searchfield', 'value' => $sWert),

$sWert bekommt den Inhalt aus der URL, wenn ich den Wert aber als htmlOptions übergebe, so wird das nicht übernommen.

Danke schon mal für die Antworten

  1. 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):

'methodChain'=>'.result(function(e,d,f){ $(this).parents("form").submit(); }',



Evtl musst du mit $(this) noch etwas rumspielen.

  1. Warum willst du value unbedingt in htmlOptions setzen? CAutoComplete hat direkt die Eigenschaft value, um den Wert zu setzen.

Vielen Dank. Ich konnte es fast abschreiben:

Hier für alle die auch dran sitzen




$this->widget('CAutoComplete',

array(

	'name'=>'value', 

	'value' => $sWert,




	'url'		=>	array('translation/autoCompleteLookup'), 

	'max'		=>	15,

 

	'minChars'	=>	2, 

	'delay'		=>	100,

	'matchCase'	=>	true,

 

	'htmlOptions'=>array('size'=>'40', 'autocomplete' => 'off', 'id' => 'searchfield', 'value' => $sWert), 

	'methodChain'=> ".result(function(event,item){\$(this).parents(form).submit();})",


));



thx!

Kleine Korrektur: Das "form" im methodChain-Ausdruck muss eigentlich in Anführungszeichen. Würde mich sehr wundern, wenns auch ohne ginge.


'methodChain'=>'.result(function(event,item){ $(this).parents("form").submit(); })';