【问题标题】:Pagnation with GET data in the uri - Codeigniter使用 URI 中的 GET 数据进行分页 - Codeigniter
【发布时间】:2012-05-17 06:30:05
【问题描述】:

我正在尝试对 DB 返回的结果进行分页。但是当我尝试从 URI 中获取偏移量时:

questions/search?content=foobar/4

/4 应该是偏移量,但它被分配给$_GET 值。

这是控制器中的整个方法:

http://pastebin.com/QFJddMDJ

$results = $this->question->search_results_count($content);
$this->load->library('pagination');
$config['total_rows'] = count($results);
$offset = $this->uri->segment(3);
if ($offset == false) $offset = 0;
$config['full_tag_open'] = '<ul class="pages">';
$config['full_tag_close'] = '</ul>';
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li><a  class="active">';
$config['cur_tag_close'] = '</a></li>';
$config['prev_tag_open'] = '<li class="prev">';
$config['prev_tag_close'] = '<li>';
$config['next_tag_open'] = '<li class="next">';
$config['next_tag_close'] = '</li>';
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['first_link'] = '<<';
$config['first_tag_open'] = '<li>';
$config['first_tag_close'] = '</li>';
$config['last_link'] = '>>';
$config['last_tag_open'] = '<li>';
$config['last_tag_close'] = '</li>';
$config['per_page'] = 1;
$config['uri_segment'] = 2;
$config['page_query_string'] = TRUE;
$config['use_page_numbers'] = TRUE;
$config['suffix'] = '?content='.$content;
$config['base_url'] = base_url().'questions/search/';
$this->pagination->initialize($config);

【问题讨论】:

  • 查询字符串必须是您网址中的最后一件事。 /search/4?content=foo 之类的东西有效吗?
  • 如何查看配置中的base_url?
  • 查看您的 config/config.php 文件和 $config['base_url] = xxxxxx; 的条目

标签: codeigniter pagination


【解决方案1】:

我相信你知道,URI 不是这样工作的。查询字符串必须在末尾(或在# 哈希片段之前)。这个查询字符串:

questions/search?content=foobar/4

表示$_GET['content'] = 'foobar/4';

您需要将分页 URL 更改为以下内容:

questions/search/4/?content=foobar

4后面的/也是可选的。

您必须从分页的$config['base_url'] 中删除查询字符串,而是将其附加到视图中的链接,这很遗憾涉及破解分页类...

或者试试这个未记录的功能:

// After loading the pagination class
$this->pagination->suffix = '{YOUR QUERY STRING}';

或者更好的是,只需在加载类之前将$config['suffix'] = '{YOUR QUERY STRING}'; 添加到您的配置中。这应该会自动将查询字符串添加到每个链接的href

还需要对您的配置区域进行一些调整:

// Make sure to encode these
// $config['first_link'] = '<<';
$config['first_link'] = '&lt;&lt;';
// $config['last_link'] = '>>';
$config['last_link'] = '&gt;&gt;';

$offset = $this->uri->segment(3);
// Default URI segment is 3, and it's what you use above. Remove this.
// $config['uri_segment'] = 2;

// This should be FALSE (default). Remove it.
// $config['page_query_string'] = TRUE;

// This should be FALSE (default) if you're
// using the URI segment as your OFFSET. Remove it.
// $config['use_page_numbers'] = TRUE;

// Add your query string
$config['suffix'] = '?content='.$content;
$config['base_url'] = base_url().'questions/search/';
$this->pagination->initialize($config);

【讨论】:

  • 类似?content=foobar。无论您想在页码后的 href 中出现什么。
  • 我做了这样的事情:$config['suffix'] = '?content='.$content; 但是当我 create_links() 输出是空字符串。
  • 您还记得echo吗?...编辑您的问题并将您的完整代码添加到您的帖子中,我会查看它。
  • 完成。我粘贴在 pastebin.com =)
  • 我没有看到你在哪里显示链接,应该有一个视图文件,你正在使用echo $pagination;。删除 suffix 部分是否会使链接再次显示?您还需要在配置中删除 page_query_string。还要确保对$config['first_link'] = '&lt;&lt;'; 中的括号进行 HTML 编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2014-12-14
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多