Hex 发表于 2010-5-11 13:43:28

我觉得搜索这种东西不要用 POST,这个你可以看看 google,google 不是用 POST,而是用的 GET。
再说另一个传递查询条件的问题,这个问题和 CI、分页类关系不大,以前用纯PHP分页难道不用在分页链接上传递条件吗?在 CI 也一样,你需要在分页类的 base_url 中自己拼接参数。
分页的条件参数应该(或者叫做必须)采用 GET 传参。

hojd 发表于 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();

dovechomi 发表于 2011-3-23 19:55:29

想看看一下,万分感谢

vissul 发表于 2011-3-25 18:13:22

.....自己写分页还用ci干嘛啊

xiaomai 发表于 2011-5-21 14:14:39

有解决这个问题的吗

7009487 发表于 2011-5-22 20:19:13

通用分页处理(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;       
                        //把中间的Page去掉,加到结尾
                        $url_string=str_replace($match_page,'',$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("{({1,2}-+)/([^/]+)}i",$url_string,$url_array);
                if(!is_array($url_array)) return;
                //参数容器
                $url_array_param=$url_array;
                //值容器
                $url_array_value=$url_array;               
                //创建一个空值
                $_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部分)

//搜索赋值通用
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 = /({1,2}-+)\/([^/]+)/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.split('/');
                        //赋值给input
                        $("#"+_array).val(_array);
                }
        }                                                               
}       

//切换还原
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,然后跳转。

{:1_1:}

longjianghu 发表于 2011-5-22 21:11:22

个人觉得搜索还是用get好,post用起来不方便我的做法是把搜索条件存到网页参数里,然后分析~

xushre 发表于 2011-5-22 22:03:01

null

用session或者cookie,甚至是缓存都可以解决,主要看哪种方法更适合你
页: 1 [2]
查看完整版本: 求助:分页类按条件查询数据库案例