• PHPCMS+PHPExcel实现后台导入数据导出数据


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

    首先,上图之中的红色框框是没有的,我们想要给他加上,当然是要改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文件就阔以了;

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

  • 相关阅读:
    jquery之自定义data属性
    js获取显示器、页面等高度 (转)
    A网页高度随B内容而自然变化兼容各种浏览器
    DIV+ul+LI实现表格效果以及div带滑动条
    不同人对待问题不同态度
    MySQL,SqlServer数据库关键字在程序中处理
    一款连接SqlServer的数据库工具
    VB.Net日期格式化的5种使用方法
    MySQL与SqlServer中update操作同一个表问题
    SqlServer中存储过程 returnC#代码处理以及对应的MySQL如何改写
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/5997841.html
Copyright © 2020-2023  润新知