www.gusucode.com > iWebshop开源PHP商城系统 v2.8源码程序 > iwebshop/classes/csvimport_facade.php
<?php /** * @brief csv商品导入外观模式 * @author chendeshan * @date 2014/1/2 8:32:57 */ class csvimport_facade { /** * @brief 开始运行 */ public static function run() { $csvType = IReq::get('csvType'); $category = IFilter::act(IReq::get('category'),'int'); $pluginDir = IWeb::$app->getBasePath().'plugins/csvPacketHelper/'; if(!file_exists($pluginDir)) { $message = '此功能仅供授权版本使用,请您购买商业授权'; die('<script type="text/javascript">parent.artDialogCallback("'.$message.'");</script>'); } if(!class_exists('ZipArchive')) { $message = '服务器环境中没有安装zip扩展,无法使用此功能'; die('<script type="text/javascript">parent.artDialogCallback("'.$message.'");</script>'); } //处理上传 $uploadInstance = new IUpload(50000,array('zip')); $uploadCsvDir = IWeb::$app->config['upload'].'/cvs/'.date('Ymd'); $uploadInstance->setDir($uploadCsvDir); $result = $uploadInstance->execute(); if(!isset($result['csvPacket'])) { $message = '请上传指定大小的csv数据包'; die('<script type="text/javascript">parent.artDialogCallback("'.$message.'");</script>'); } if(($packetData = current($result['csvPacket'])) && $packetData['flag'] != 1) { $message = $uploadInstance->errorMessage($packetData['flag']); die('<script type="text/javascript">parent.artDialogCallback("'.$message.'");</script>'); } $zipPath = $packetData['fileSrc']; $zipDir = dirname($zipPath); $imageDir= IWeb::$app->config['upload'].'/'.date('Y/m/d'); file_exists($imageDir) ? '' : IFile::mkdir($imageDir); //解压缩包 $zipObject = new ZipArchive(); $zipObject->open($zipPath); $isExtract = $zipObject->extractTo($zipDir); $zipObject->close(); if($isExtract == false) { $message = '解压缩到目录'.$zipDir.'失败!'; die('<script type="text/javascript">parent.artDialogCallback("'.$message.'");</script>'); } //实例化商品 $goodsObject = new IModel('goods'); $photoRelationDB = new IModel('goods_photo_relation'); $photoDB = new IModel('goods_photo'); $cateExtendDB = new IModel('category_extend'); //获得配置文件中的数据 $config = new Config("site_config"); $dirHandle = opendir($zipDir); while($fileName = readdir($dirHandle)) { if(strpos($fileName,'.csv') !== false) { //创建解析对象 switch($csvType) { case "taobao": { include_once($pluginDir.'taoBaoPacketHelper.php'); $helperInstance = new taoBaoPacketHelper($zipDir.'/'.$fileName,$imageDir); $titleToCols = taoBaoTitleToColsMapping::$mapping; } break; default: { $message = "请选择csv数据包的格式"; die('<script type="text/javascript">parent.artDialogCallback("'.$message.'");</script>'); } } //从csv中解析数据 $collectData = $helperInstance->collect(); //插入商品表 foreach($collectData as $key => $val) { set_time_limit(1000); $collectImage = isset($val[$titleToCols['img']]) ? $val[$titleToCols['img']] : ''; //有图片处理 if($collectImage) { //图片拷贝 $_FILES = array(); foreach($collectImage as $image) { foreach($image as $from => $to) { if(!is_file($from)) { continue; } IFile::xcopy($from,$to); //构造$_FILES全局数组 $_FILES[] = array( 'size' => 100, 'tmp_name' => $to, 'name' => basename($to), 'error' => 0 ); } } //调用文件上传类 $photoObj = new PhotoUpload(); $uploadImg = $photoObj->run(true); $showImg = current($uploadImg); } $insertData = array( 'name' => IFilter::act(trim($val[$titleToCols['name']],'"\'')), 'goods_no' => goods_class::createGoodsNo(), 'sell_price' => IFilter::act($val[$titleToCols['sell_price']],'float'), 'market_price' => IFilter::act($val[$titleToCols['sell_price']],'float'), 'up_time' => ITime::getDateTime(), 'create_time' => ITime::getDateTime(), 'store_nums' => IFilter::act($val[$titleToCols['store_nums']],'int'), 'content' => IFilter::act(trim($val[$titleToCols['content']],'"\''),'text'), 'img' => isset($showImg['img']) ? $showImg['img'] : '' ); $goodsObject->setData($insertData); $goods_id = $goodsObject->add(); //处理商品分类 if($category) { foreach($category as $catId) { $cateExtendDB->setData(array('goods_id' => $goods_id,'category_id' => $catId)); $cateExtendDB->add(); } } //处理商品图片 if($uploadImg) { $imgArray = array(); foreach($uploadImg as $temp) { $imgArray[] = $temp['img']; } $photoData = $photoDB->query('img in ("'.join('","',$imgArray).'")','id'); if($photoData) { foreach($photoData as $item) { $photoRelationDB->setData(array('goods_id' => $goods_id,'photo_id' => $item['id'])); $photoRelationDB->add(); } } } } } } //清理csv文件数据 IFile::rmdir($uploadCsvDir,true); die('<script type="text/javascript">parent.artDialogCallback();</script>'); } }