_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / ======`-.____`-.___\_____/___.-`____.-'====== `=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永无BUG */ namespace Admin\Model; use Think\Model; class ModelModel extends Model{ const modelTempPath = 'Data/modelTemp/'; //模型表单模板路径 const modelTempMemberPath = 'Data/modelTempMember/'; //会员模型表单模板路径 //自动验证 //array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) protected $_validate = array( array('name','require','请填写模型名称!',1), array('name', '', '该模型名称已经存在!', 0, 'unique', 1), array('table_id','require','缺少table_id!',1,0,self::MODEL_INSERT), array('table_id','check_table','数据表不存在!',1,"callback",self::MODEL_INSERT), ); //自动完成 protected $_auto = array ( array('table_name','get_table_name',self::MODEL_INSERT,'callback'), //表名 array('formtemp','get_formtemp',3,'callback'), //表单的form内容 ); //自动验证-table_id对应的信息是否存在 public function check_table($table_id){ if(M("table")->find($table_id)){ return true; }else{ return false; } } //自动完成-获取表名 public function get_table_name(){ $table_id=I("post.table_id",0,"int"); return M("table")->where(array("table_id"=>$table_id))->getField("table_name"); } //自动完成-把数组转换为字符串便于存到数据里 public function arr2string($arr){ $str= implode(",", $arr); if($str){ $str=",".$str.","; } return $str; } //自动完成-get_formtemp //检查SQL文件是否存在! public function get_formtemp() { $field_name=I("post.field_name"); $field=I("post.field"); $str=""; foreach($field as $key=>$v){ $str.=$field_name[$key]."".$field[$key]."\r\n"; } return trim($str); } //保存模型 增加和修改都调用此方法 public function data_save(){ $data=$this->create(); $data["is_enter"]=$this->arr2string(I("post.is_enter")); $data["is_contribute"]=$this->arr2string(I("post.is_contribute")); $data["must_enter"]=$this->arr2string(I("post.must_enter")); $data["is_list"]=$this->arr2string(I("post.is_list")); $data["is_search"]=$this->arr2string(I("post.is_search")); $data["is_sort"]=$this->arr2string(I("post.is_sort")); //如果在新增模型的情况下设置栏目默认字段 if(!$data["modelid"]){ $data['cat_formtemp']="栏目名称name 缩略图thumb 每页显示lencord 是否为单面模式is_page 列表模板listtemp 内容模板viewtemp 状态status SEO标题pagetitle 关键词keywords 描述description "; $data['cat_is_enter']=",name,thumb,lencord,is_page,listtemp,viewtemp,status,pagetitle,keywords,description,"; $data['cat_must_enter']=",name,listtemp,viewtemp,status,"; } if($data["modelid"]){ $this->save($data); $modelid = $data["modelid"]; }else{ $modelid = $this->add($data); $data["modelid"]=$modelid; } if ($modelid) { $this->updateModelTemp($modelid); $this->updateModelTempMember($modelid); $this->updateCatModelTemp($modelid);//默认增加模型会勾选栏目模型字段 //更新缓存数据 $this->updateCache(); } else { return false; } // return $data; } //保存栏目模型 public function saveCatModel(){ $data["modelid"]=I("post.modelid"); $data["cat_is_enter"]=$this->arr2string(I("post.cat_is_enter")); $data["cat_must_enter"]=$this->arr2string(I("post.cat_must_enter")); //栏目模型字段 $field_name=I("post.field_name"); $field=I("post.field"); $str=""; foreach($field as $key=>$v){ $str.=$field_name[$key]."".$field[$key]."\r\n"; } $data["cat_formtemp"]=$str; $this->save($data); // $modelid = $data["modelid"]; if ($modelid) { $this->updateCatModelTemp($modelid); //更新缓存数据 $this->updateCache(); } else { return false; } // return $data; } //删除模型 public function data_delete($modelid) { if (empty($modelid)){ $this->error = 'id不存在!'; return false; } $data = $this->where(array("modelid" => $modelid))->find(); if (!$data) { $this->error = '模型不存在!'; return false; } //检查该模型下是否有分类 $cat = M("cat")->where(array("modelid" => $modelid))->find(); if ($cat) { $this->error = '该模型下有分类,请先删除分类!'; return false; } //删除模型数据 $this->where(array("modelid" => $modelid))->delete(); //更新缓存数据 $this->updateCache(); //删除模型表单文件 unlink(APP_PATH.self::modelTempPath.$modelid.".php"); unlink(APP_PATH.self::modelTempMemberPath.$modelid.".php"); return true; } /** * 更新模型模板文件 * @param type $modelId 模型id * @return boolean */ public function updateModelTemp($modelId){ $model=$this->find($modelId); //将model里的is_enter is_contribute must_enter is_list is_search is_sort 依次拿出来和table_field对比,如果不存在就删除(防止因删除字段和修改字段名而造成model里的这些字段不更新导致的错误) $field=M("table_field")->field("field")->order("sort asc,field_id asc")->where(array("table_id"=>$model["table_id"]))->select(); $new["modelid"]=$modelId; foreach($field as $v){ //录入项 if(strstr($model["is_enter"], ",".$v["field"].",")){ $new["is_enter"].=",".$v["field"]; } //投稿 if(strstr($model["is_contribute"], ",".$v["field"].",")){ $new["is_contribute"].=",".$v["field"]; } //必填项 if(strstr($model["must_enter"], ",".$v["field"].",")){ $new["must_enter"].=",".$v["field"]; } //列表展示 if(strstr($model["is_list"], ",".$v["field"].",")){ $new["is_list"].=",".$v["field"]; } //搜索项 if(strstr($model["is_search"], ",".$v["field"].",")){ $new["is_search"].=",".$v["field"]; } //排序项 if(strstr($model["is_sort"], ",".$v["field"].",")){ $new["is_sort"].=",".$v["field"]; } } $new["is_enter"]=$new["is_enter"]?$new["is_enter"].",":""; $new["is_contribute"]=$new["is_contribute"]?$new["is_contribute"].",":""; $new["must_enter"]=$new["must_enter"]?$new["must_enter"].",":""; $new["is_list"]=$new["is_list"]?$new["is_list"].",":""; $new["is_search"]=$new["is_search"]?$new["is_search"].",":""; $new["is_sort"]=$new["is_sort"]?$new["is_sort"].",":""; $this->save($new); // $formtemp= explode("\r\n",$model["formtemp"]); $modelTemp=""; foreach($formtemp as $key=>$v){ $f=explode("",$v); if(!strstr($new["is_enter"], ",".$f[1].",")){ continue;; } $field=M("table_field")->where(array("table_id"=>$model["table_id"],"field"=>$f[1]))->find(); if($field){ $htmlcode=$field["htmlcode"]; $htmlcode= str_replace("{modelFieldTemp_name}", $f[0],$htmlcode);//名称替换 $modelTemp=$modelTemp."\r\n".$htmlcode; } } // $modelTemp=htmlspecialchars_decode($modelTemp); file_put_contents(APP_PATH.self::modelTempPath.$modelId.".php",$modelTemp); return true; } // //获取批量导入excel模板,用于用户在后台批量导入数据的 public function getExportExcelDemo($modelId,$cat_type){ $model=$this->find($modelId); $formtemp= explode("\r\n",$model["formtemp"]); foreach($formtemp as $key=>$v){ $f=explode("",$v); if(!strstr($model["is_enter"], ",".$f[1].",")){ continue;; } $data[]=$f[0]."==".$f[1]; } Vendor('PHPExcel.PHPExcel'); $objReader = \PHPExcel_IOFactory::createReader('Excel5'); $objPHPExcel = $objReader->load(APP_PATH."Data/excelDemo/export_template.xls"); $sheet=$objPHPExcel->setActiveSheetIndex(0); //设置第一列为栏目字段 if($cat_type=="catName"){ $sheet ->setCellValue("A1","栏目名称==catid"); $sheet->getColumnDimension("A")->setAutoSize(true); }elseif($cat_type=="catId"){ $sheet ->setCellValue("A1","栏目ID==catid"); $sheet->getColumnDimension("A")->setAutoSize(true); }else{ } // foreach($data as $key=>$v){ if($cat_type!="selfCheck"){ $key2=$key+1; }else{ $key2=$key; } $no=IntToChr($key2); $sheet ->setCellValue($no."1",$v); $sheet->getColumnDimension($no)->setAutoSize(true); } header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$model["name"].'-数据导入结构.xls"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); } /** * 更新模型模板文件(会员投稿表单) * @param type $modelId 模型id * @return boolean */ public function updateModelTempMember($modelId){ $model=$this->find($modelId); //将model里的is_enter is_contribute must_enter is_list is_search is_sort 依次拿出来和table_field对比,如果不存在就删除(防止因删除字段和修改字段名而造成model里的这些字段不更新导致的错误) $field=M("table_field")->field("field")->order("sort asc,field_id asc")->where(array("table_id"=>$model["table_id"]))->select(); $new["modelid"]=$modelId; foreach($field as $v){ //录入项 if(strstr($model["is_enter"], ",".$v["field"].",")){ $new["is_enter"].=",".$v["field"]; } //投稿 if(strstr($model["is_contribute"], ",".$v["field"].",")){ $new["is_contribute"].=",".$v["field"]; } //必填项 if(strstr($model["must_enter"], ",".$v["field"].",")){ $new["must_enter"].=",".$v["field"]; } //列表展示 if(strstr($model["is_list"], ",".$v["field"].",")){ $new["is_list"].=",".$v["field"]; } //搜索项 if(strstr($model["is_search"], ",".$v["field"].",")){ $new["is_search"].=",".$v["field"]; } //排序项 if(strstr($model["is_sort"], ",".$v["field"].",")){ $new["is_sort"].=",".$v["field"]; } } $new["is_enter"]=$new["is_enter"]?$new["is_enter"].",":""; $new["is_contribute"]=$new["is_contribute"]?$new["is_contribute"].",":""; $new["must_enter"]=$new["must_enter"]?$new["must_enter"].",":""; $new["is_list"]=$new["is_list"]?$new["is_list"].",":""; $new["is_search"]=$new["is_search"]?$new["is_search"].",":""; $new["is_sort"]=$new["is_sort"]?$new["is_sort"].",":""; $this->save($new); // $formtemp= explode("\r\n",$model["formtemp"]); $modelTemp=""; foreach($formtemp as $key=>$v){ $f=explode("",$v); if(!strstr($new["is_contribute"], ",".$f[1].",")){ continue;; } $field=M("table_field")->where(array("table_id"=>$model["table_id"],"field"=>$f[1]))->find(); if($field){ $htmlcode=$field["memberhtmlcode"]; $htmlcode= str_replace("{modelFieldTemp_name}", $f[0],$htmlcode);//名称替换 $modelTemp=$modelTemp."\r\n".$htmlcode; } } $modelTemp=htmlspecialchars_decode($modelTemp); file_put_contents(APP_PATH.self::modelTempMemberPath.$modelId.".php",$modelTemp); return true; } /** * 更新模型模板文件 * @param type $modelId 模型id * @return boolean */ public function updateCatModelTemp($modelId){ $model=$this->find($modelId); //将model里的is_enter must_enter 依次拿出来和cat_field对比,如果不存在就删除(防止因删除字段和修改字段名而造成model里的这些字段不更新导致的错误) $field=M("cat_field")->field("field")->order("sort asc,field_id asc")->select(); $new["modelid"]=$modelId; foreach($field as $v){ //录入项 if(strstr($model["cat_is_enter"], ",".$v["field"].",")){ $new["cat_is_enter"].=",".$v["field"]; } //必填项 if(strstr($model["cat_must_enter"], ",".$v["field"].",")){ $new["cat_must_enter"].=",".$v["field"]; } } $new["cat_is_enter"]=$new["cat_is_enter"]?$new["cat_is_enter"].",":""; $new["cat_must_enter"]=$new["cat_must_enter"]?$new["cat_must_enter"].",":""; $this->save($new); // $formtemp= explode("\r\n",$model["cat_formtemp"]); $modelTemp=""; foreach($formtemp as $key=>$v){ $f=explode("",$v); if(!strstr($new["cat_is_enter"], ",".$f[1].",")){ continue; } $field=M("cat_field")->where(array("field"=>$f[1]))->find(); if($field){ $htmlcode=$field["htmlcode"]; $htmlcode= str_replace("{modelFieldTemp_name}", $f[0],$htmlcode);//名称替换 $modelTemp=$modelTemp."\r\n".$htmlcode; } } $modelTemp=htmlspecialchars_decode($modelTemp); file_put_contents(APP_PATH.self::modelTempPath.$modelId."_cat.php",$modelTemp); return true; } //更新模型缓存 public function updateCache(){ $cat=$this->select(); $newcat=array(); foreach($cat as $v){ $newcat[$v["modelid"]]=$v; } $arr_str=var_export ($newcat,true); $arr_str="