繁体   English   中英

配置文件中的Codeigniter分页

[英]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'] = '&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';

谢谢

如果您不断更改问题,它会使以前的答案看起来有些奇怪。 但是,您不能在配置文件中加载数据库或使用数据库调用。 如果必须运行数据库查询来获取值,则不再使用配置设置,而是将值分配给参数以在库方法调用中使用。

因此,只需将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM