CI Pagination Back to Posts Link

2019-08-12 07:20发布

问题:

I'm learning CI and latest I've been tasked to do is pagination. So I followed this tutorial as it seemed relatively nicely made and explained. Link

The pagination works and its great. Now I wanted to make a read more under each post, making each post open separately with its full description. That also works, but when I click a link to go back to the pagination index, the list starts from the beginning, no matter which post I clicked. I'm not sure how to add the page I want the return link to take me back so I'll just post this here and hopefully it won't be too hard for someone to tell me.

If someone is confused what I'm after, just look at the last view readmore_paginate. In it, the last link should contain a number back to the page, but idk how to put or what to put there.

Controller

public function paginate()
{
    $config = array();
    $config['base_url'] = base_url()."welcome/paginate";
    $config['total_rows'] = $this->blog_model->countPosts();
    $config['per_page'] = 2;
    $config['uri_segment'] = 3;

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

    $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0; //TERNARY OPERATOR (? = TRUE) (: = FALSE)
    $data['results'] = $this->blog_model->fetchPosts($config['per_page'], $page);
    $data['links'] = $this->pagination->create_links();

    $this->load->view('header');
    $this->load->view("p_content", $data);
    $this->load->view('footer');
}
public function readMore_Paginate()
{
    $id = $this->input->get('postid');
    $data['post'] = $this->blog_model->getSpecificPost($id);
    $this->load->view('header');
    $this->load->view('readmore_paginate', $data);
    $this->load->view('footer');
}

Model

public function countPosts()
{
    return $this->db->count_all("Blogposts");
}

public function fetchPosts($limit, $start)
{
    $this->db->select('*');
    $this->db->from('Blogposts');
    $this->db->join('Blogcategories', 'Blogposts.postcatid=Blogcategories.id');
    $this->db->limit($limit, $start);
    $query = $this->db->get();
    if($query->num_rows() > 0)
    {
        foreach ($query->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
    return false;
}

View p_content

    <div class="col-md-8">      
            <table class="table">
                <tbody>
<?php 

foreach ($results as $key) {

                        echo "<tr><th><h2><kbd><font color='yellow'>".$key->postname."</font></kbd></h2><kbd><font color='lime'>".date("d M Y",strtotime($key->postdate))."</font></kbd> <kbd><font color='cyan'>".$key->catname."</font></kbd></th></tr>";
                        echo "<tr><td><blockquote>".mb_substr($key->postdesc, 0,80,'UTF-8')."...";?>
                        <a href="<?php echo base_url()."welcome/readmore_paginate?postid=".$key->postid; ?>">read more</a></blockquote> 
                                            <?php } ?>

    </tbody>
            </table>
            <p><?php echo $links; ?></p>
        </div>

View readmore_paginate

    <div class="col-md-8">      
            <table class="table">
                <tbody>
<?php 

foreach ($post as $key) {

                            echo "<tr><th><h2><kbd><font color='yellow'>".$key['postname'].
                                "</font></kbd></h2><kbd><font color='lime'>".
                                date("d M Y",strtotime($key['postdate']))."
                                </font></kbd> <kbd><font color='cyan'>".
                                $key['catname']."</font></kbd></th></tr>";
                            echo "<tr><td><blockquote>".$key['postdesc']."</blockquote>"; ?>
                            <a href="<?php echo base_url().'welcome/paginate'; ?>">Back to Posts</a>
                        <?php }

                     ?>

</tbody>
        </table>
    </div>

回答1:

Controller

$page = $this->input->get('page') ? 
             $this->input->get('page') : 
             $this->uri->segment(3) ? 
                 $this->uri->segment(3) : 
                 0;
$data['results'] = $this->blog_model->fetchPosts($config['per_page'], $page);
$data['links'] = $this->pagination->create_links();
$data['page'] = $page; // add this

view p_content

<a href="<?php echo base_url()."welcome/readmore_paginate?postid=".$key->postid; ?>&page=<?=$page?>">read more</a></blockquote> 

view readmore_paginate

<a href="<?php echo base_url().'welcome/paginate?page='.$this->input->get('page'); ?>">Back to Posts</a>