Harshal
Harshal

Reputation: 3622

Pagination not working properly in codeigniter

I have pagination on my view which is working fine if i am clicking on next number link.like:

1 2 > 

So if i am clicking on 2 it goes on second page and shows proper result.but now if i want to come back on 1 than its not redirecting me. Even if there is link 3 than i couldn't come on 2.

Here is my code:

Controller:

function list_providers()
{

    $admin_session_data= $this->session->userdata('user_logged_in');

    $this->load->model('/admin/provider_model');
    $this->load->library('pagination');
    $this->load->helper('url');

    $config['base_url'] = base_url()."index.php/admin/provider/list_providers/";
    $config['total_rows'] = $this->provider_model->countprovider();
    $config['per_page'] = 3;
    $config['creat_link'] = 1;
    $config['first_link'] = 'First';
    $config['last_link'] = 'Last';

    $this->pagination->initialize($config);
    $offset=($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
    $data['list']= $this->provider_model->listproviders($config['per_page'],$offset);

    //$data['customer']= $this->provider_model->getcustomer_data($config['per_page'],$this->uri->segment(3));


    if(!empty($data))
    {   
        $this->load->view('admin/admin_header',$admin_session_data); 
        $this->load->view('admin/admin_top_nav',$admin_session_data); 
        $this->load->view('admin/admin_left',$admin_session_data);
        $this->load->view('admin/provider_list',$data);
        $this->load->view('admin/admin_footer',$admin_session_data);
    }

}

Model:

function listproviders($num,$offset)
{
    $this->load->library('pagination');

    //$query=$this->db->get_where('users', array('user_role_id'=>'3'));
    $query=$this->db->get('users',$num,$offset);

    // return result set as an associative array
    return $query->result_array();
}


function countprovider()
{
    $this->load->library('pagination');
    $query=$this->db->count_all_results('users');
    return $query;
}

And my pagination is showing like this: 1 2 >

Please see where is problem.

Upvotes: 1

Views: 5681

Answers (2)

Philo
Philo

Reputation: 414

I've made some changes to your controller and model. Changes are commented:

Controller

// admin/provider/list_providers/3 <- Offset number
function list_providers($offset = null)
{    
    $admin_session_data= $this->session->userdata('user_logged_in');

    // Load models/libraries/helpers
    $this->load->model('admin/provider_model');
    $this->load->library('pagination');
    $this->load->helper('url');

    // Pagination config
    $config['base_url'] = site_url('index.php/admin/provider/list_providers') . '/';
    $config['total_rows'] = $this->provider_model->countprovider();
    $config['per_page'] = 3;
    // $config['creat_link'] = 1; <-- This is not a valid option
    $config['first_link'] = 'First';
    $config['last_link'] = 'Last';

    // Init config
    $this->pagination->initialize($config);

    // If the pagination library doesn't recognize the current page add:
    $this->pagination->cur_page = $offset;

    $data['list']= $this->provider_model->listproviders($config['per_page'],$offset);

    if(!empty($data))
    {   
        $this->load->view('admin/admin_header',$admin_session_data); 
        $this->load->view('admin/admin_top_nav',$admin_session_data); 
        $this->load->view('admin/admin_left',$admin_session_data);
        $this->load->view('admin/provider_list',$data);
        $this->load->view('admin/admin_footer',$admin_session_data);
    }
}

Model

function listproviders($num,$offset)
{
    // $this->load->library('pagination'); <-- There is no need for this
    $query = $this->db->get('users', $num, $offset);

    // Check if pages where found
    if ($query->num_rows() > 0)
    {
        return $query->result_array();
    }
    else
    {
        return FALSE;
    }

}


function countprovider()
{
    // $this->load->library('pagination'); <-- There is no need for this
    return $this->db->count_all_results('users');
}

Upvotes: 3

Bhuvan Rikka
Bhuvan Rikka

Reputation: 2703

Create links directly from library.. Like this..

$data['links']= $this->pagination->create_links();

And in view give something like

<div align="center" style="margin-top:10px;background-color: #F1F8E0">
       <?php echo $links; ?>
</div>

EDIT:

Sample code:

function  __construct()
    {

        parent::__construct();
        $this->load->helper('array');
        $this->load->helper('url');
        $this->load->helper('html');
        $this->load->helper('form');
        $this->load->library('form_validation');
        $this->load->library('pagination');
        $this->load->library('session');
        $this->load->model('listing','',TRUE);
    }

    // Shows pagination

    function index($uri_segment="3")
{   
        $config['base_url'] = base_url('index.php/listing_controller/index');
        $config['total_rows'] = $this->listing->get_rows();
        $config['per_page'] = 5;
        $config['uri_segment'] = 3;
        $this->pagination->initialize($config);
        $output['op']=$this->listing->get_paging_data($config['per_page'],$this->uri->segment(3));
        $output['links']= $this->pagination->create_links();
        $this->load->view('listing_view',$output);
    }

And the snippet in view file is shown above

Upvotes: 1

Related Questions