我处理页面搜索条件的时候很复杂 大家都用什么好方法哦
页面有的时候需要有五六个搜索条件加翻页,我现在处理这个很麻烦,看看大家都怎么弄的.比如一个搜索条件叫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方法就算了.
谢谢大家了 搜索应该按照 Google 的方法做成 GET 传参。 回复 2# Hex
感谢..那我去试试这种方法吧,我现在还想能不能把数据库操作那块简化一下,如果传过去这个值了就搜索,没传就不搜, 本帖最后由 ywqbestever 于 2010-3-3 13:18 编辑
传过来的按你的规则判断要不要加入where条件里去啊,这个自己写程序控制啊,关于搜索用get最好了,方便保持参数,翻页的时候很有用
如果你使用分页类的话,要自己改那个类吧,我做的时候效果如下
部分代码:
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来的参数,所以我分开获取了 回复 4# ywqbestever
感谢.. 如果有几个不同页面,里面的参数名称和个数不一样的是不是也要分开写 取GET变量应该用 $this->input->get() 方法比较好吧 回复 6# qq123
$this->input->get() 这个和$_get的区别就是前者帮你检查是否存在那个变量了,即省了你写isset了吧
页:
[1]