用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3870|回复: 6
收起左侧

[讨论/交流] 我处理页面搜索条件的时候很复杂 大家都用什么好方法哦

[复制链接]
发表于 2010-3-3 02:28:29 | 显示全部楼层 |阅读模式
页面有的时候需要有五六个搜索条件加翻页,我现在处理这个很麻烦,看看大家都怎么弄的.
比如一个搜索条件叫name,是第5个参数
我会创建一个临时变量 叫 enname 用处在后面解释
在view里面 用一个表单提交到页面,用enname实现回调
在controllers里面,
$data ['name'] = $this->input->post ( 'name' ) ? $this->input->post ( 'name' ) : $this->uri->segment ( 5, 0 );
$data ['enname'] = $data ['name']?$data ['name']:0;
$config ['base_url'] = '/xxxx/xxx/' . $data ['enword'] .'/';
这个地方引入enname  就是为了当用户没有搜索name这个字段的时候,让page的url里面的那一部分显示为0,如果是空的话会出错.
然后把这个值传给models
在models里面 有两部分
一个是统计会返回多少条结果的,用于分页的$config ['total_rows'] 里面用的
另一个就是返回结果集用的,
两个都是有这个条件
if ($username)        $this->db->like ( 'username', $username );
这个流程就基本结束了.
我感觉很麻烦,特别是有七八个参数的时候.不知道有没有更好的方法.如果是用get方法就算了.
谢谢大家了
发表于 2010-3-3 10:05:05 | 显示全部楼层
搜索应该按照 Google 的方法做成 GET 传参。
 楼主| 发表于 2010-3-3 11:05:34 | 显示全部楼层
回复 2# Hex


    感谢..  那我去试试这种方法吧,我现在还想能不能把数据库操作那块简化一下,如果传过去这个值了就搜索,没传就不搜,
发表于 2010-3-3 13:08:36 | 显示全部楼层
本帖最后由 ywqbestever 于 2010-3-3 13:18 编辑

传过来的按你的规则判断要不要加入where条件里去啊,这个自己写程序控制啊,关于搜索用get最好了,方便保持参数,翻页的时候很有用
如果你使用分页类的话,要自己改那个类吧,我做的时候效果如下
QQ截图未命名.jpg
部分代码:
PHP复制代码
 
class Article extends Controller{
  var $q = "";
  var $v = "-1";
  var $mode = "normal";
  function __construct(){
   parent::Controller();
   $this->authorization->check_auth();
   $this->load->model('article_model');
  }
function pagination($condition=""){
                        $this->load->library('pagination');
                        $config['base_url'] = site_url('admin/article/view')."?q=$this->q&v=$this->v&mode=$this->mode";
                        $config['total_rows'] = $this->article_model->get_num_rows($condition);
                        $config['per_page'] = '18';
                        $config['uri_segment'] = 4;
                        $this->pagination->initialize($config);
                        return $this->pagination->create_links();
                }
function view(){
                        $this->authorization->check_permission($this->uri->segment(2),'1');
                        $data['title'] = "view article";
                        $where = "article.is_del = 0 ";
                        parse_str($_SERVER['QUERY_STRING'], $_GET);
                        if(isset($_GET['mode']))
                                $this->mode = $_GET['mode'];
                        if(isset($_GET['q']))
                                $this->q = $_GET['q'];
                        if(isset($_GET['v']))
                                $this->v = $_GET['v'];
                        if($this->mode!="normal")
                                $where = "article.is_del = 1 ";
                        if($this->q!="")
                                $where .= " and article.class_id = $this->q";
                        if($this->v!="-1")
                                $where .= " and article.is_verified = $this->v";
                        $data['articles'] = $this->article_model->get_articles(18,$this->uri->segment(4,0),$where);                
                        $data['links'] = $this->pagination($where);
                        $data['action'] = "view";
                        $data['category'] = $this->get_category();
                        $data['q'] = $this->q;
                        $data['v'] = $this->v;
                        $data['mode'] = $this->mode;
                        $this->load->view('admin/article',$data);
                }
}
 
复制代码

因为我要在视图里用get来的参数,所以我分开获取了
 楼主| 发表于 2010-3-4 00:26:19 | 显示全部楼层
回复 4# ywqbestever


    感谢.. 如果有几个不同页面,里面的参数名称和个数不一样的是不是也要分开写
发表于 2010-3-10 09:27:47 | 显示全部楼层
取GET变量应该用 $this->input->get() 方法比较好吧
发表于 2010-3-11 10:52:24 | 显示全部楼层
回复 6# qq123


    $this->input->get() 这个和$_get的区别就是前者帮你检查是否存在那个变量了,即省了你写isset了吧

本版积分规则