简体   繁体   中英

Multiple Pagination in codeigniter

Thanks in Advance.

In my project am using 2 pagination in single page . In my controller i have created 2 pagination .But it not works on view .

this is my code for controller

first pagination

 $id = $this->session->userdata('user_id');
       $config['base_url'] = base_url()."my_admin";
        $config['total_rows'] = $this->m_user->get_results_posts_a_count($id);
        $config['uri_segment'] = 2;
        $config['per_page'] = 3;
        $config['use_page_numbers'] = TRUE;
        $val=$this->uri->segment(2);
        $from=$config['per_page'];
        $to=isset($val)?$val:0;
        $config['full_tag_open'] = "<ul class='pagination'>";
        $config['full_tag_close'] ="</ul>";
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
        $config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
        $config['next_tag_open'] = "<li>";
        $config['next_tagl_close'] = "</li>";
        $config['prev_tag_open'] = "<li>";
        $config['prev_tagl_close'] = "</li>";
        $config['first_tag_open'] = "<li>";
        $config['first_tagl_close'] = "</li>";
        $config['last_tag_open'] = "<li>";
        $config['last_tagl_close'] = "</li>";


        $this->pagination->initialize($config);
         $this->pagination->create_links();
        $data['a_post'] = $this->post_model->getuser_a_post($id,$from,$to);

second pagination

$config['base_url'] = base_url()."my_admin";
    $config['total_rows'] = $this->m_user->get_results_posts_count($id);
    $config['uri_segment'] = 2;
    $config['per_page'] = 3;
    $config['use_page_numbers'] = TRUE;
    $val=$this->uri->segment(2);
    $from=$config['per_page'];
    $to=isset($val)?$val:0;
    $config['full_tag_open'] = "<ul class='pagination'>";
    $config['full_tag_close'] ="</ul>";
    $config['num_tag_open'] = '<li>';
    $config['num_tag_close'] = '</li>';
    $config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
    $config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
    $config['next_tag_open'] = "<li>";
    $config['next_tagl_close'] = "</li>";
    $config['prev_tag_open'] = "<li>";
    $config['prev_tagl_close'] = "</li>";
    $config['first_tag_open'] = "<li>";
    $config['first_tagl_close'] = "</li>";
    $config['last_tag_open'] = "<li>";
    $config['last_tagl_close'] = "</li>";


    $this->pagination->initialize($config);
     $this->pagination->create_links();
    $data['a_post'] = $this->post_model->getuser_a_post($id,$from,$to);

How to use this two pagination at view file within this div

<!--  code for first pagination -->

<div class="pagination pull-right"><?php echo $this->pagination->create_links();?></div>
                               </div>

<!--  code for second pagination -->



     <div class="pagination pull-right"><?php echo $this->pagination->create_links();?></div>
                                   </div>

I find best way to have multiple pagination is through ajax now I had problems with links when I did not use ajax for multiple pagination.

On the view of my_admin

<script type="text/javascript">
$(document).ready(function() {
    function load_questions_data(page){
        $.ajax({
        url:"<?php echo base_url(); ?>admin/example/" + page,
        method:"GET",
        dataType:"json",
        success:function(data) {
            list = '<table class="table table-striped table-bordered">';
            list += '<tbody>';
            list += data.table;
            list += '</tbody>';
            list += '</table>';
            $('.question_list').html(list);
            $('.question_pagination_links').html(data.pagination);
        }
        });
    }

    load_questions_data(1);

    // pag-1 class is created in the $config of pagination on controller
    $(document).on("click", ".pag-1 li a", function(e){
        e.preventDefault();
        e.stopPropagation();

        var page = $(this).data("ci-pagination-page");
        load_questions_data(page);
    });
});
</script>

