根据CI official documentation,可以在配置文件中设置首选项,但我无法使其工作。
我想我已将问题缩小到我的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';
由于
答案 0 :(得分:1)
如果你不断改变问题,那么以前的答案看起来有点奇怪。但是,您无法在配置文件中加载数据库或使用数据库调用。如果必须运行数据库查询以获取值,则不再使用配置设置,而是将值分配给用于库方法调用的争论。
因此,只需将配置值设置为某个固定的合理值,例如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);
可能有一种更简单的方法,但据我所知,分页库中没有其他的setter。
答案 1 :(得分:0)
在你的代码中,你写了一行:
$this->pagination->initialize($data);
如果您的分页位于配置文件中,则不需要此行。
要在配置文件中设置首选项,只需在config文件夹中创建一个名为&#39; pagination.php&#39;的文件。你的文件是这样的:
<?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
当你加载分页类时,这些都会被自动加载,而你不必使用上面提到的初始化函数。 所以你的控制器现在看起来像这样:
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);
}
希望有所帮助。
答案 2 :(得分:0)
你可以在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;
在配置文件中。