2

Я использую bootstrap typeahead и codeigniter два вместе, я хочу получить данные из двух столбцов в базе данных, и я хочу искать в обоих столбцах, но не отображает дублированные результаты поиска. что я делаю?Bootstrap typeahead и codeigniter

Это моя база данных:

enter image description here

Мой код,

Контроллер:

class Home extends CI_Controller { 

public function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('typeahead/country_model'); 
} 
public function index() 
{ 
    $this->load->view('typeahead/index'); 
} 
public function json_search_country() 
{ 
    $query = $this->country_model->get(); 
    $data = array(); 
    foreach ($query as $key => $value) 
    { 
     $data[] = array('id' => $value->id, 
       'province' => $value->province, 
       'city' => $value->province.', '.$value->city 
       ); 
    } 
    echo json_encode($data); 
} 

}

Модель:

class Country_model extends CI_Model { 

    function get() 
    { 
     $query = $this->db->get('countries'); 
     return $query->result(); 
    } 

} 

Вид:

<!DOCTYPE html> 
<html lang=""> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <title>Twitter typeahead.js Use In CodeIgniter By Baqir Memon</title> 

     <!-- Bootstrap CSS --> 
     <link href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> 

     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 
     <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 
     <!--[if lt IE 9]> 
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> 
      <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> 
     <![endif]--> 

     <!-- jQuery --> 

    </head> 
    <style> 
    </style> 
    <body> 
     <div class="jumbotron"> 
      <div class="container"> 
       <h1>Baqir Memon (BM Concepts)</h1> 
       <p>Twitter typeahead.js Use In CodeIgniter</p> 
       <p> 
        <a class="btn btn-info" href="https://twitter.github.io/typeahead.js/" target="_blank">typeahead.js</a> 
        <a class="btn btn-primary" href="https://github.com/baqirmemon">Learn more</a> 
       </p> 
      </div> 
     </div> 


     <div class="container"> 
      <div class="col-md-offset-4 col-md-4"> 
       <form action="" method="POST" role="form"> 
        <legend>Twitter typeahead.js</legend> 

        <div class="form-group"> 
          <input type="hidden" class="form-control" name="country_id" id="country_id"> 
          <input type="text" class="form-control" name="country_name" id="country_name" placeholder="Countries" autocomplete="off"> 
        </div> 

       </form> 
      </div> 
     </div> 



<!--https://github.com/twitter/typeahead.js/issues/1010--> 

    <script src="//code.jquery.com/jquery.js"></script> 
    <!-- Bootstrap JavaScript --> 
    <script src="//netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> 
    <script src="<?php echo site_url(); ?>assets/Bootstrap-3-Typeahead-master/bootstrap3-typeahead.min.js" type="text/javascript"></script>  
    <script> 
    $(document).ready(function(e){ 
     var site_url = "<?php echo site_url(); ?>"; 
     var input = $("input[name=country_name]"); 

      $.get(site_url+'typeahead/home/json_search_country', function(data){ 
         input.typeahead({ 
          source: data, 
          minLength: 1, 
         }); 
      }, 'json'); 

      input.change(function(){ 
       var current = input.typeahead("getActive"); 
       $('#country_id').val(current.id); 
      }); 

    }); 
    </script> 
    </body> 
</html> 

Это JSON результат:

[{"id":"1","province":"Aruba","city":"Aruba, ABW"},{"id":"2","province":"Afghanistan","city":"Afghanistan, AFG"},{"id":"3","province":"Angola","city":"Angola, ARU"},{"id":"4","province":"Anguilla","city":"Anguilla, AIA"},{"id":"5","province":"Albania","city":"Albania, ALB"},{"id":"6","province":"Andorra","city":"Andorra, AND"},{"id":"7","province":"Netherlands Antilles","city":"Netherlands Antilles, ANT"},{"id":"8","province":"United Arab Emirates","city":"United Arab Emirates, ARE"},{"id":"9","province":"Argentina","city":"Argentina, ARG"},{"id":"10","province":"Armenia","city":"Armenia, ARM"},{"id":"11","province":"American Samoa","city":"American Samoa, ASM"},{"id":"12","province":"Antarctica","city":"Antarctica, ATA"},{"id":"13","province":"French Southern territories","city":"French Southern territories, ATF"},{"id":"14","province":"Antigua and Barbuda","city":"Antigua and Barbuda, ATG"},{"id":"15","province":"Australia","city":"Australia, AUS"},{"id":"16","province":"Austria","city":"Austria, AUT"},{"id":"17","province":"Azerbaijan","city":"Azerbaijan, AZE"},{"id":"18","province":"Burundi","city":"Burundi, BDI"},{"id":"19","province":"Belgium","city":"Belgium, BEL"},{"id":"20","province":"Benin","city":"Benin, BEN"},{"id":"21","province":"Burkina Faso","city":"Burkina Faso, BFA"}] 

, например, я хочу этот результат после поиска aru из обоих вместе колонкой (province и city) в базе данных, и показать мне поиск в качестве следующего изображения:

enter image description here

+0

Я удивляюсь, что 'site_url + 'typeahead/home/json_search_country'' на ваш взгляд идет откуда? – may

ответ

0

Вы спросили

я хочу получить данные из два столбца в базе данных, и я хочу, чтобы искать в обеих столбцах, но не отображают дубликат результатов поиска.

Благодарим за использование вашего кода. Однако я не понимаю, что вы делаете - извините.

Во-первых, если ваш пользователь выполняет поиск, вы начинаете с формы поиска. Эта форма (на любой странице вы хотите) вызывает контроллер через обычный метод CI:

<?php echo form_open('mycontroller/mymethod'); ?> 

Затем в этом контроллере вы собираете почтовые данные (плюс любые проверки ошибок вы хотите сделать).

http://www.codeigniter.com/userguide3/libraries/input.html

Так что теперь у вас есть слово для поиска. Контроллер, который занимается поисковым запросом, загрузит страницу просмотра результатов поиска. Вы можете использовать построитель запросов CI для запроса базы данных, которая вернет ваши результаты в массив, который вы можете отобразить на своей странице просмотра.

http://www.codeigniter.com/userguide3/database/query_builder.html

При построении запроса вы можете использовать «как» точку, чтобы соответствовать результатам поиска. Например, вы можете сделать это:

$this->db->select('*');  
$this->db->like('province', $search_term, 'both'); 
$this->db->or_like('city', $search_term, 'both'); 
$this->db->get('mytable'); 

Термин «оба» также может быть «до» или «после».

Затем вы можете загрузить текстовый хелпер CI, чтобы выделить поисковую фразу в вашем представлении.

http://www.codeigniter.com/userguide3/helpers/text_helper.html#highlight_phrase

Я искренне надеюсь, что помогает и удаче с вашим сайтом,

С наилучшими пожеланиями,

Павла.

+0

Я отредактировал сообщение для clear, см. Мой пост. –

+0

ok, поэтому вы хотите выполнить поиск по двум столбцам, используйте как и or_like в построителе запросов. Вы не будете получать повторяющиеся записи. Затем вы можете использовать текстовый помощник, чтобы выделить поисковый запрос или сделать субстрат на вашем выходе, чтобы заменить поисковый запрос форматированной версией. Это все зависит от вас. – PaulD