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文件就闊以了;

看到這個頁面就很開心了對吧,哈哈哈哈


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM