2016-10-09 3 views
0

У меня был проект кодекса HMVC, и я хочу создать автоматическое заполнение полей, но независимо от того, я попробовал, он просто не будет работать, я использую CI 3, php 5.5 +Как сделать автозаполнение на кодировщике HMVC?

Это мой контроллер (тест):

function getData() { 

    $name = $this->uri->segment(3); 
    $query = $this->ex_model->getThisData()->like('name', $name)->get(); 

    foreach ($query->result() as $q) { 
     $res['query'] = $name; 
     $res['suggestions'][] = array(
      'value'=>$q->name, 
      'gender'=>$q->gender, 
      'id'=>$q->id, 
     ); 
    } 
    echo json_encode($res); 
} 

Таким образом, моя модель (ex_model):

function getThisData(){ 
    $this->db->select('name'); 
    $this->db->from('table1'); 
    $this->db->join('table2', 'table1.id= table2.id'); 
    $query = $this->db->get(); 
    return $query->row_array(); 
} 

Наконец, на мой взгляд + JavaScript:

<input type="search" id="data1" placeholder="Input Name..." class="form-control border-input"> 

var site = "<?php echo base_url();?>"; 
$(function(){ 

    $('#data1').autocomplete({ 
     serviceURL: site+'/test/getData', 

     onSelect:function(suggestion){ 
      $('#id').val(''+suggestion.id); 
      $('#gender').val(''+suggestion.gender); 
     } 
    }); 
}); 

И мой URL в тот момент:

http://localhost/myproject/admin/test 

Я не знаю, как URI сегмент на HMVC CI работает, я попытался с сегментом (4) и (5) до сих пор не показывает автозаполнение.

Ошибок нет, но данные в поле ввода не отображаются, я хочу знать, следует ли исправить «$ this-> uri-> segment (3)» или мои javascripts или еще.

+0

Что не работает, что ru получение? – devpro

+0

@devpro, ошибок нет, но данные в поле ввода не отображаются, я хочу знать, должен ли я исправить «$ this-> uri-> сегмент (3)» или мои javascripts или иначе – Teletubbies

+0

Chk ответ на этот вопрос поможет u – devpro

ответ

0

В соответствии с Вашей URL:

http://localhost/myproject/admin/test/getData 

Вы не можете получить значение в качестве сегмента (4) и (5).

Вам нужно использовать так:

$this->uri->segment(1); // admin 
$this->uri->segment(2); // test 
$this->uri->segment(3); // getData 

Вы можете также следовать инструкции: https://www.codeigniter.com/userguide3/libraries/uri.html

Согласно руководства и ваш URL:

Вы сегмент должен быть:

1- admin 
2- test 
3- getData 
+0

большое спасибо, но что мне делать с моим javascript? должен ли я исправить «base_url» или «serviceURL»? данные все еще не показывают btw – Teletubbies

+0

@teletubbies используют сегмент как u r, используя этот var site = ""; – devpro

+0

все еще не отображает список данных в поле ввода, я следую некоторому учебнику, который не использовал расширения Wiredezignz HMVC, хотя – Teletubbies

0

В CodeIgniter сегмент начинается после того, как имя основного домена:

Например: http://localhost/myproject/admin/test/getData здесь http://localhost/myproject является основной областью, поэтому сегмент будет начинаться с администратора. здесь admin является номером 1 сегмент тест является вторым и getData является третьим.

+0

спасибо за ответ, но основная проблема заключается в автозаполнении, не отображающем данные в поле ввода – Teletubbies

+0

, что является результатом работы . Я имею в виду, что admin включен в base_url()? –

+0

localhost/myproject, я использую wiredezignz Расширения HMVC btw – Teletubbies

0

Без проверки JS код, контроллер и модель не подходят:

  1. Ваша модель уже возвращающегося массив (или FALSE), поэтому нет необходимости в

    $query = $this->ex_model->getThisData()->like('name', $name)->get(); 
    

Должно быть:

$query = $this->ex_model->getThisData(); 
  1. Вы пытаетесь фильтровать запрос по параметру, так что вы должны передать, что модель:

    $name = $this->uri->segment(4) ? $this->uri->segment(4) : null; 
    
    $query = $this->ex_model->getThisData($name); 
    
  2. Теперь метод код вашей модели должно выглядеть:

    public function getThisData($name) 
    { 
        if ($name != null) { 
         $this->db->select('name');//should this be '*'? 
         $this->db->from('table1'); 
         $this->db->where('name', $name) 
         $this->db->join('table2', 'table1.id= table2.id'); 
         $query = $this->db->get(); 
         return $query->result_array();//remember if you return array or object and you are probably looking for result, but not for single row here? 
        } 
        //case when $name value from controller is null 
        return false; 
    } 
    
+0

спасибо за ответ, я попробовал, но автозаполнение все еще не работает, я только что внесли некоторые изменения в свой проект, поэтому мой url вроде: http: // localhost/myproject/admin/test должен ли я изменить сегмент uri на 3? – Teletubbies