我希望能够使用typeahead使用codeigniter从bloodhound进行远程数据调用。
答案 0 :(得分:2)
所以我努力让typeahead(twitter)远程数据和codeigniter一起工作,我努力找到一个符合我需求的好例子。几个小时后,我想出了以下代码,希望它有所帮助。
视图:
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>')
}
});
这里的相关部分是:
remote:{ url:&#39; proyectos / proyectos / getProyectos?query =%QUERY&#39;, 通配符:&#39;%QUERY&#39; }
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-&gt; input-&gt; get(&#39; query&#39;)的查询字符串,然后将其传递给我们的模型。
型号:
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。
我希望你觉得这很有用。