我正在使用分页搜索结果。搜索工作完美。搜索后显示前10条记录。但是当我点击下一个按钮时,一切都会消失,并显示一个空白页面。
我的代码中的任何想法可能会出错。
模型
function search_bookings($time, $title, $payment, $start_date, $end_date,$limit, $start, $type) {
$this->db->select('reservations.*');
$this->db->from('reservations');
$this->db->where('is_deleted', '0');
$this->db->order_by('date_cal',"desc");
if (!empty($time) && !is_null($time)) {
$this->db->where('reservations.type', $time);
}
if (!empty($payment) && !is_null($payment)) {
$this->db->where('reservations.advanced_payment_status', $payment);
}
if (!empty($title) && !is_null($title)) {
$this->db->where('reservations.title', $title);
}
if (!empty($start_date) && !is_null($start_date)) {
$this->db->where('reservations.date_cal >=', $start_date);
$this->db->where('reservations.date_cal <=', $end_date);
}
if ($type == 'half') {
$this->db->limit($limit, $start);
}
$query = $this->db->get();
return $query->result();
}
控制器
function search_reservations($start = 0) {
$reservation_service = new Reservation_service();
$config = array();
$config["base_url"] = site_url() . "/dashboard/manage_bookings/";
$config["per_page"] = 10;
$config["uri_segment"] = 4;
$config["num_links"] = 4;
$time = $this->input->post('type', TRUE);
$title = $this->input->post('title', TRUE);
$payment = $this->input->post('payment', TRUE);
$date_from = $this->input->post('date_from', TRUE);
$date_to = $this->input->post('date_to', TRUE);
$searched_results = $reservation_service->search_bookings($time, $title, $payment, $date_from, $date_to, $config["per_page"], $start, 'half');
$data['search_results'] = $searched_results;
$config["total_rows"] = count($reservation_service->search_bookings($time, $title, $payment, $date_from, $date_to, $config["per_page"], 0, 'all'));
$this->pagination->initialize($config);
$data["links"] = $this->pagination->create_links();
$this->load->view('body_pages/search_results', $data);
}
搜索结果视图
<table class="display table table-bordered table-striped" id="bookings_table">
<thead>
<tr>
<th>#</th>
<th>Date</th>
<th>Hall</th>
<th>Time</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php
$i = 0;
foreach ($search_results as $result) {
?>
<tr id="bookings_<?php echo $result->id; ?>">
<td><?php echo ++$i; ?></td>
<td><?php echo $result->date_cal; ?></td>
<td><?php if ("RP" == $result->title) { ?><?php
echo "Royal Princess Ballroom (Downstairs)";
}
?>
<?php if ("GK" == $result->title) { ?><?php
echo "Grand Kings Ballroom (Upstairs)";
}
?>
</td>
<td><?php echo $result->type; ?></td>
<td align="center">
<a class="btn btn-primary btn-xs" onclick="display_edit_reservation_pop_up(<?php echo $result->id; ?>)"><i class="fa fa-pencil" title="Update"></i></a>
<a class="btn btn-danger btn-xs" onclick="delete_bookings(<?php echo $result->id; ?>)" ><i class="fa fa-trash-o " title="Remove"></i></a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<div class="pagination">
<?php echo $links; ?>
</div>
答案 0 :(得分:0)
尝试添加
$config['use_page_numbers'] = TRUE;
并制作
$config['uri_segment'] = 4;
要
$config['uri_segment'] = 3;
可能需要设置routes.php
$routes['dashboard/manage_bookings/(:any)'] = "dashboard/manage_bookings/$1"
CI2 http://www.codeigniter.com/userguide2/general/routing.html
CI3 http://www.codeigniter.com/user_guide/general/routing.html
答案 1 :(得分:0)
嗨嗨请在分页类中找到以下控制器代码
/* start code of pagination */
$config = array();
$config["base_url"] = base_url()."cms/manage_cms";
if (count($_GET) > 0) $config['suffix'] = '?' . http_build_query($_GET, '', "&");
if (count($_GET) > 0) $config['first_url'] = $config['base_url'].'?'.http_build_query($_GET);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
//$page = 0;
$config["total_rows"] = count($this->mdl_cms->getAllCmsByCondition($searchindex,$orderField,$orderby,$rowsPerPage,$page,false));
if($config["total_rows"] < $rowsPerPage){
$page = 0;
}
$config["per_page"] = $rowsPerPage;
//$config["uri_segment"] = 3;
$config['full_tag_open'] = '<div class="pagination"><ul>';
$config['full_tag_close'] = '</ul></div><!--pagination-->';
$config['first_link'] = '« First';
$config['first_tag_open'] = '<li class="prev page">';
$config['first_tag_close'] = '</li>';
$config['last_link'] = 'Last »';
$config['last_tag_open'] = '<li class="next page">';
$config['last_tag_close'] = '</li>';
$config['next_link'] = 'Next →';
$config['next_tag_open'] = '<li class="next page">';
$config['next_tag_close'] = '</li>';
$config['prev_link'] = '← Previous';
$config['prev_tag_open'] = '<li class="prev page">';
$config['prev_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a href="">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li class="page">';
$config['num_tag_close'] = '</li>';
$this->pagination->initialize($config); // Load pagination class
$usersArr = $this->mdl_cms->getAllCmsByCondition($searchindex,$orderField,$orderby,$rowsPerPage,$page,true);
//echo $this->db->last_query(); //die;
$data["links"] = $this->pagination->create_links(); // Create pagination links
希望它对您有用
答案 2 :(得分:0)
您正在从POST获取$ time,$ title,$ payment,$ date_from,$ date_to变量。
分页链接类似于 - home / search_reservations / 2
一旦用户点击这些链接,帖子中的搜索数据就会丢失。如果您希望它们影响所有页面,您需要将搜索参数保留在记录中。
有两种方法 -
1)使用GET而不是POST。将搜索参数保留在生成的分页链接的查询字符串中。这样所有页面都将具有搜索参数。如果要共享/标记搜索结果的特定页面,也很有用。例如,您的网页将链接为 -
www.yoursite.com/home/search_reservations/2?time=123&title=123&payment=123&date_from=123&date_to=123
2)将搜索参数保留在会话中。代码中有很多杂乱但在URL中更漂亮。