Welcome Guest, Not a member yet? Register   Sign In
How do I get the number of pagination items in Codeigniter 3?
#1

(This post was last modified: 10-15-2021, 02:50 AM by Ajax30.)

I have been working on an online newspaper/blogging application with CodeIgniter 3.1.8 and Twitter Bootstrap 4.

By default, the posts are paginated and displayed *12 at a time*, at `http://myblog.com/`, `http://myblog.com/?page=2`, and so on.

In the Posts controller (`application\controllers\Posts.php`) I have:

   
PHP Code:
private function _initPagination($path$totalRows$query_string_segment 'page')
    {
        //load and configure pagination 
        $this->load->library('pagination');
        $config['base_url']            base_url($path);
        $config['query_string_segment'] = $query_string_segment;
        $config['enable_query_strings'] = TRUE;
        $config['reuse_query_string']  TRUE;
        $config['total_rows']          $totalRows;
        $config['per_page']            12;

        if($this->Static_model->get_static_data()['has_pager']){
            $config['display_pages'] = FALSE;
$config['first_link'] = FALSE;
$config['last_link'] = FALSE;
$config['prev_tag_open'] = '<li class="prev">';
$config['prev_tag_close'] = '</li>';
$config['next_tag_open'] = '<li class="next">';
$config['next_tag_close'] = '</li>';
        }

        if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
            $_GET[$config['query_string_segment']] = 1;
        }
        $this->pagination->initialize($config);
        
        $limit  
$config['per_page'];
        $offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
        
        
return array(
            'limit' => $limit,
            'offset' => $offset
        
);
    }
    
    
public function index()
    {
        //call initialization method
        $config $this->_initPagination("/"$this->Posts_model->get_num_rows());
        $data                  $this->Static_model->get_static_data();
        $data['base_url']      base_url("/");
        $data['pages']        $this->Pages_model->get_pages();
        $data['categories']    $this->Categories_model->get_categories();
        $data['search_errors'] = validation_errors();
        
        
//use limit and offset returned by _initPaginator method
        $data['posts'] = $this->Posts_model->get_posts($config['limit'], $config['offset']);
        $this->twig->addGlobal('pagination'$this->pagination->create_links());
        
        
// featured posts
        if ($data['is_featured']) {
            $data['featured'] = $this->Posts_model->featured_posts();
            $this->twig->addGlobal('featuredPosts'"themes/{$data['theme_directory']}/partials/hero.twig");
        }
        
        $this
->twig->display("themes/{$data['theme_directory']}/layout"$data);
    


I am currently working on loading more posts via AJAX. I use the following code to do this:

   
   
Code:
(function($) {
   
        var currentPage = 2;
        var posts = null;
   
        $('.pagination').hide();
   
        $(window).scroll(function() {
            if ($(window).scrollTop() >= $(document).height() - $(window).height() - 25) {
                loadMore();
            }
        });
   
        function loadMore() {
            $.ajax({
                    url: baseUrl + '?page=' + currentPage,
                    type: 'GET',
                    beforeSend: function() {
                        if (typeof posts != 'undefined') {
                            $('.loader').show();
                        }
                    }
                })
                .done(function(data) {
                    $('.loader').hide();
   
                    posts = $(data).find('#postsContainer').html();
   
                    // If there are no more posts, hide loader
                    //  Otherwise, load more posts
                    if (typeof posts == 'undefined') {
                        $('.loader').hide();
                        $('#postsContainer').append('<p class="text-center text-muted">No more posts to load</p>');
                    } else {
                        $('#postsContainer').append(posts);
                        currentPage = currentPage + 1;
                    }
                });
        }
   
    })(jQuery);



The problem

The problem is that the script does not know when `currentPage` equals the last page so, as a result, "No more posts to load" is displayed as many times as I scroll after the last pos has loaded.

I should do something like:

   
Code:
if (currentPage > maxPage) {
     $('#postsContainer').append('<p class="text-center text-muted">No more posts to load</p>');
}


But I do not have the `maxPage` variable.

How do I get the number of pagination items?
Reply


Messages In This Thread
How do I get the number of pagination items in Codeigniter 3? - by Ajax30 - 10-15-2021, 02:48 AM



Theme © iAndrew 2016 - Forum software by © MyBB