我有以下设置的过滤器选项:
选项1> 显示:每页20个或每页50个或每页所有 - 这是一个下拉列表(默认每页10个)
选项2> 排序方式:从低到高或从高到低或字母A-Z或字母Z-A(默认A-Z)
选项3> 分页已完成。
我的目标网页是:域名/衬衫
我已完成分页,我的网址如下: domain-name / shirts / page / 1
我想要实现的网址: domain-name / shirts / page / 1 / perpage / 50 / sortby / Z-A
但在现实世界中,最终用户以不同的方式选择此选项:
场景1: 示例:按第一个排序,然后按第二个页面排序,网址示例: domain-name / shirts / perpage / 50 / page / 1 *
(OR)
场景2: 示例:按第一个排序,然后按第二个页面排序,网址示例: domain-name / shirts / perpage / 50 / page / 1
(OR)
场景3: 示例:按第一个排序,然后按第二个页面排序,网址示例:域名/汗衫/排序/ Z-A / perpage / 50 / page / 1
我希望url结构始终按以下顺序排列 - 无论如何选择这些选项:
我如何实现这一目标?
我的控制器代码 - 索引()
$all_shirts = $this->shirts_model->get_shirts_count();
$total_rows = $all_shirts;
$config = array();
$config['base_url'] = base_url()."shirts";
$config['per_page'] = 5;
$config['total_rows'] = $total_rows;
$config['use_page_numbers'] = false;
$config['page_query_string'] = FALSE;
$config['first_url'] = '1';
$config['first_link'] = 'First';
$config['first_url'] = base_url().'shirts';
$config['last_link'] = FALSE;
$config['next_link'] = 'Next >';
$config['next_tag_open'] = ' <span class="next">';
$config['next_tag_close'] = '</span>';
$config['prefix'] = '/page/';
$config['prev_tag_open'] = '<span class="prev">';
$config['prev_tag_close'] = '</span> ';
$config['cur_tag_open'] = ' <b>';
$config['cur_tag_close'] = '</b>';
if($this->uri->segment(3) < '3')
{
$config['prev_link'] = FALSE;
}
else
{
$config['prev_link'] = '< Previous';
}
$this->pagination->initialize($config);
$data = array();
$data['Shirts_pagination'] = $this->shirts_model->get_shirts_limit($config['per_page'],$this->uri->segment(3,0),'');
$data["links"] = $this->pagination->create_links();
$data['show_all'] = 0;
$this->load->view('shirts_view.php', $data);
}
答案 0 :(得分:0)
在您的所有示例中,您必须从网址中获取$this->uri->segment()
以进行过滤。
我真的不会使用这么多url params,我认为更清洁的网址对你来说也很棒。
对于任何其他过滤器参数,我使用表格中的会话和发布数据。
所以我的网址看起来总是有2个或最多3个参数,例如:
users/list/23
其中23 = pagination offset /*it could be also page number if you want*/
另外我有时会使用类别uri段,例如:
users/list/woman/23
但我总是试图让网址保持简洁和清晰,将所有额外的过滤器参数放入会话中,这对网址是隐藏的。
通常,让我们举例,页面是一个搜索页面,列出用户,我为搜索用户创建一个表单:
- input text for username searching
-- 1 button for ordering newest users
-- 1 button for ordering oldest users
--- 1 input type submit for submitting all the search form
现在,一旦您在搜索表单中进行汇总,您只需检查是否$this->input->post('ordering'); -> create session value for ordering
,因此下次加载上一页或下一页时,订购的价值与您设置的相同。
我需要大约100K行作为一个例子,你可以反正google如何在Codeigniter中搜索和分页并过滤params。我相信你会得到一些好的教程;)
这里还有一些资源,只是google;)