2011-07-22 10 views
2

こんにちは私はZend Jqueryを使ってオートコンプリートフィールドを実装しようとしています。私は配列からデータを取得するチュートリアルに従って、私は私のmysqlテーブルからデータにアクセスするコードを拡張しました。Zend Jqueryデータベースからの自動補充

IndexController.php

$this->view->autocompleteElement = new ZendX_JQuery_Form_Element_AutoComplete('ac'); 
    $this->view->autocompleteElement->setLabel('Autocomplete'); 
    $this->view->autocompleteElement->setJQueryParam('source', '/index/city'); 

これはcityAction(呼び出す)

public function cityAction() 
{ 
    $results = Application_Model_City::search($this->_getParam('term')); 
    $this->_helper->json(array_values($results));   
} 

私はその後

public static function search($term) 
{ 
    $region = new Application_Model_DbTable_Regions(); 

    $results = $region->getRegion($term); 

    return $results; 

} 

そして最後に地域デシベルモデル

モデル都市を呼び出します

私はオートコンプリートフィールドに行くと結果は表示されますが、未定義のため、私はjsonヘルパーにデータを送り返していると思います。

私はファイヤーバグを使用しましたが、データが次の形式で取得されていることがわかりました。 {"City": "London"}、{"City": "Londonderry"}、{"City": "Longfield"}、{"City": "Longhope"}、{"City": "Longniddry"}]

私はこの形式が間違っていると思います。

乾杯

J

答えて

3

ZendX_JQuery_Form_Element_AutoComplete要素はjQuery UI Autocompleteウィジェットへのプロキシであるオートコンプリートビューヘルパーへのプロキシです。

ローカルデータは文字列の単純な配列にすることができ、またはそれのいずれかで、配列内の各アイテムのためのオブジェクトが含まれています:あなたはjQuery UI Autocompleteページの概要を読めば

、あなたが注意しますラベルまたは値のプロパティまたはその両方。ラベルプロパティは、提案メニューに表示されます。値は、ユーザーがメニューから何かを選択した後に入力要素に挿入されます。プロパティが1つだけ指定されている場合は、両方のプロパティが使用されます。値プロパティのみを指定した場合は、その値もラベルとして使用されます。

文字列を使用すると、オートコンプリートプラグインはその文字列がJSONデータを返すURLリソースを指していることを期待します。同じホスト上にあっても、別のホスト上にあっても構いません(JSONPを提供する必要があります)。リクエストパラメータ「term」がそのURLに追加されます。 データ自体は、上記で説明したローカルデータと同じ形式にすることができます。

だから、あなたはオートコンプリートに戻ってきているJSONはより多くのような構造にする必要があります。

[{"label":"London","value":"London"},{"label":"Londonderry","value":"Londonderry"},{"label":"Longfield","value":"Longfield"}] 

幸運!

+0

[OK]を歓声 –

0

痛みの深刻な問題を修正しました!

私は値

public function getRegion($term) 

としてSQL市の行を追加し、それがデータを

public function getRegion($term) 

{

$select = $this->select()->from($this,'City') 
          ->where('City LIKE ? ',$term.'%'); 


return $this->fetchAll($select)->toArray(); 

}

にアクセスする以下のコードを改変{

$select = $this->select()->from($this,'City AS value') 
          ->where('City LIKE ? ',$term.'%'); 


return $this->fetchAll($select)->toArray(); 

}

これが働いているようです!

乾杯

J

よくやったことへの感謝は非常に有用