我正在设计一个页面,它可以搜索结果并将结果显示到具有分页的表格中,并且用户可以自由选择每页显示的行数。
控制器包含以下功能:
settings_admin.php
function view_company(){
$this->check_logged_in();
$this->load->library('table');
$this->load->library('pagination');
$fields = $this->db->list_fields('company');
$this->table->set_heading($fields);
$field_to_search = 'all';
if(isset($_POST['company_cols'])){
$field_to_search = $_POST['company_cols'];
}
if(isset($_POST['search_text'])){
$first=true;
$search_text = $_POST['search_text'];
if($field_to_search == 'all' && $search_text!=''){
foreach ($fields as $field){
if($first){
$this->db->like($field,$search_text);
$first=false;
}else{
$this->db->or_like($field,$search_text);
}
}
}else if($search_text!=''){
$this->db->like($field_to_search,$search_text);
}
}
if(isset($_POST['num_of_rows'])){
$config['per_page'] = $_POST['num_of_rows'];
$this->session->set_userdata('rows_per_page', $_POST['num_of_rows']);
}else if($this->session->userdata('rows_per_page')!=null){
$config['per_page'] = $this->session->userdata('rows_per_page');
}else{
$config['per_page'] = 10;
}
$result = $this->db->get('company',$config['per_page'], $this->uri->segment(3));
$config['total_rows'] = $this->db->get('company')->num_rows();
//$config['total_rows'] = $result->num_rows();
$config['base_url'] = site_url('/settings_admin/company');
$config['num_links'] = 5;
$config['full_tag_open'] = '<div id="pagination">';
$config['full_tag_close'] = '</div>';
$config['records'] = $result;
$this->pagination->initialize($config);
//var_dump($config);
//var_dump($_POST);
$config['num_of_rows'] = $config['per_page'];
$this->load->view('admin/view/company',$config);
}
查看如下:
company.php
<?php
$data = array(
'title' => 'Company',
'form_action' => 'settings_admin/company'
);
?>
<?php $this->load->view('includes/header',$data); ?>
<?php $this->load->view('sidebar_admin_controls'); ?>
<div class="content">
<h3>Companies</h3>
<div align='right'>
Search:
<input style="width:15em;" type="text" name="search_text"
value="<?php echo set_value('search_text'); ?>" placeholder="search company details"/>
in
<select name="company_cols">
<option value='all'>all</option>
<?php
$fields = $this->db->list_fields('company');
foreach ($fields as $field){
echo "<option value='$field'>$field</option>";
}
?>
</select>
<input type="submit" name="search" value="Search"/>
</div>
<div align='left'>
<?php
if(!isset($num_of_rows)){
$num_of_rows = 10;
}
?>
Rows per page: <input style="width:4em;" type="text" name="num_of_rows" value=<?php echo $num_of_rows;?> placeholder="rows"/>
<input type="submit" name="search" value="Go"/>
</div>
<div class="view_table" id="view_table">
<?php
echo $this->table->generate($records);
?>
</div>
<?php
echo "<br/>";
echo $this->pagination->create_links(); // can run and show me the ok..
// when i press on page link, it goes back to default #of rows per page (10)
?>
<br/>
<div align="center" id="option_buttons">
<input type="submit" name="add" value="Add New"/>
<input type="submit" name="update" value="Update"/>
<input type="submit" name="delete" value="Delete"/>
<input type="submit" name="print" value="Print"/>
</div>
</div><!-- end .content -->
<?php $this->load->view('includes/footer'); ?>
当我输入行数并按GO
按钮时,它会返回所需的分页,但页面链接的数量与所需的不相等。例如如果搜索只返回一行,它会显示在表中而没有任何页面链接。但在我的情况下,它显示单行(搜索结果)以及所有页面链接(等于total_rows / per_page)。
这可能是因为total_rows被设置为$config['total_rows'] = $this->db->get('company')->num_rows();
,实际上应该是搜索结果的数量。
但是如果我需要添加代码中给出的查询参数(例如'where'子句),我该如何设置呢?
答案 0 :(得分:0)
在这种情况下,您可以使用此代码。首先添加此库以在控制器中构建。
参见演示 -
class welcome扩展了CI_Controller {
function __construct()
{
parent::__construct();
$this->load->model('common_model', 'Common_model', true);
$this->load->library('pagination');
}
然后在你创建任何函数,在这里我创建一个函数名称&#34; bill_list&#34;
public function bill_list()
{
/******** pagination ********/
$pageNo = $this->uri->segment(2, 0);
$data['page_no'] = $pageNo;
$config['uri_segment'] = 2;
$config['base_url'] = BASEURL . 'bill_list';
//get the total count list
$config['total_rows'] = $this->Common_model->count_list('lading_bill');
$config['per_page'] = 20; //per page limit
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
$startLimit = ($pageNo) ? $pageNo : 0;
$per_page = $config['per_page'];
/******** pagination ********/
//get the list with start limit and per page.
// here 'lading_bill' is table name
$data['bill_list'] = $this->Common_model>get_all_list('lading_bill',$startLimit, $per_page);
$data['mainContent'] = $this->load->view('bill_list', $data, true);
$this->load->view('template', $data);
}
然后只需将$ pagination变量添加到bill_list视图页面。
您可以复制粘贴此代码。请检查图书馆文件夹中是否有可用的分页库。就是这样。
答案 1 :(得分:0)
为此,您需要在通用模型中使用两个功能 -
// return total row result.
function count_list($table)
{
$sql = "SELECT COUNT(*) AS result_count FROM $table";
$result = $this->db->query($sql)->row_array();
return $result['result_count'];
}
//Search Total Result Using Pagination
function get_all_list($table_name, $startLimit = NULL, $per_page = NULL)
{
if (isset($startLimit))
$this->db->limit($per_page, $startLimit);
$result = $this->db->get($table_name)->result_array();
return $result;
}
答案 2 :(得分:0)
尝试给GroceryCRUD提供机会:http://www.grocerycrud.com/