用户
 找回密码
 入住 CI 中国社区
搜索
12
返回列表 发新帖
楼主: DZPGirl
收起左侧

[已解决] 求助:分页类按条件查询数据库案例

  [复制链接]
发表于 2010-5-11 13:43:28 | 显示全部楼层
我觉得搜索这种东西不要用 POST,这个你可以看看 google,google 不是用 POST,而是用的 GET。
再说另一个传递查询条件的问题,这个问题和 CI、分页类关系不大,以前用纯PHP分页难道不用在分页链接上传递条件吗?在 CI 也一样,你需要在分页类的 base_url 中自己拼接参数。
分页的条件参数应该(或者叫做必须)采用 GET 传参。
发表于 2010-5-12 15:22:47 | 显示全部楼层
http://www.21andy.com/blog/20071219/726.html        这个GET分页类蛮好用的
把它按规则放在libraries中
用的时候就这么下就行了
$this->load->library('page',array('total'=>$total,'perpage'=>$perpage));
$data['pagelinks']=$this->page->show();
发表于 2011-3-23 19:55:29 | 显示全部楼层
想看看一下,万分感谢
发表于 2011-3-25 18:13:22 | 显示全部楼层
.....自己写分页还用ci干嘛啊
发表于 2011-5-21 14:14:39 | 显示全部楼层
有解决这个问题的吗
发表于 2011-5-22 20:19:13 | 显示全部楼层
通用分页处理(PHP部分)

PHP复制代码
 
/**
 * Lists_model  分页处理模型
 *
 * @package fang
 * @author sha
 * @copyright 2011
 * @version 1.0
 * @access public
 */

class Lists_model extends CI_Model
{      
 
        /**
         * 构造函数
         * @access public
         * @return void
         */

        public function __construct(){
                parent::__construct();
        }
       
        /**
         * 根据url获取当前页码
         * @access public
         * @return array
         */

        public function get_page_array(){
                $url_string=urldecode($this->uri->uri_string());
                //正则匹配
                preg_match("{(/page)/([^/]*)}",$url_string,$match_page);
                //判断当前页码
                if($match_page){
                        //有分页标记,且当前已经处于分页状态时候
                        $cur_page=$match_page[2];      
                        //把中间的Page去掉,加到结尾
                        $url_string=str_replace($match_page[0],'',$url_string);                        
                }else{                 
                        $cur_page=0;   
                        $url_string=str_replace('/page','',$url_string);                       
                }
                $url_string=site_url().$url_string."/page/";
                $_pagination['cur_page']=$cur_page;
                $_pagination['base_url']=$url_string;          
                return $_pagination;
        }
       
        /**
         * 根据url获取搜索数组, 这个方法执行之后,就可以知道URL里面用户想搜什么
         * @access public
         * @return array
         */

        public function get_url_array(){               
                //获取浏览器url
                $url_string=urldecode($this->uri->uri_string());
                //正则匹配 ae-xxxx 格式
                preg_match_all("{([a|o][eoligt]{1,2}-[a-z_.]+)/([^/]+)}i",$url_string,$url_array);
                if(!is_array($url_array)) return;
                //参数容器
                $url_array_param=$url_array[1];
                //值容器
                $url_array_value=$url_array[2];        
                //创建一个空值
                $_array = array();
                foreach($url_array_value as $key=>$value){
                        //空值跳出循环
                        if(is_null($value)){continue;}
                        //返回值
                        $_array[$url_array_param[$key]]=$value;
                }
                return $_array;
        }
       
        /**
         * 根据获取到URL里的数组,和预定义允许的允许搜索的数组比较,执行完SQL的where部分
         * @access public
         * @param $url_array 浏览器搜索数组
         * @param $allow_array 允许搜索数组
         * @return string
        */

        public function get_sql($url_array,$allow_array){
                //如果程序不让搜或者url没有搜索请求,则直接返回             
                if (!is_array($allow_array) || !is_array($url_array)){return ;}
                //把请求带入限制,一个一个比对,看允许不允许搜索
                $sql='';
                foreach($url_array as $key=>$value){                   
                        //如果搜索请求空则跳出
                        if(is_null($value)){break;}                    
                        //把key的 ae-username 序列化成 ["left"]=ae  ["right"]=username
                        list($key_left,$key_right)=explode('-',$key);                  
                        //如果搜索请求不在允许范围内,则跳出
                        if(!in_array($key_right,$allow_array)){continue;}
                        //where 后面的SQL   
                                       
                        switch($key_left){                             
                                case 'ae':
                                        $sql.='$this->db->where("'.$key_right.'","'.$value.'");';
                                        break;
                                case 'oe':
                                        $sql.='$this->db->or_where("'.$key_right.'","'.$value.'");';
                                        break;
                                case 'al':
                                        //echo '有一条符合';
                                        $sql.='$this->db->like("'.$key_right.'","'.$value.'");';
                                        break;
                                case 'ol':
                                        $sql.='$this->db->or_like("'.$key_right.'","'.$value.'");';
                                        break;
                                case 'ai':
                                        $value=explode(",",$value);
                                        $sql.='$this->db->where_in("'.$key_right.'","'.$value.'");';
                                        break;
                                case 'agt':
                                        $sql.='$this->db->where("'.$key_right.' >","'.$value.'");';
                                        break;
                                case 'alt':
                                        $sql.='$this->db->where("'.$key_right.' <","'.$value.'");';
                                        break;
                                case 'oo':
                                        $sql.='$this->db->order_by("'.$key_right.'","'.$value.'");';
                                        break;
                        }                      
                }
                return $sql;           
        }
       
