how to create MVC for search in Codeigniter?
Start by creating a controller that will be handling the search requests and displaying the search page, followed by the search-term passed to the model for database lookup (and sending it back to the controller). The controller will pass it to the view.
A little example;
The Controller
class Search extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('form'); $this->load->model('search_model'); } public function index() { $this->load->view('search_form'); } public function execute_search() { // Retrieve the posted search term. $search_term = $this->input->post('search'); // Use a model to retrieve the results. $data['results'] = $this->search_model->get_results($search_term); // Pass the results to the view. $this->load->view('search_results',$data); }}
The Model
class Search_model extends CI_Model { public function get_results($search_term='default') { // Use the Active Record class for safer queries. $this->db->select('*'); $this->db->from('members'); $this->db->like('username',$search_term); // Execute the query. $query = $this->db->get(); // Return the results. return $query->result_array(); }}
The view for displaying the search form
<?php echo form_open('search/execute_search'); echo form_input(array('name'=>'search')); echo form_submit('search_submit','Submit');?>
The View for displaying results
<div> <?php // List up all results. foreach ($results as $val) { echo $val['username']; } ?></div>
In CodeIgniter, most likely you will use post method instead of get.So, in the search form, make sure that you are using post method.
for example
View:
<form action="<?=site_url('search_controller/search_function_in_controller')?>" method="post"> search: <input type="text" name="keyword" /> <input type="submit" value="Submit" /></form>
Controller
<?phpclass Search_controller extends CI_Controller { public function search_function_in_controller() { $keyword = $_POST['keyword']; // you can also use $this->input->post('keyword'); $this->load->model('Search_model'); $data['search_result'] = $this->search_model->search_user($keyword); $this->load->view('search_result', $data); }}?>
Model
<?phpclass Searchmodel extends CI_Model{ public function __construct() { parent::__construct(); } function search($keyword) { $this->db->like('first_name',$keyword); $query = $this->db->get('user'); return $query->result_array(); }}?>
Controller
<?phpClass Search extends CI_Controller{ public function __construct() { parent::__construct(); $this->load->model('searchmodel'); } function search_keyword() { $keyword=$this->input->post('submit'); $data['users']=$this->searchmodel->search($keyword); $this->load->view('user/view', $data); }}?>
View
<form class="form-inline" role="form" action="<?php echo site_url().'/search/search_keyword';?>" method="post"> <div class="form-group"> <input type="text" class="form-control" name="search" placeholder="Search by firstname"> </div> <button type="submit" class="btn btn-info" name="submit" >Search</button></form>