TmpPath="./d/image/".date("Ymd")."/";
if (! file_exists ($this->TmpPath)) {
mkdir($this->TmpPath, 0777, true);
}
//
$this->params=$params;
$this->tableName="cms_".$GLOBALS['model'][$params["modelid"]]['table_name'];
}
//检查栏目结构
public function checkCat_type(){
$catid=I("post.catid",0,"intval");
$cat_type=I("post.cat_type");//栏目导入方式
if($cat_type=="selfCheck"&&!$catid){
return false;
}
}
//创建表格对像
public function creatExcelObj(){
Vendor('PHPExcel.PHPExcel');
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load(".".$this->params["excel_src"]);
$this->currentSheet = $objPHPExcel->getActiveSheet();
}
//把表格里的图片保存到服务器,并把具体的路径
public function saveImg(){
//先处理图片
$AllImages= $this->currentSheet->getDrawingCollection();
$ArrayTmp="";
foreach($AllImages as $drawing){
if($drawing instanceof \PHPExcel_Worksheet_MemoryDrawing){
$image = $drawing->getImageResource();
$filename=$drawing->getIndexedFilename();
$XY=$drawing->getCoordinates();
//把图片存起来
imagepng($image, $this->TmpPath.$filename);
//把图片的单元格的值设置为图片名称
$cell = $this->currentSheet->getCell($XY);
$cell->setValue($this->TmpPath.$filename);
}
}
//重新获取一下表格数据
$this->getExcelData();
//删除第一行字段名
$data=$this->excelData;
unset($data[0]);
$this->excelData=$data;
}
//把图片路径字段保存到file表里
public function saveImgToTable($src,$pubid){
$fileName= str_replace($this->TmpPath,"",$src);
$value['pubid']=$pubid;
$value['name']=$fileName;
$value['filepath']=trim($src,".");
$value['savepath']=date("Ymd");
$fileName_arr=explode(".",$fileName);
$value['ext']=$fileName_arr[1];
$value['size']= filesize($src);
$value['md5'] = md5_file($src);
$value['sha1'] = sha1_file($src);
$value['create_time'] = time();
//判断文件是否存在
$where['md5'] = $value['md5'];
$where['sha1'] = $value['sha1'];
$isFile=M("file")->where($where)->getField("id");
if($isFile){
$value['id'] = $isFile;
M("file")->save($value);
}else{
//压缩图片
$image=new \Think\Image();
$image->open($src);
$image->thumb(200,200);
$small_path=$this->TmpPath."small_".$fileName;
$image->save($small_path);
$value['smallpath']=trim($small_path,".");
M("file")->add($value);
}
}
//获取表格内的数据内容
public function getExcelData(){
$data=$this->currentSheet->toArray();
$this->excelData=$data;
}
//分割并提取表格第一行做为字段名称
public function getFieldName(){
$fieldName=array();
$fieldName["id"]="ID";
$fieldName["catid"]="栏目名称";
$data=$this->excelData;
foreach($data[0] as $key=>$v){
$field_arr=explode("==",$v);
$fieldKey[$key]=$field_arr[1];
$fieldName[$field_arr[1]]=$field_arr[0];
}
$fieldName["result_status"]="导入结果";
unset($data[0]);
$this->fieldKey=$fieldKey;//返回一个excel下标对应字段名的数组,例:array(0=>title,1=>keywords)
$this->fieldName=$fieldName;//返回一个根据字段下标,对应字段中文值的数组,例:array('title'=>'标题','keywords'=>'关键字')
$this->excelData=$data;//返回一个去掉第一行的excel data
}
//开始插入数据
public function insertData(){
$back_data=array();
$back_data[]=$this->fieldName;
foreach($this->excelData as $v){
$_POST=array();
$_POST["id"]=0;
if($this->params["cat_type"]=="selfCheck"){
$_POST["catid"]=$this->params["catid"];
}
$_POST["pubid"]=make_pubid();
foreach($v as $key2=>$v2){
//如果是栏目字段
if($this->fieldKey[$key2]=="catid"){
//判断栏目的形式,栏目名称|栏目ID
if($this->params["cat_type"]=="catName"){//栏目名称
$_POST["catid"]=M("cat")->where(array("name"=>$v2))->getField("catid");
}else if($this->params["cat_type"]=="catId"){//栏目ID
$_POST["catid"]=intval($v2);
}
//
}else{
$_POST[$this->fieldKey[$key2]]=$v2?$v2:"";
}
//判断是否为图片路径,如果是图片路径把图片路径存到file表里,便用在文件管理器中查看
if(strstr($v2,$this->TmpPath)){
$this->saveImgToTable($v2,$_POST["pubid"]);
$_POST[$this->fieldKey[$key2]]=trim($v2,".");
}
}
//查看catid是否存在
if(!$_POST["catid"]){
unset($_POST["pubid"]);
$_POST["result_status"]="导入失败-缺少catid";
$resultData=$_POST;
}else{
//如果遇到重复标题如何处理
//直接新增(为了减少服务器资源这里就不做重复查询)
if($this->params["check_title"]=="add"){
$resultData=$this->saveAction("add");
}else{
//查看数据是否存在
$id=M($this->tableName)->where(array("title"=>$_POST["title"],"catid"=>$_POST["catid"]))->getField("id");
if($id){
if($this->params["check_title"]=="update"){
$_POST["id"]=$id;
$resultData=$this->saveAction("update");
}else{
unset($_POST["pubid"]);
$_POST["result_status"]="导入失败-标题重复";
$resultData=$_POST;
}
}else{
$resultData=$this->saveAction("add");
}
}
}
$back_data[]=$resultData;
}
return $back_data;
}
//保存操作
private function saveAction($type){
//调用模型里的数据插入方式
if($type=="add"){
$resultdata=D("Info")->data_add("export");
$result_status="导入成功(新增)";
}else{
$resultdata=D("Info")->data_editor("export");
$result_status="导入成功(更新)";
}
foreach($this->fieldName as $key=>$v3){
$newdata[$key]=$resultdata[$key]?$resultdata[$key]:"-";
}
$newdata["catid"]=$GLOBALS['cat'][$newdata["catid"]][name];
$newdata["result_status"]=$result_status;
return $newdata;
}
}