* @since 1.0 */ class FecadminbaseBlock{ public $_param = []; # 默认值 public $_pageNum = 1; public $_numPerPage = 50; # 主键 默认为id public $_paramKey = 'id'; # 默认 排序字段 和 排序方式 public $_sortDirection = 'desc'; public $_orderField ; # 如果不设置,会默认使用主键排序; # 各种url public $_currentParamUrl; public $_currentUrlKey; public $_addUrl; public $_editUrl; public $_deleteUrl; # 当前的数据对象 public $_obj ; public function __construct(){ $this->initParam(); } # 初始化param public function initParam(){ $param = \fec\helpers\CRequest::param(); if(empty($param['pageNum'])) $param['pageNum'] = $this->_pageNum ; if(empty($param['numPerPage'])) $param['numPerPage'] = $this->_numPerPage ; if(empty($param['orderField'])) $param['orderField'] = $this->_orderField ; if(empty($param['orderField'])) $param['orderField'] = $this->_paramKey ; if(empty($param['orderDirection'])) $param['orderDirection'] = $this->_sortDirection ; if(is_array($param) && !empty($param)){ $this->_param = array_merge($this->_param, $param) ; } $this->_currentUrl = CUrl::getCurrentUrlNoParam(); $this->_currentParamUrl = CUrl::getCurrentUrl(); $this->_addUrl = $this->_addUrl ? $this->_addUrl : $this->_currentUrl; $this->_editUrl = $this->_editUrl ? $this->_editUrl : $this->_currentUrl; $this->_deleteUrl = $this->_deleteUrl ? $this->_deleteUrl : $this->_currentUrl; } # 顶部隐藏域 public function getPagerForm(){ $str = ""; if(is_array($this->_param) && !empty($this->_param)){ foreach($this->_param as $k=>$v){ if($k != "_csrf"){ $str .=''; } } } return $str; } # 表单 搜索部分html生成 1 public function getSearchBarHtml($data){ //echo 1;exit; if(is_array($data) && !empty($data)){ $r_data = []; $i = 0; foreach($data as $k=>$d){ $type11 = $d['type']; if($type11 == 'select'){ $value = $d['value']; $name = $d['name']; $title = $d['title']; $d['value'] = $this->getSearchBarSelectHtml($name,$value,$title); }else if($type11 == 'chosen_select'){ $i++; $value = $d['value']; $name = $d['name']; $title = $d['title']; $d['value'] = $this->getSearchBarChosenSelectHtml($name,$value,$title,$i); } $r_data[$k] = $d; } } $searchBar = $this->getDbSearchBarHtml($r_data); return $searchBar; } # 表单 搜索部分html生成 2 # select的name,option数据,option value为空的显示值,默认选中的值 public function getSearchBarSelectHtml($name,$data,$null_value){ if(is_array($data) && !empty($data)){ $alibaba_account_select = ''; return $alibaba_account_select; }else{ return ''; } } # 表单 搜索部分html生成 2 # select的name,option数据,option value为空的显示值,默认选中的值 public function getSearchBarChosenSelectHtml($name,$data,$title,$id=1){ if(is_array($data) && !empty($data)){ $alibaba_account_select .= ' '; $alibaba_account_select .= ''; return $alibaba_account_select; }else{ return ''; } } public function customSearchBarHtml(){ return ''; } # 表单 搜索部分html生成 3 public function getDbSearchBarHtml($data){ $searchBar = ''; if(!empty($data)){ $searchBar .= ''; $searchBar .=''; foreach($data as $d){ $type = $d['type']; $name = $d['name']; $title = $d['title']; $value = $d['value']; if($d['type'] == 'select'){ $searchBar .= ''; }else if($d['type'] == 'chosen_select'){ $searchBar .= ''; }else if($d['type'] == 'inputtext'){ $searchBar .= ''; }else if($d['type'] == 'inputdate'){ $searchBar .= ''; }else if($d['type'] == 'inputdatefilter'){ $value = $d['value']; if(is_array($value)){ foreach($value as $t=>$title){ $searchBar .= ''; } } }else if($d['type'] == 'inputfilter'){ $value = $d['value']; if(is_array($value)){ foreach($value as $t=>$title){ $searchBar .= ''; } } } } $customSearchHtml = $this->customSearchBarHtml(); $searchBar .= $customSearchHtml; $searchBar .= '
'.$value.' '.$value.' '.$title.': '.$title.' '.$title.' '.$title.'
'; } return $searchBar; } # 搜索部分 public function getSearchBar(){ $data = $this->getSearchArr(); return $this->getSearchBarHtml($data); } # 搜索 生成where public function initDateWhere(&$query,$searchArr){ foreach($searchArr as $field){ $type = $field['type']; $name = $field['name']; $columns_type = isset($field['columns_type']) ? $field['columns_type'] : ''; if($this->_param[$name] || $this->_param[$name.'_get'] || $this->_param[$name.'_lt']){ if($type == 'inputtext' || $type == 'select' || $type == 'chosen_select'){ if($columns_type == 'string'){ if($query->where){ $query->andWhere(['like', $name, $this->_param[$name]]); }else{ $query->where(['like', $name, $this->_param[$name]]); //echo $name.$this->_param[$name];exit; } }else if($columns_type == 'int'){ if($query->where){ $query->andWhere([$name => (int)$this->_param[$name]]); }else{ $query->where([$name => (int)$this->_param[$name]]); } }else if($columns_type == 'float'){ if($query->where){ $query->andWhere([$name => (float)$this->_param[$name]]); }else{ $query->where([$name => (float)$this->_param[$name]]); } }else if($columns_type == 'date'){ if($query->where){ $query->andWhere([$name => $this->_param[$name]]); }else{ $query->where([$name => $this->_param[$name]]); } }else{ if($query->where){ $query->andWhere([$name => $this->_param[$name]]); }else{ $query->where([$name => $this->_param[$name]]); } } }else if($type == 'inputdatefilter'){ $_gte = $this->_param[$name.'_gte']; $_lt = $this->_param[$name.'_lt']; if($columns_type == 'float'){ $_gte = strtotime($_gte); $_lt = strtotime($_lt); } if($query->where){ if($_gte){ $query->andWhere(['>=', $name, $_gte]); } if($_lt){ $query->andWhere(['<', $name, $_lt]); } }else{ if($_gte){ $query->where(['>=', $name, $_gte]); } if($_lt){ $query->andWhere(['<', $name, $_lt]); } } //var_dump($query->where); }else if($type == 'inputfilter'){ $_gte = $this->_param[$name.'_gte']; $_lt = $this->_param[$name.'_lt']; if($columns_type == 'int'){ $_gte = (int)$_gte; $_lt = (int)$_lt; }else if($columns_type == 'float'){ $_gte = (float)$_gte; $_lt = (float)$_lt; } if($query->where){ if($_gte){ $query->andWhere(['>=', $name, $_gte]); } if($_lt){ $query->andWhere(['<', $name, $_lt]); } }else{ if($_gte){ $query->where(['>=', $name, $_gte]); } if($_lt){ $query->andWhere(['<', $name, $_lt]); } } }else{ if($query->where){ $query->andWhere([$name => $this->_param[$name]]); }else{ $query->where([$name => $this->_param[$name]]); } } } } // var_dump($query->where);exit; } # 编辑部分 public function getEditBar(){ if(!strstr($this->_currentParamUrl,"?")){ $csvUrl = $this->_currentParamUrl."?type=export"; }else{ $csvUrl = $this->_currentParamUrl."&type=export"; } return ''; } public function getToolBar($numCount,$pageNum,$numPerPage){ return '
显示 条,共'.$numCount.'条
'; } # 得到表格的头部 public function getTableThead(){ $table_th_bar = $this->getTableFieldArr(); return $this->getTableTheadHtml($table_th_bar); } # table 表 标题 1 public function getTableTheadHtml($table_th_bar){ $table_th_bar = $this->getTableTheadArrInit($table_th_bar); $this->_param['orderField'] = $this->_param['orderField'] ? $this->_param['orderField'] : $this->_paramKey; $this->_param['orderDirection'] = $this->_param['orderDirection'] ? $this->_param['orderDirection'] : $this->_defaultDirection; foreach($table_th_bar as $k => $field){ if($field['orderField'] == $this->_param['orderField']){ $table_th_bar[$k]['class'] = $this->_param['orderDirection']; } } $str = ''; $str .= ''; foreach($table_th_bar as $b){ $width = $b['width']; $label = $b['label']; $orderField = $b['orderField']; $class = isset($b['class']) ? $b['class'] : ''; $align = isset($b['align']) ? 'align="'.$b['align'].'"' : ''; $str .= ''.$label.''; } $str .= '编辑'; $str .= ''; return $str; } # table 表 标题 2 public function getTableTheadArrInit($table_columns){ foreach($table_columns as $field){ $d = [ 'orderField' => $field['orderField'], // 'label' => $this->_obj->getAttributeLabel($field['orderField']) , 'width' => $field['width'], 'align' => $field['align'], ]; $d['label'] = $field['label'] ? $field['label'] : ''; if(empty($d['label'] )){ if($this->_obj){ $d['label'] = $this->_obj->getAttributeLabel($field['orderField']) ; }else{ $d['label'] = $field['orderField']; } } $table_th_bar[] = $d; } return $table_th_bar; } # 得到表格的内容部分 public function getTableTbody(){ $obj = $this->_obj; $searchArr = $this->getSearchArr(); $query = $obj::find(); if(is_array($searchArr) && !empty($searchArr)){ $this->initDateWhere($query,$searchArr); } $this->_param['numCount'] = $query->count(); $query->limit = $this->_param['numPerPage']; # 偏离值 $query->offset = ($this->_param['pageNum'] -1)*$this->_param['numPerPage'] ; $query->orderBy([$this->_param['orderField']=> (($this->_param['orderDirection'] == 'desc') ? SORT_DESC : SORT_ASC)]); $data = $query->all(); return $this->getTableTbodyHtml($data); } # table 内容部分 public function getTableTbodyHtml($data){ $fileds = $this->getTableFieldArr(); $str .= ''; $csrfString = \fec\helpers\CRequest::getCsrfString(); foreach($data as $one){ $str .= ''; $str .= ''; foreach($fileds as $field){ $orderField = $field['orderField']; $display = $field['display']; $val = $one[$orderField]; if($val){ if(isset($field['display']) && !empty($field['display'])){ $display = $field['display']; $val = $display[$val] ? $display[$val] : $val; } if(isset($field['convert']) && !empty($field['convert'])){ $convert = $field['convert']; foreach($convert as $origin =>$to){ if(strstr($origin,'mongodate')){ if(isset($val->sec)){ $timestramp = $val->sec; if($to == 'date'){ $val = date('Y-m-d',$timestramp); }else if($to == 'datetime'){ $val = date('Y-m-d H:i:s',$timestramp); }else if($to == 'int'){ $val = $timestramp; } } }else if(strstr($origin,'date')){ if($to == 'date'){ $val = date('Y-m-d',strtotime($val)); }else if($to == 'datetime'){ $val = date('Y-m-d H:i:s',strtotime($val)); }else if($to == 'int'){ $val = strtotime($val); } }else if($origin == 'int'){ if($to == 'date'){ $val = date('Y-m-d',$val); }else if($to == 'datetime'){ $val = date('Y-m-d H:i:s',$val); }else if($to == 'int'){ $val = $val; } }else if($origin == 'string'){ if($to == 'img'){ $t_width = isset($field['img_width']) ? $field['img_width'] : '100'; $t_height = isset($field['img_height']) ? $field['img_height'] : '100'; $val = '';; } } } } } $str .= ''.$val.''; } $str .= ' 编辑 删除 '; $str .= ''; } return $str ; } /* # 定义表格显示部分的配置 public function getTableFieldArr(){ $table_th_bar = [ [ 'orderField' => '_id', 'label' => 'ID', 'width' => '40', 'align' => 'center', ], [ 'orderField' => 'keyword', 'label' => '关键字', 'width' => '110', 'align' => 'left', ], # select 选择类型 display 对应的是一个数组,通过key 对应值 # 一般是状态,譬如 1 对应激活,2对应关闭等。 [ 'orderField' => 'unit', 'label' => '站点', 'width' => '110', 'align' => 'left', 'display' => CConfig::param("channel_type"), ], # 图片类型: [ 'orderField' => 'img', 'label' => '图片', 'width' => '110', 'align' => 'left', 'convert' => ['string' => 'img'], 'img_width' => '100', # 图片宽度 'img_height' => '100', # 图片高度 ], [ 'orderField' => 'created_at', 'label' => '创建时间', 'width' => '190', 'align' => 'center', //'convert' => ['datetime' =>'date'], ], # 把 datetime(Y-m-d H:i:s) 转化成datetime(Y-m-d) [ 'orderField' => 'updated_at', 'label' => '更新时间', 'width' => '190', 'align' => 'center', 'convert' => ['datetime' =>'date'], # int date datetime 显示的转换 ], [ 'orderField' => 'updated_at', 'label' => '更新时间', 'width' => '190', 'align' => 'center', 'convert' => ['datetime' =>'int'], # 时间戳转换成datetime格式 ], ]; return $table_th_bar ; } */ }