2015-06-12 2 views

ответ

1

Итак, я пытался немного попытаться получить удаленные данные и когнитивный синтаксис типа (twitter), и я не найду хороший пример, который бы соответствовал моим потребностям. Через несколько часов я придумал следующий код, надеюсь, что это поможет.

Взгляд:

var proyectos = new Bloodhound({ 
    datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.proyecto_titulo); }, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    remote: { 
    url: 'proyectos/proyectos/getProyectos?query=%QUERY', 
    wildcard: '%QUERY' 
    } 
}); 

$('#titulo').typeahead({ 
    hint: true, 
    highlight: true, 
    minLength: 3 
}, 
    { 
    name: 'proyectos', 
    displayKey: 'proyecto_titulo', 
    source: proyectos.ttAdapter(), 
    templates: { 
    empty: [ 
     '<div class="empty-message">', 
     'No se encontraron registros que coincidan con la búsqueda.', 
     '</div>' 
    ].join('\n'), 
    suggestion: Handlebars.compile('<p>{{proyecto_titulo}} – <strong>{{tipo_proyecto_nombre}}</strong> </p>') 
    } 
}); 

Соответствующая часть здесь:

удаленный: { URL: '? Proyectos/Proyectos/getProyectos запрос =% QUERY', подстановочные: ' % QUERY» }

Где Proyectos/Proyectos - это путь контроллера и getProyectos - это метод, который отвечает на запрос.

Всякий раз, когда вы печатаете, и в зависимости от параметра minLength, он собирается запросить соответствующую строку в фоновом режиме.

Примечание: Для того, чтобы использовать рекомендации участие в шаблонов настройки, вы должны загрузить handlebars.js библиотеку.

Контроллер:

public function getProyectos() { 
     $consulta = $this->input->get('query'); 
     $proyectos = $this->proyectos_model->getProyectos($consulta); 
     if($proyectos->num_rows() > 0){ 
      echo json_encode($proyectos->result()); 
     } 
     else{ 
      echo ''; 
     } 
    } 

Сначала мы получаем строку запроса из представления с $ this-> вход-> получить ('запрос'), а затем передать его в нашей модели.

Модель:

public function getProyectos($consulta) { 
     $query = $this->db->query 
     ("select pro.proyecto_id 
       ,pro.proyecto_titulo 
       ,tip.tipo_proyecto_nombre 
       ,tip.tipo_proyecto_id 
       from proyectos pro 
       inner join tipos_proyectos tip on tip.tipo_proyecto_id = pro.tipo_proyecto_id 
       where pro.proyecto_titulo ilike '%" . $consulta . "%' "); 
     return $query; 
    } 

Здесь в модели мы просто передаем строку запроса на наш SQL SELECT заявление, и мы сделали. База данных, которую я использую, - postgresql.

Надеюсь, вы сочтете это полезным.

Смежные вопросы