如何始终在此 Codeigniter 3 分页中保留 "next" 和 "previous" 链接?

How do I always keep the "next" and "previous" links in this Codeigniter 3 pagination?

我正在开发在线 newspaper/blogging application with CodeIgniter 3.1.8(link 到 GitHub 存储库)和 Twitter Bootstrap 4.

应用程序有主题。其中一个主题使用 pager 而不是分页,因此 Codeigniter 默认分页不太适合它。

我为这个问题找到的“hack”依赖于CSS

在帖子控制器中我有:

class Posts extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    
    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 (!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);
    }
    
    public function search()
    {
        // Force validation since the form's method is GET
        $this->form_validation->set_data($this->input->get());
        $this->form_validation->set_rules('search', 'search term', 'required|trim|min_length[3]', array(
            'min_length' => 'The search term must be at least 3 characters long.'
        ));
        $this->form_validation->set_error_delimiters('<p class = "error search-error">', '</p>');
        // If search fails
        if ($this->form_validation->run() === FALSE) {
            $data['search_errors'] = validation_errors();
            return $this->index();
        } else {
            $expression           = $this->input->get('search');
            $posts_count          = $this->Posts_model->search_count($expression);
            $query_string_segment = 'page';
            $config               = $this->_initPagination("/posts/search", $posts_count, $query_string_segment);
            $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();
            //use limit and offset returned by _initPaginator method
            $data['posts']        = $this->Posts_model->search($expression, $config['limit'], $config['offset']);
            $data['expression']   = $expression;
            $data['posts_count']  = $posts_count;
            $this->twig->addGlobal('pagination', $this->pagination->create_links());
            $this->twig->display("themes/{$data['theme_directory']}/layout", $data);
    }
}

我在样式表中隐藏了除“上一个”和“下一个”按钮之外的页面项目:

.pagination li:first-child {
  display: inline-block;
  margin-right: auto;
}

.pagination li.active + li {
  display: inline-block;
  margin-left: auto;
}

.pagination li,
.pagination li.active {
  display: none;
  position: relative;
}

.pagination li:first-child a::before,
.pagination li.active + li a::before {
  display: inline-block;
  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  background-color: #0085a1;
  border: 1px solid #006d83;
  color: #fff;
  font-size: 14px;
  font-weight: 800;
  padding: 15px 25px;
  letter-spacing: 1px;
  text-transform: uppercase;
}

.pagination li:first-child a::before {
  content: 'Newer Posts';
  padding-left: 35px;
}

.pagination li.active + li a::before {
  content: 'Older Posts';
  padding-right: 35px;
}

.pagination li:first-child a::after,
.pagination li.active + li a::after {
  color: #fff;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

.pagination li:first-child a::after {
  content: '90';
  left: 7px;
}

.pagination li.active + li a::after {
  content: 'F812';
  right: 7px;
}

结果如下图所示:

问题

当我在最后一页时,“较新的帖子”按钮 link 到第一页而不是上一页

我得出的结论是,我想念的是一种始终保持“下一个”和“上一个”的方法links


问题:

如何始终保留“下一个”和“上一个”link?

$config[‘first_link’] = False;
$config[‘last_link’] = False;

将此添加到您的配置中,那么您将不会在分页中显示第一页和最后一页 link

如果你不想列出特定页面(例如,你只想要“下一个”和“上一个”links),你可以通过添加来抑制它们的呈现:

$config['display_pages'] = FALSE;

https://codeigniter.com/userguide3/libraries/pagination.html#id12