[英]Codeigniter Pagination in Config File
根据CI的官方文档 ,可以在配置文件中设置首选项,但我无法使其正常工作。
我认为我已将问题缩小到我的pagination.php文件的第3行-我收到的错误消息是:
消息:未定义的属性:CI_Loader :: $ db
消息:在null上调用成员函数get()
每当我更改此行代码时,
$config['total_rows'] = $this->db->get('item')->num_rows();
至
$config['total_rows'] = 200;
一切正常。 我无法加载某些东西或调用数据库吗?
我的代码是:
控制者
public function index() {
$this->load->library('pagination');
$data = array(
'items' => $this->items_model->itemList(),
'title' => 'Library Items'
);
$this->load->view('item_list', $data);
}
模型
public function itemList() {
$this->db->select('item_id, item_title');
$this->db->from('item');
$this->db->limit(5, $this->uri->segment(3));
return $this->db->get()->result();
}
视图
<?php echo $this->pagination->create_links() ?>
pagination.php
defined('BASEPATH') OR exit('No direct script access allowed');
$config['base_url'] = '/ci/items/index';
$config['total_rows'] = $this->db->get('item')->num_rows();// when I change this to `$config['total_rows'] = 200` it works
$config['per_page'] = 5;
$config['num_links'] = 5;
$config['full_tag_open'] = '<div><ul class="pagination">';
$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>';
$config['anchor_class'] = 'follow_link';
谢谢
如果您不断更改问题,它会使以前的答案看起来有些奇怪。 但是,您不能在配置文件中加载数据库或使用数据库调用。 如果必须运行数据库查询来获取值,则不再使用配置设置,而是将值分配给参数以在库方法调用中使用。
因此,只需将config值设置为某个固定的合理值(例如50),然后在控制器中使用类似以下内容的方法覆盖设置:
// load config file
$this->config->load('pagination', TRUE);
// access pagination settings
$settings = $this->config->item('pagination');
// change whatever you need to
$settings['total_rows'] = $this->db->get('item')->num_rows();
// use the settings to initialize the library
$this->pagination->initialize($settings);
也许有一种更简单的方法,但据我所知,分页库中没有其他设置器。
在您的代码中,您已编写以下行:
$this->pagination->initialize($data);
如果您的分页位于配置文件中,则不需要此行。
要在配置文件中设置首选项,只需在config文件夹中创建一个名为“ pagination.php”的文件。 您的文件将如下所示:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$config['base_url'] = '/ci/items/index';
$config['per_page'] = 5;
$config['num_links'] = 5;
....etc etc
当您加载分页类时,这些都将自动加载,而无需使用上述的initialize函数。 因此,您的控制器现在将如下所示:
public function index() {
$data['total_rows'] = $this->db->get('item')->num_rows();
//start pagination
$this->load->library('pagination');
$data = array(
'items' => $this->items_model->itemList(),
'title' => 'Items'
);
$this->load->view('item_list', $data);
}
希望能有所帮助。
您可以在config文件夹中创建一个名称为pagination
的配置文件,该文件在加载库时会自动调用。
在控制器中添加自定义配置,最后添加$this->pagination->initialize($data);
最终代码是这样的:
$this->load->library('pagination');
$config['base_url'] = base_url('task/lists/');
$config['total_rows'] = $this->tasks->lists_user_count();
$config['per_page'] = 30;
$config['uri_segment'] = 3;
$this->pagination->initialize($config);
其他配置,例如$config['num_links'] = 2;
在配置文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.