Представление Codeigniter не загружается правильно - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь создать сайт управления событиями, используя codeigniter, но у меня возникают проблемы с корректной работой функции поиска.

Вот функция поиска на контроллере событий

public function search()
{
    $keyword = $this->input->post('keyword');
    $data['events'] = $this->event_model->get_events_by_keyword($keyword);

    $this->session->set_flashdata('event_search', 'Showing all results relating to '.$keyword);

    $this->load->view('templates/header');
    $this->load->view('events/search', $data);
    $this->load->view('templates/footer');
}

А вот функция для получения событий в модели событий

public function get_events_by_keyword($keyword)
{
    $this->db->order_by('events.date', 'ASC');

    $this->db->like('name', $keyword)
    ->or_like('location', $keyword)
    ->or_like('genre', $keyword)
    ->or_like('date', $keyword);
    $query = $this->db->get('events');

    return $query->result_array();
}

В настоящее время у меня есть 2 просмотра: 'events / index. php' и 'events / search. php' , Функция поиска прекрасно работает при использовании со страницы поиска, но при использовании со страницы индекса ничего не происходит. Страница просто перезагружается.

<section id="events-page">
    <form action="<?php site_url('events/search'); ?>" method="post">
    <input type="text" name="keyword" placeholder="search" required autofocus>
    <input type="submit" value="Search">
    </form>
    <div class="container">
        <div class="row center-xs center-sm center-md center-lg">
            <?php foreach($events as $event) : ?>
                <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 events-page-content"> 
                    <div class="row">
                        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                            <a href="<?php echo site_url('/events/'.$event['slug']); ?>">
                                <img src="<?php echo site_url(); ?>/assets/images/events/<?php echo $event['event_image']; ?>">
                            </a>
                        </div>
                        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                            <a href="<?php echo site_url('/events/'.$event['slug']); ?>">
                            <h3><?php echo $event['name']; ?></h3>
                            <small>Location: <?php echo $event['location']; ?></small><br>
                            <small>Genre: <?php echo $event['genre']; ?></small><br>
                            <small>Date: <?php echo $event['date']; ?></small></a>
                        </div>
                    </div>   
                </div>
            <?php endforeach; ?>
        </div>
    </div>
</section>

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

public function search()
{
    $keyword = $this->input->post('keyword');
    $data['events'] = $this->event_model->get_events_by_keyword($keyword);

    $this->session->set_flashdata('event_search', 'Showing all results relating to '.$keyword);

    $this->load->view('templates/header');
    $this->load->view('events/index', $data);
    $this->load->view('templates/footer');
}

Надеюсь, кто-то здесь сможет помочь, ура.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2020

Код выглядит нормально. Есть некоторые улучшения, упомянутые ниже.

Пожалуйста, используйте другую переменную для отображения сообщения вместо мигания данных сеанса

Пожалуйста, предоставьте полный контроллер, чтобы я мог помочь вам лучше.

public function search()
{
    $keyword = $this->input->post('keyword');
    $data['events'] = $this->event_model->get_events_by_keyword($keyword);
    // you can also use javascript or jquery to display this message 
    // no need to send this back from server and make this request ajax
    $data['message'] = "Showing all results relating to $keyword";

    // $this->session->set_flashdata('event_search', 'Showing all results relating to '.$keyword);

    $this->load->view('templates/header');
    $this->load->view('events/index', $data);
    $this->load->view('templates/footer');

}
0 голосов
/ 10 февраля 2020

Попробуйте использовать

echo "<pre>";
print_r($data);

в вашем индексе. php файл, чтобы проверить результаты поиска, доступные в вашем файле просмотра.

0 голосов
/ 10 февраля 2020

сделайте var_dump () на $ data перед загрузкой представлений. и сравните результат для этих двух представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...