Da ich im Netz kein zufriedenstellendes Beispiel für Zend_Form in Verbindung mit Autocomplete finden konnte, möchte ich hier meinen Lösungsansatz zeigen. Vorraussetzungen sind hierfür ein Zend_Form, sowie aktiviertes jQuery + jQueryUI.
Im Formular passiert erstmal nix Besonderes. Es wird ein normales Zend_Form_Element_Text angelegt.
$autoCompleteElement = new Zend_Form_Element_Text('autoCompleteElement');
Der Controller bekommt eine zusätzliche autocompleteAction spendiert, welche wir dann später über jQuery ansprechen wollen, um die Werte zur aktuellen Eingabe zu erhalten. Wichtig ist hier, die Werte JSON-kodiert zu übergeben, um sie später im Javascript-File sauber auslesen zu können. Bei meinem $returnArray soll der Value später ins Formularfeld eingetragen werden, wohingegen das Label als Anzeige für die Auswahl beim Autocomplete gedacht ist.
public function autocompleteAction()
{
$post = $this->_request->getPost();
$searchString = $post['searchString'];
// $returnArray zur Demonstration meiner übergebenen Daten
$returnArray[$row['value']] = $row['label'];
$valuesJson = Zend_Json::encode($returnArray);
echo $valuesJson;
$this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
}
Das Javascript kümmert sich schlussendlich um das Absenden des Requests und das Mappen der empfangenen Daten.
$(document).ready(function() {
$("input#autoCompleteElement").autocomplete({
source : function( request, response) {
url = "/meinModul/meinController/autocompleteAction";
data = { 'searchString' : request.term };
$.post(url, data, function(JSON){
response($.map(JSON, function (item, value) {
return {
label: item,
value: value,
source: item};
}));
}, 'json');
},
minLength: 1,
autoFocus: true
});
});
Zum Schluss natürlich nicht vergessen das Javascript in euer View-Script mit einzubinden.