如何始终在此 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
我正在开发在线 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