xuweiqiang

这波,惊为天人,我都服气我自己,思路走一走:

首先,上图之中的红色框框是没有的,我们想要给他加上,当然是要改HTML页面啦,废话,我们跟ECSHOP一样由PHP路径找模板;

看看路由原理:

再看看这个板块的路由哈,别找错啦,大兄弟

然后我们很快找到控制器吧

当然,你会发现init方法里面竟然引用了很多个HTML(tpl后缀)至于是哪一个你就需要一个个试了,并看懂html之中的if语句还不如一个个加H1标签或者删除来的快

最终不负众望找到这个HTML前端页面,直接加上form表单和提交按钮,之所以加上那个if语句是因为,我们不能在每个栏目添加数据那儿都显示这个excel导入数据吧

那个action的地址呢?和那个方法所在的位置我想你是最模糊的吧,这里需要提醒得是,我们不能用原生SQL去插入数据,必须按照原生的数据插入的去拼接sql入库语句、

不然前台查询数据是查不到的,为什么,我也不知道,真心找不到,靠

入库,当然是得看原生的入库的表单了:

于是呢,action我们也找到,方法也找到;

就在那个方法旁边加一个方法作为导入excel表单的action吧;

照着原生添加数据的 方法,我们很容易找到入库的数据就是$_POST[\'info\'],调用cms里面的那个对象哪个方法进行入库,还有什么设定,一定不能忘了

 1 public function public_add_excel(){
 2                 $file_path=$_FILES[\'file_stu\'][\'tmp_name\'];
 3                 move_uploaded_file($file_path, \'./tmp.xls\');
 4                 // require_once(\'./PHPExcel.php\');
 5                  pc_base::load_sys_class(\'PHPExcel\');
 6                 
 7                 $array=format_excel2array(\'./tmp.xls\');
 8                 array_shift($array);
 9                 //将数组入库按照官方方法入库
10                 $catid=33;
11             
12                 foreach ($array as $key => $value) {
13                             define(\'INDEX_HTML\',true);
14                             $catid = 33;
15                             $category = $this->categorys[$catid];
16                             if($category[\'type\']==0) {
17 
18                                 $modelid = $this->categorys[$catid][\'modelid\'];
19                                 $this->db->set_model($modelid);
20                                 //如果该栏目设置了工作流,那么必须走工作流设定
21                                 $setting = string2array($category[\'setting\']);
22                                 $workflowid = $setting[\'workflowid\'];
23                         
24                                 $_POST=array();
25                                 $_POST[\'info\'][\'status\']=99;
26                                 $_POST[\'info\'][\'catid\']=33;
27                                 $_POST[\'info\'][\'template\']="";
28                                 $_POST[\'info\'][\'inputtime\']="";
29                                 $_POST[\'info\'][\'title\']=$value[\'A\'];
30                                 $_POST[\'info\'][\'description\']=$value[\'B\'];
31                                 $_POST[\'info\'][\'chanpinshengchanriqi\']=$value[\'C\'];
32                                 
33                                 $this->db->add_content($_POST[\'info\']);//添加数据
34                                 
35                             }
36                 }
37 
38                 echo "导入成功";die;
39                 
40                 
41 
42 }

入库代码就是这里;

现在说说form接收到表单POST过来的excel文件的操作;

首先明白,当文件上传的时候,都会有一个临时文件夹存放该文件,此时excel存储在一个临时文件夹,但是拿不到来使用,看上一篇文章知道,我们要的是excel文件所在的位置

于是

1                 $file_path=$_FILES[\'file_stu\'][\'tmp_name\'];
2                 move_uploaded_file($file_path, \'./tmp.xls\');
3                 // require_once(\'./PHPExcel.php\');
4                  pc_base::load_sys_class(\'PHPExcel\');
5                 
6                 $array=format_excel2array(\'./tmp.xls\');
7                 array_shift($array);

表单的action第一步就是move_upload_file(文件路径,保存路径+保存文件名字+后缀)函数将临时文件移动到???

入口文件位置为准,入口文件的当前文件夹当然是:

至于那个下面的引入excel第三方类怎样引入就不用我说了吧!!

还有excel数据变成数组数据再foreach还有为何将数组第一个元素shift调就不用我说了吧;

成功后就是酱紫啦!

现在附送一个原来弄的原生SQL进行入库的想法,复习复习:

TPL或者HTML模板里面调用方法可以用表单提交的action地址,在php文件function之中调用公共方法直接用名字,引用类用那个标签、

现在看看导出数据:

页面效果图:

前端代码:

function代码:

  1 function write_excel($savename=null){
  2         // import(\'Com.PHPExcel\');       //引入excel
  3         // import(\'Com.PHPExcel.IOFactory\');
  4         // import(\'Com.PHPExcel.Writer.Excel5\');
  5         pc_base::load_sys_class(\'PHPExcel\');
  6 
  7         $PHPExcel = new \PHPExcel();
  8         $PHPExcel->getActiveSheet()->setCellValue(\'A1\', \'标题\');
  9         $PHPExcel->getActiveSheet()->setCellValue(\'B1\', \'描述\');
 10         $PHPExcel->getActiveSheet()->setCellValue(\'C1\', \'生产日期\');
 11         $abc = array();
 12         // $res = D(\'customer\')->where("id in ($id)")->order(\'id asc\')->select();
 13         $this->db->table_name ="v9_chanpinxinxi";
 14 
 15         $where="";
 16         $res=$this->db->select($where,\'title,description,chanpinshengchanriqi\');
 17        
 18         if($res){
 19             $i = 2;
 20             foreach ($res as $v) {
 21                 $PHPExcel->getActiveSheet()->setCellValue(\'A\'.$i,$v[\'title\']);
 22                 $PHPExcel->getActiveSheet()->setCellValue(\'B\'.$i,$v[\'description\']);
 23                 $PHPExcel->getActiveSheet()->setCellValue(\'C\'.$i,$v[\'chanpinshengchanriqi\']);
 24                 if($v[\'option\']){
 25                     $option = unserialize($v[\'option\']);
 26                     foreach ($option as $key => $value) {
 27                         if(!in_array($key,$abc)){
 28                             $abc[] = $key;
 29                         }
 30                         $key2 = chr(ord($key)+3);
 31                         $PHPExcel->getActiveSheet()->setCellValue($key2.$i,$value);
 32                     }
 33 
 34                 }
 35                 $i++;
 36             }
 37 
 38             foreach ($abc as $v) {
 39                 $k = chr(ord($v)+3);
 40                 $PHPExcel->getActiveSheet()->setCellValue($k.\'1\',$v);
 41             }
 42             // $excel = D(\'game\')->field(\'excel\')->where($game_id)->find();
 43             // $savename = $savename ? $savename : $excel;
 44             if(is_array($savename)){
 45                 $savename =\'./\'.$savename;
 46             }
 47             if(file_exists($savename)){
 48                 unlink($savename);
 49             }
 50             $write = new \PHPExcel_Writer_Excel5($PHPExcel);
 51             header("Pragma: no-cache");
 52             $write->save($savename);
 53             return true;
 54         }else{
 55             return $res;
 56         }
 57     }
 58     public function public_get_excel(){
 59             // $res = D(\'customer\')->field(\'name,iccid,mobile\')->where("id in ($id)")->select();
 60             // $sql="select title,description,chanpinshengchanriqi from v9_chanpinxinxi"; 
 61         
 62             $this->db->table_name ="v9_chanpinxinxi";
 63             $where="";
 64             $res=$this->db->select($where,\'title,description,chanpinshengchanriqi\');
 65             
 66             //$file = C(\'UNLINK_PATH\').$res[\'mobile\'];
 67             $file = \'./\'.uniqid();
 68            $this->write_excel($file);
 69             //$fileName = $res[\'name\'].\'.xls\';
 70             $fileName = uniqid().\'.xls\';
 71             $fp = fopen($file,\'rb\');
 72 
 73             if(!$fp){
 74                 header(\'HTTP/1.1 404 Not Found\');
 75                 echo "Error: 404 Not Found.(server file path error)<!-- Padding -->
      <!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding -->
      <!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding -->"; 76 exit; 77 } 78 $encoded_filename = urlencode($fileName); 79 $encoded_filename = str_replace("+", "%20", $encoded_filename); 80 header(\'HTTP/1.1 200 OK\'); 81 header( "Pragma: public" ); 82 header( "Expires: 0" ); 83 header("Content-type: application/octet-stream"); 84 header("Content-Length: ".filesize($file)); 85 header("Accept-Ranges: bytes"); 86 header("Accept-Length: ".filesize($file)); 87 $ua = $_SERVER["HTTP_USER_AGENT"]; 88 if (preg_match("/MSIE/", $ua)) { 89 header(\'Content-Disposition: attachment; filename="\' . $encoded_filename . \'"\'); 90 } else if (preg_match("/Firefox/", $ua)) { 91 header(\'Content-Disposition: attachment; filename*="utf8\\'\\'\' . $fileName . \'"\'); 92 } else { 93 header(\'Content-Disposition: attachment; filename="\' . $fileName . \'"\'); 94 } 95 ob_start(); 96 ob_clean(); 97 flush(); 98 fpassthru($fp); 99 100 101 }

需要提一下的是:

在扩展方法$db实例化的数据库模型是不存在的;

在cms之中的数据库查询语句尤其特定的标签(在上面有):

还有就是,纠正一下,以前发的那个导入导出excel的,好像只需要引入那个PHPExcel.class.php文件就阔以了;

看到这个页面就很开心了对吧,哈哈哈哈

分类:

技术点:

相关文章: