|
发表于 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,然后跳转。
|
|