<script type="text/javascript">
$(document).ready(function() {
    function load_questions_data(page){
        $.ajax({
        url:"<?php echo base_url(); ?>admin/to_another_function/" + page,
        method:"GET",
        dataType:"json",
        success:function(data) {
            list = '<table class="table table-striped table-bordered">';
            list += '<tbody>';
            list += data.table;
            list += '</tbody>';
            list += '</table>';
            $('.question_list').html(list);
            $('.question_pagination_links').html(data.pagination);
        }
        });
    }

    load_questions_data(1);

    // pag-2 class is created in the $config of pagination on controller
    $(document).on("click", ".pag-2 li a", function(e){
        e.preventDefault();
        e.stopPropagation();

        var page = $(this).data("ci-pagination-page");
        load_questions_data(page);
    });
});
</script>

Note you may need to set some uri routes https://www.codeigniter.com/user_guide/general/routing.html#examples

$route['admin'] = 'admin/index';
$route['admin/example/(:any)'] = 'admin/example/$1';
$route['admin/(:any)'] = 'admin/index/$1';

Function on controller you can name it what you like

<?php 

class Admin extends CI_Controller {

public function __construct() {
  parent::__construct();
  $this->load->model('example_model');
}

public function index() {
    // admin views in here.
}

public function example() {
    $config = array();

    $config["base_url"] = '#';
    $config["total_rows"] = $this->example_model->total_items();
    $config["per_page"] = 2;
    $config["uri_segment"] = 3;
    $config["use_page_numbers"] = TRUE;
    $config["num_links"] = 10;

    $config["full_tag_open"] = '<ul class="pagination pag-1">';
    $config["full_tag_close"] = '</ul>';
    $config["first_tag_open"] = '<li>';
    $config["first_tag_close"] = '</li>';
    $config["last_tag_open"] = '<li>';
    $config["last_tag_close"] = '</li>';
    $config['next_link'] = '&gt;';
    $config["next_tag_open"] = '<li>';
    $config["next_tag_close"] = '</li>';
    $config["prev_link"] = "&lt;";
    $config["prev_tag_open"] = "<li>";
    $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>";
    $config["num_tag_close"] = "</li>";

    $this->pagination->initialize($config);
    $page = $this->uri->segment(3);

    $start = ($page - 1) * $config["per_page"];

    $output = array(
       'pagination'  => $this->pagination->create_links(),
       'table'   => $this->example_model->get_list($config["per_page"], $start)
    );

    echo json_encode($output);
}

public function to_another_function() {
    $config = array();

    $config["base_url"] = '#';
    $config["total_rows"] = $this->example_model->total_items();
    $config["per_page"] = 2;
    $config["uri_segment"] = 3;
    $config["use_page_numbers"] = TRUE;
    $config["num_links"] = 10;

    $config["full_tag_open"] = '<ul class="pagination pag-2">';
    $config["full_tag_close"] = '</ul>';
    $config["first_tag_open"] = '<li>';
    $config["first_tag_close"] = '</li>';
    $config["last_tag_open"] = '<li>';
    $config["last_tag_close"] = '</li>';
    $config['next_link'] = '&gt;';
    $config["next_tag_open"] = '<li>';
    $config["next_tag_close"] = '</li>';
    $config["prev_link"] = "&lt;";
    $config["prev_tag_open"] = "<li>";
    $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>";
    $config["num_tag_close"] = "</li>";

    $this->pagination->initialize($config);
    $page = $this->uri->segment(3);

   $start = ($page - 1) * $config["per_page"];

    $output = array(
       'pagination'  => $this->pagination->create_links(),
       'table'   => $this->example_model->get_list($config["per_page"], $start)
    );

    echo json_encode($output);
}

}

Model

<?php

class Example_model extends CI_Model {

    public function get_list($limit, $offset) {
        $this->db->limit($limit, $offset);
        $query = $this->db->get('questions');

        $table = '';

        foreach ($query->result_array() as $result) {
            $table .= '<tr>';
            $table .= '<td>' . $result['title'] . '</td>';
            $table .= '</tr>';
        }

        return $table;
    }

    public function total_items() {
        return $this->db->count_all_results('questions');
    }
}

Try catching the result of $this->pagination->create_links() with a variable, like this:

(code for pagination 1)

$pagination1 = $this->pagination->create_links();

...

(code for pagination 2)

$pagination2 = $this->pagination->create_links();

...

Then, on your view, just echo out each variable where you want the respective pagination.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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