Как создать MVC для поиска в Codeigniter? - PullRequest
4 голосов
/ 11 января 2012

Я очень новичок в CodeIgniter, который мне до сих пор было очень трудно выучить. В основном я никогда не работаю с фреймворками, и это мой первый раз.

Я понимаю MVC, но я действительно не знаю, как создать поиск, даже простой: я просто хочу, чтобы кто-то отправил слово во входе и произвел поиск в моей базе данных (с Ajax или нет) и дал ответ обратно. Может ли кто-нибудь помочь мне с некоторыми идеями о том, как мне поступить? Я понимаю, что в представлении я добавлю свои div, входы и многое другое, а в контроллере я вызову мои функции, которые будут взаимодействовать с моей моделью. Я борюсь с тем, как интегрировать их в CI, потому что представление фактически заполняется через контроллер, и я считаю, что я не могу использовать функции из него в представлении.

Любая помощь, пожалуйста?

Ответы [ 3 ]

17 голосов
/ 12 января 2012

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

Небольшой пример;

Контроллер

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);
    }

}

Модель

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();
    }

}

Вид для отображения формы поиска

<?php
    echo form_open('search/execute_search');

    echo form_input(array('name'=>'search'));

    echo form_submit('search_submit','Submit');


?>

Представление для отображения результатов

<div>
    <?php
        // List up all results.
        foreach ($results as $val)
        {
            echo $val['username'];
        }
    ?>
</div>
0 голосов
/ 30 мая 2017

Модель

<?php
class 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();
    }
}

?>

Контроллер

<?php
Class 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);

    }
}
?>

Вид

<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>
0 голосов
/ 11 января 2012

В CodeIgniter, скорее всего, вы будете использовать метод post вместо get.Поэтому в форме поиска убедитесь, что вы используете метод записи.

, например

Просмотр:

<form action="<?=site_url('search_controller/search_function_in_controller')?>" method="post">
  search: <input type="text" name="keyword" />
  <input type="submit" value="Submit" />
</form> 

Контроллер

<?php
class 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);
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...