2017-04-12 1 views
0

CI official documentation에 따르면 구성 파일에서 기본 설정을 지정할 수는 있지만 작동시키지 못합니다.구성 파일에서 Codeigniter 페이지 매기기

나는 내 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'; 

감사

코드에서
+0

모델은 어디에 있으며 데이터베이스에서 제한 및 오프셋을 사용합니까? – Gaurav

답변

1

질문을 계속 변경하면 이전 답변이 약간 이상하게 보입니다. 그러나 db를로드하거나 구성 파일에서 db 호출을 사용할 수는 없습니다. 값을 얻기 위해 데이터베이스 쿼리를 실행해야한다면 더 이상 구성 설정을 사용하지 않고 라이브러리 메소드 호출에 사용할 값을 arguement에 지정합니다.

그래서 그냥 고정 합리적인 값으로 설정 값을 설정 한 다음 컨트롤러에 뭔가를 사용하여 설정을 무시, 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'라는 구성 폴더에 파일을 만드십시오. 파일은 다음과 같이 될 것이다 :

<?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

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;이 설정 파일에 있습니다.