        /**
         * 分页方法
         * @access public
         * @param $total_rows 总记录数
         * @param $per_page 每页记录数
         * @param $cur_page 当前页码
         * @param $base_url 基础url
         * @return string
         */

        public function get_pagination($total_rows,$per_page,$cur_page,$base_url){
                //总页码读取失败,则返回
                if (!$total_rows OR !$per_page){return ;}
                //分页
                $this->load->library('pagination');
                $config['base_url'] = $base_url;
                $config['total_rows'] =$total_rows;
                $config['per_page'] =$per_page;
                $config['cur_page'] =$cur_page;
                $this->pagination->initialize($config);
                //分页完成
                //var_dump($config);
                return $this->pagination->create_links();
        }
               
        /**
         * 分页
         * @access public
         * @param $table_name 表名称
         * @param $per_page 每页记录数
         * @param $allow_array 允许搜索字段
         * @param $sql_pre_where 预处理where条件
         * @param $sql_pre_order 预处理order条件
         * @return array
         */

        public function get_table($table_name,$per_page=20,$allow_array=null,$sql_pre_where=null,$sql_pre_other=null,$order_by=null){
                //得到常用数值
                $url_array=$this->get_url_array();
                $page_array=$this->get_page_array();
                $sql_url_where=$this->get_sql($url_array,$allow_array);
                //分页
                if ($sql_pre_other){eval($sql_pre_other);}     
                if ($sql_pre_where){$this->db->where($sql_pre_where);}                 
                if ($sql_url_where){eval($sql_url_where);}
                $total_rows=$this->db->count_all_results($table_name);
                $total_debug_sql=$this->db->last_query();
                $pagination=$this->get_pagination($total_rows,$per_page,$page_array['cur_page'],$page_array['base_url']);
                //取值
                if ($sql_pre_other){eval($sql_pre_other);}     
                if ($sql_pre_where){$this->db->where($sql_pre_where);} 
                if ($sql_url_where){eval($sql_url_where);}
                if ($order_by){$this->db->order_by($order_by);}
                $this->db->limit($per_page,$page_array['cur_page']);
                $data_items=$this->db->get($table_name);
                $data_debug_sql=$this->db->last_query();
                //传回
                $_data=array(
                        'data_items'=>$data_items,
                        'pagination'=>$pagination,
                        'url_array'=>$url_array,
                        'total_rows'=>$total_rows
                );
                return $_data; 
        }
 
}
 
复制代码



通用分页处理(JS部分)
JS复制代码
 
//搜索赋值  通用
function search_put(obj,value){
        $("#"+obj).val(value); 
        search_go();
}
 
//搜索赋值  范围
function search_put_scope(obj,agt_value,alt_value){
        $("#agt-"+obj).val(agt_value);
        $("#alt-"+obj).val(alt_value);
        search_go();
}
 
 //搜索赋值  排序
function search_put_order(obj){
        var before_order=$("#"+obj).val();
        var after_order="";                                                            
        if (before_order=="asc"){
                after_order="desc";
        }else{
                after_order="asc";
        }
        $(".search_order").val("");
        $("#"+obj).val(after_order);                                                           
        search_go();
}
 
//搜索还原  通用
function search_restore(){
        var url=decodeURI(window.location.pathname);
        var preg_match = /([a|o][eoligt]{1,2}-[a-z_.]+)\/([^/]+)/gi;
        var array_url = url.match(preg_match);         
        if (array_url){
                var _html="";
                for (var i=0;i < array_url.length ; i++){
                        _array=array_url[i].split('/');
                        //赋值给input
                        $("#"+_array[0]).val(_array[1]);
                }
        }                                                              
}      
 
//切换还原
function search_restore_agent(){
        var agent=$("#ae-agent").val();                                                        
        if(agent=='1'){
                $(".agent-yes").addClass("selected");
        }else if (agent=='0'){
                $(".agent-no").addClass("selected");
        }                                                              
        else{
                $(".agent-unknown").addClass("selected");
        }                                                              
}
 
 
//排序还原
function search_restore_order(){
        var _obj=$(".search_order");   
        _obj.each(function() {  
                if (this.value=="asc"){
                        $("#a-"+this.id).addClass("asc");
                }
                if (this.value=="desc"){
                        $("#a-"+this.id).addClass("desc");                                                                             
                }                                                                      
        });                                                            
}
 
//搜索跳转
function search_redirect(_url,_obj){   
        _obj.each(function() {  
        if (this.value){
                        _url+="/"+this.id+"/"+this.value
                }                      
        });
        //alert(_url);
        location.href= encodeURI(_url);
}
 
复制代码




根据input控件自动生成url,然后跳转。


发表于 2011-5-22 21:11:22 | 显示全部楼层
个人觉得搜索还是用get好,post用起来不方便我的做法是把搜索条件存到网页参数里,然后分析~
发表于 2011-5-22 22:03:01 | 显示全部楼层

null

用session或者cookie,甚至是缓存都可以解决,主要看哪种方法更适合你

本版积分规则