【问题标题】:Codeigniter pagination with get variable always display page 1 as current active link带有获取变量的 Codeigniter 分页始终将第 1 页显示为当前活动链接
【发布时间】:2016-09-21 10:16:46
【问题描述】:

首先,我是 CodeIgniter 的新手,我搜索并发现了很多我遇到的类似问题,并尝试了所有解决方案,但都没有奏效。我有一个搜索输入,显示我的分页数据,当在第二页的 url 中设置了获取参数时,问题就出现了,显示的数据是第二页的,但分页号链接仍然在第 1 页。我将只显示相关代码(我已经正确放置了构造、索引、加载等)。

models/model.php

public function get_results($search_term='default', $limit, $start) {
    $this->db->select('*');
    $this->db->from('table');
    $this->db->like('title', $search_term');
    $this->db->order_by('PID DESC');
    $query = $this->db->get('', $limit, $start);
    return $query->result();
}

控制器/controller.php

public function execute_search() {
    // Retrieve the posted search term
    $search_term = $this->input->post('search');

    // Retrieve get variables if goes to second page
    // url example: localhost:/index/main/execute_search/query/15
    // If segment is 4, the third segment is the query get variable passed through link
    $search_term = ($this->uri->segment(4)) ? $this->uri->segment(3) : $search_term;

    // Pagination settings
    $config['base_url'] = site_url('main/execute_search/' . $search_term . '/');
    $this->db->like('title', $search_term);
    $this->db->from('table');
    $totalrows = $this->db->count_all_results();
    $config['total_rows'] = $totalrows;
    $config['per_page'] = '15';
    $config['uri_segment'] = 3;
    $choice = $config['total_rows'] / $config['per_page'];
    $config['num_links'] = floor($choice);

    // config for bootstrap pagination class integration
    $config['full_tag_open'] = '<ul class="pagination">';
    $config['full_tag_close'] = '</ul>';
    $config['first_link'] = false;
    $config['last_link'] = false;
    $config['first_tag_open'] = '<li>';
    $config['first_tag_close'] = '</li>';
    $config['prev_link'] = '&laquo';
    $config['prev_tag_open'] = '<li class="prev">';
    $config['prev_tag_close'] = '</li>';
    $config['next_link'] = '&raquo';
    $config['next_tag_open'] = '<li>';
    $config['next_tag_close'] = '</li>';
    $config['last_tag_open'] = '<li>';
    $config['last_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);

    // If segment is 4, current page is the fourth segment
    $data['page'] = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;

    // Use a model to retrieve the results
    $data['datalist'] = $this->model->get_results($search_term, $config['per_page'], $data['page']);

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

    // Pass the results to the view
    $this->load->view('main', $data);

views/main.php

<!DOCTYPE HTML>
<html>
<head>
    <!-- Bootstrap css -->
    <link rel='stylesheet' href='<?= base_url('assets/css/bootstrap.css'); ?>'></link>
</head>
<body>
<?php

    echo form_open('main/execute_search');

    echo form_input(array('name'=>'search'));

    echo form_submit('search_submit', 'Search');

    // result
    for($i = 0; $i < count($datalist); $i++) {
        echo $datalist[$i]->title;
    }

    // Pagination
    echo $pagination

?>
</body>
</html>

localhost/index/main/execute_search

localhost/index/main/execute_search/15

localhost/index/main/execute_search/query/15

localhost/index/main/execute_search/query/30

当我在 url 中添加 get 参数时出现问题,请帮助我解决这个问题。非常感谢您。

【问题讨论】:

    标签: php codeigniter pagination


    【解决方案1】:

    移动:

    $data['page'] = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
    

    上图:

    $config['base_url'] = site_url('main/execute_search/' . $search_term . '/');
    

    然后改变:

    $config['base_url'] = site_url('main/execute_search/' . $search_term . '/');
    

    $config['base_url'] = site_url('main/execute_search/'.$data['page'].'/' . $search_term . '/');
    

    也改变:

    $search_term = ($this->uri->segment(4)) ? $this->uri->segment(3) : $search_term;
    

    $search_term = ($this->uri->segment(5)) ? $this->uri->segment(5) : $search_term;
    

    【讨论】:

    • 感谢您的回答,您是否建议添加另一个“查询”段?所以我的网址应该是 localhost/index/main/execute_search/query/query_user_search/15 ?我给出示例的 url 中的查询是用户的搜索输入。
    • 好的,谢谢,所以我按照您的建议做了,它正确显示了数据,并且分页显示了正确的当前活动链接,但是分页上的链接仍然错误,我找不到原因,例如我在第二页的 localhost/index/main/execute_search/15/query 中,第三页的分页链接是 localhost/index/main/execute_search/15/query/30 第四页是 localhost/ index/main/execute_search/15/query/45,'15'应该改变,但它没有,不知道为什么..
    • 尝试评论该行:$config['uri_segment'] = 3; 并将$config['num_links'] = floor($choice); 更改为$config['num_links'] = 20; 以进行测试。
    • 是的,找到了,问题在于 $config['uri_segment'] = 3,将其更改为 $config['uri_segment'] = 4,一切正常。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多