0

前几天,我设法使用网上找到的精彩教程在 CI 中实现分页。第二天,我注意到教程中没有涉及排序。所以我继续实现排序,并成功实现它。但是,出现的问题是分页链接不包含与“sortfield”和“sortorder”相关的特定 URI 段,因此造成混淆。

如果有人知道一种实现排序以使其保留在所有页面上的方法,请告诉我。

我的测试网址: http://zzz.zzz.z.zz/frog/index.php/questions/page/1/id/desc 当我点击第 2 页时没有保留

我的代码:

function page($offset = 0,$sortfield=null,$order=null) {
/**
* Removed all the unnecessary code
*/
    $config = array (
                    'base_url' => base_url () . 'index.php/questions/page/',
                    'total_rows' => $this->db->count_all ( 'questions' ),
                    'per_page' => $this->input->get ( 'perpage' ) ? $this->input->get ( 'perpage' ) : (@$layoutspecificpagination->per_page ? $layoutspecificpagination->per_page : 5),
                    'num_links' => 5,
                    'reuse_query_string' => true
            );

    $config ['total_rows'] = $this->questionsm->read ( $config ['per_page'], $offset, true );

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

然后在视图中:

<?php echo $this->pagination->create_links(); ?>
4

2 回答 2

1

您只需更改您的 base_url 并检查 URL 以进行排序选项。这是你的控制器

function page($offset = 0,$sortfield='DESC',$order='id') {
 /**
* Removed all the unnecessary code
 */


 if ($this->uri->segment(4)) {
    $order = $this->uri->segment(4);
  }

 if ($this->uri->segment(3)) {
   $sortfield = $this->uri->segment(3);
 } 

$config = array (
                'base_url' => base_url () . 'index.php/questions/page/'.$sortfield.'/'.$order,
                'total_rows' => $this->db->count_all ( 'questions' ),
                'per_page' => $this->input->get ( 'perpage' ) ? $this->input->get ( 'perpage' ) : (@$layoutspecificpagination->per_page ? $layoutspecificpagination->per_page : 5),
                'num_links' => 5,
                'reuse_query_string' => true
        );

$config ['total_rows'] = $this->questionsm->read ( $config ['per_page'], $offset, true );

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

id 在 DESC 中用于默认排序

于 2015-06-29T07:07:20.287 回答
0

我做了以下事情来得到答案:

  1. 更改了函数中传递的参数的顺序

    function page($sortfield=null,$order=null,$offset = 0) {}

  2. 正如@rejoanul-alam 所说,修改了基本 URL

    $config = array ( 'base_url' => base_url () . 'index.php/questions/page/'.$sortfield.'/'.$order.'/', 'total_rows' => $this->db->count_all ( 'questions' ), 'per_page' => $this->input->get ( 'perpage' ) ? $this->input->get ( 'perpage' ) : (@$layoutspecificpagination->per_page ? $layoutspecificpagination->per_page : 5), 'num_links' => 5, 'reuse_query_string' => true );

不需要在控制器中获取 URI 段,因为它们已经在函数中传递

  1. 相应地更改了视图中的排序表标题。
于 2015-06-29T08:25:17.377 回答