CodeIgniter:如何使用干净的URL添加多个参数?

时间:2013-04-07 18:23:37

标签: codeigniter

我有以下设置的过滤器选项:

选项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结构始终按以下顺序排列 - 无论如何选择这些选项:

  1. 域名/衬衫/页面/ 1 / sortby / Z-A
  2. 域名/衬衫/页面/ 1 /页/ 50 /
  3. 域名/衬衫/页/ 50 / sortby / Z-A
  4. 域名/衬衫/页面/ 1 /页/ 50 / sortby / Z-A
  5. 我如何实现这一目标?

    我的控制器代码 - 索引()

                $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);
    }
    

1 个答案:

答案 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;)

Filter, sort and paginate in Codeigniter