配置文件中的Codeigniter分页

时间:2017-04-12 16:42:32

标签: php codeigniter oop pagination

根据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'] = '&laquo; First';
$config['first_tag_open'] = '<li class="prev page">';
$config['first_tag_close'] = '</li>';
$config['last_link'] = 'Last &raquo;';
$config['last_tag_open'] = '<li class="next page">';
$config['last_tag_close'] = '</li>';
$config['next_link'] = 'Next &rarr;';
$config['next_tag_open'] = '<li class="next page">';
$config['next_tag_close'] = '</li>';
$config['prev_link'] = '&larr; 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';

由于

3 个答案:

答案 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;在配置文件中。