【问题标题】:Make a typeahead remote call to codeigniter controller对 codeigniter 控制器进行预先输入的远程调用
【发布时间】:2015-06-12 05:07:16
【问题描述】:

我希望能够使用 typeahead 从 Bloodhound 进行远程数据调用,以使用 codeigniter 进行建模。

【问题讨论】:

    标签: ajax codeigniter typeahead.js


    【解决方案1】:

    所以我在尝试让 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>')
      }
    });
    

    这里的相关部分是:

    远程:{ url: 'proyectos/proyectos/getProyectos?query=%QUERY', 通配符:'%QUERY' }

    其中 proyectos/proyectos 是控制器路径,getProyectos 是响应请求的方法。

    每当您键入时,根据 minLength 设置,将在后端请求匹配的字符串。

    注意:要使用 templates 设置中的 suggestion 部分,您必须下载 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->input->get('query') 从视图中获取查询字符串,然后将其传递给我们的模型。

    模特:

    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。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2015-02-26
      • 2017-06-13
      • 1970-01-01
      相关资源
      最近更新 更多