Initial commit
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
namespace Admin\Model;
|
||||
use Think\Model;
|
||||
class ImportDataModel extends Model{
|
||||
public $TmpPath,$tableName,$params,$currentSheet,$excelData,$fieldKey,$fieldName;
|
||||
//自动验证
|
||||
//array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间])
|
||||
protected $_validate = array(
|
||||
array('modelid','require','缺少modelid!',1),
|
||||
array('cat_type','checkCat_type','请选择栏目!',1,"callback"),
|
||||
array('excel_src','require','请上传数据包!',1),
|
||||
);
|
||||
//
|
||||
function __construct($params){
|
||||
//文件保存路径
|
||||
$this->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"]="<span style='color:red'>导入失败-缺少catid</span>";
|
||||
$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"]="<span style='color:red'>导入失败-标题重复</span>";
|
||||
$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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user