Zend Jquery Автозаполнение заполнить из базы данных - PullRequest
2 голосов
/ 22 июля 2011

Привет, я пытаюсь реализовать поле автозаполнения, используя Zend Jquery. Я последовал руководству по извлечению данных из массива и расширил код для доступа к данным из моей таблицы MySQL.

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;

}

И, наконец, модель db Regions

public function getRegion($term)
{

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


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

}

Теперь, когда я захожу в поле автозаполнения, оно показывает результаты, но, как НЕ УКАЗАНО, я думаю, что это что-то, что я делаю так, как отправляю данные обратно помощнику json.

Я использовал firebug и вижу, что данные извлекаются в следующем формате.

[{ "Город": "Лондон"}, { "Город": "Лондондерри"}, { "Город": "Longfield"}, { "Город": "Longhope"}, { "Город":» Longniddry "}]

Я думаю, что этот формат неправильный, пожалуйста, какой орган уже имел дело с этим раньше?

Приветствия

J

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

Элемент ZendX_JQuery_Form_Element_AutoComplete является прокси для помощника просмотра автозаполнения, который является прокси для виджета jQuery UI Autocomplete .

Если вы прочитали обзор на странице jQuery UI Autocomplete , вы заметите:

Локальные данные могут быть простым массивом строк или содержит объекты для каждого элемента в массиве со свойством метки или значения или обоими . Свойство метки отображается в меню предложений. Значение будет вставлено в элемент ввода после того, как пользователь выберет что-то из меню. Если указано только одно свойство, оно будет использоваться для обоих, например. если вы предоставляете только значения-свойства, это значение также будет использоваться в качестве метки.

Когда используется строка, плагин автозаполнения ожидает, что эта строка будет указывать на ресурс URL, который будет возвращать данные JSON. Это может быть на том же хосте или на другом (должен предоставить JSONP). Параметр запроса "term" добавляется к этому URL. Данные могут быть в том же формате, что и локальные данные, описанные выше .

Итак, JSON, который вы возвращаете для автозаполнения, должен быть структурирован так:

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

Удачи!

0 голосов
/ 24 июля 2011

Исправлена ​​проблема после нескольких часов боли!

Я изменил приведенный ниже код, где он обращается к данным

public function getRegion($term)

{

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


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

}

Я добавил строку SQL City AS Value

public function getRegion($term)

{

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


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

}

Кажется, это сработало!

Приветствия

J

...