我正在尝试使用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 个视图,"事件/索引.php"和"事件/搜索.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');
}
希望这里有人能够提供帮助,干杯。
在加载视图之前对$data执行var_dump((。 并比较这两个视图的结果。
代码看起来不错。 下面提到了一些改进。
请使用其他变量来显示消息,而不是闪烁会话数据
请分享完整的控制器,以便我更好地为您提供帮助。
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');
}
尝试使用
echo "<pre>";
print_r($data);
以检查可用于查看文件的搜索结果.php