2017-04-12 42 views
0

根據CI official documentation,可以在配置文件中設置首選項,但是我無法使其工作。配置文件中的Codeigniter分頁

我想我已經將問題縮小到我的pagination.php文件的第3行 - 我收到的錯誤消息是;

消息:未定義的屬性:CI_Loader :: $ DB

消息:調用一個成員函數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'; 

感謝

+0

你的模型在哪裏,你在數據庫中使用限制和偏移? – Gaurav

回答

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); 

有可能是一個更簡單的方法,但據我所知,在分頁庫中沒有其他的設置者。

0

在你的代碼寫的一行:

$this->pagination->initialize($data); 

如果你的分頁是在配置文件中,則不需要此行。

要在配置文件中設置您的首選項,只需在名爲'pagination.php'的config文件夾中創建一個文件。您的文件將是這樣的:

<?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); 
} 

希望有所幫助。

0

你可以在配置文件夾中創建一個名稱爲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;是在配置文件中。