【转】PHPCMS+PHPExcel实现后台数据导入导出功能

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

看看路由原理:

 

 

 

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

看看路由原理:

 

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

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

 

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

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

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

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

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

 

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

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

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

public function public_add_excel(){
                $file_path=$_FILES['file_stu']['tmp_name'];
                move_uploaded_file($file_path, './tmp.xls');
                // require_once('./PHPExcel.php');
                 pc_base::load_sys_class('PHPExcel');
                
                $array=format_excel2array('./tmp.xls');
                array_shift($array);
                //将数组入库按照官方方法入库
                $catid=33;
            
                foreach ($array as $key => $value) {
                            define('INDEX_HTML',true);
                            $catid = 33;
                            $category = $this->categorys[$catid];
                            if($category['type']==0) {

                                $modelid = $this->categorys[$catid]['modelid'];
                                $this->db->set_model($modelid);
                                //如果该栏目设置了工作流,那么必须走工作流设定
                                $setting = string2array($category['setting']);
                                $workflowid = $setting['workflowid'];
                        
                                $_POST=array();
                                $_POST['info']['status']=99;
                                $_POST['info']['catid']=33;
                                $_POST['info']['template']="";
                                $_POST['info']['inputtime']="";
                                $_POST['info']['title']=$value['A'];
                                $_POST['info']['description']=$value['B'];
                                $_POST['info']['chanpinshengchanriqi']=$value['C'];
                                
                                $this->db->add_content($_POST['info']);//添加数据
                                
                            }
                }

                echo "导入成功";die;
                
                

}

入库代码就是这里;

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

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

于是

$file_path=$_FILES['file_stu']['tmp_name'];
                move_uploaded_file($file_path, './tmp.xls');
                // require_once('./PHPExcel.php');
                 pc_base::load_sys_class('PHPExcel');
                
                $array=format_excel2array('./tmp.xls');
                array_shift($array);

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

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

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

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

成功后就是酱紫啦!

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

 

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

现在看看导出数据:

页面效果图:

 

前端代码:

function代码:

function write_excel($savename=null){
        // import('Com.PHPExcel');       //引入excel
        // import('Com.PHPExcel.IOFactory');
        // import('Com.PHPExcel.Writer.Excel5');
        pc_base::load_sys_class('PHPExcel');

        $PHPExcel = new \PHPExcel();
        $PHPExcel->getActiveSheet()->setCellValue('A1', '标题');
        $PHPExcel->getActiveSheet()->setCellValue('B1', '描述');
        $PHPExcel->getActiveSheet()->setCellValue('C1', '生产日期');
        $abc = array();
        // $res = D('customer')->where("id in ($id)")->order('id asc')->select();
        $this->db->table_name ="v9_chanpinxinxi";

        $where="";
        $res=$this->db->select($where,'title,description,chanpinshengchanriqi');
       
        if($res){
            $i = 2;
            foreach ($res as $v) {
                $PHPExcel->getActiveSheet()->setCellValue('A'.$i,$v['title']);
                $PHPExcel->getActiveSheet()->setCellValue('B'.$i,$v['description']);
                $PHPExcel->getActiveSheet()->setCellValue('C'.$i,$v['chanpinshengchanriqi']);
                if($v['option']){
                    $option = unserialize($v['option']);
                    foreach ($option as $key => $value) {
                        if(!in_array($key,$abc)){
                            $abc[] = $key;
                        }
                        $key2 = chr(ord($key)+3);
                        $PHPExcel->getActiveSheet()->setCellValue($key2.$i,$value);
                    }

                }
                $i++;
            }

            foreach ($abc as $v) {
                $k = chr(ord($v)+3);
                $PHPExcel->getActiveSheet()->setCellValue($k.'1',$v);
            }
            // $excel = D('game')->field('excel')->where($game_id)->find();
            // $savename = $savename ? $savename : $excel;
            if(is_array($savename)){
                $savename ='./'.$savename;
            }
            if(file_exists($savename)){
                unlink($savename);
            }
            $write = new \PHPExcel_Writer_Excel5($PHPExcel);
            header("Pragma: no-cache");
            $write->save($savename);
            return true;
        }else{
            return $res;
        }
    }
    public function public_get_excel(){
            // $res = D('customer')->field('name,iccid,mobile')->where("id in ($id)")->select();
            // $sql="select title,description,chanpinshengchanriqi from v9_chanpinxinxi"; 
        
            $this->db->table_name ="v9_chanpinxinxi";
            $where="";
            $res=$this->db->select($where,'title,description,chanpinshengchanriqi');
            
            //$file = C('UNLINK_PATH').$res['mobile'];
            $file = './'.uniqid();
           $this->write_excel($file);
            //$fileName = $res['name'].'.xls';
            $fileName = uniqid().'.xls';
            $fp = fopen($file,'rb');

            if(!$fp){
                header('HTTP/1.1 404 Not Found');
                echo "Error: 404 Not Found.(server file path error)<!-- Padding -->
      <!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding -->
      <!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding -->";
                exit;
            }
            $encoded_filename = urlencode($fileName);
            $encoded_filename = str_replace("+", "%20", $encoded_filename);
            header('HTTP/1.1 200 OK');
            header( "Pragma: public" );
            header( "Expires: 0" );
            header("Content-type: application/octet-stream");
            header("Content-Length: ".filesize($file));
            header("Accept-Ranges: bytes");
            header("Accept-Length: ".filesize($file));
            $ua = $_SERVER["HTTP_USER_AGENT"];
            if (preg_match("/MSIE/", $ua)) {
                header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
            } else if (preg_match("/Firefox/", $ua)) {
                header('Content-Disposition: attachment; filename*="utf8\'\'' . $fileName . '"');
            } else {
                header('Content-Disposition: attachment; filename="' . $fileName . '"');
            }
            ob_start();
            ob_clean();
            flush();
            fpassthru($fp);

        
    }

需要提一下的是:

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

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

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

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

附件看文件链接:

https://files.cnblogs.com/files/yuan9580/phpcms%E5%90%8E%E5%8F%B0excel%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA%E6%95%B0%E6%8D%AE.zip

转载于:https://www.cnblogs.com/yuan9580/p/10592720.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "phpcms-后台美化版.zip" 是一个对 PHPCMS 后台界面进行美化的文件压缩包。 PHPCMS 是一个开源的内容管理系统,用于构建和管理网站。然而,PHPCMS后台界面通常被认为不够美观和现代化。为了改善用户体验,并提供更好的界面设计,有人开发了这个名为 "phpcms-后台美化版.zip" 的文件。 这个美化版的压缩包包含了一套美化后的后台界面样式,可以替代原始 PHPCMS后台界面样式。你可以将这些文件解压并替换原始的后台样式文件,然后重新加载 PHPCMS 后台界面,即可享受到全新的设计和用户界面。这些新的样式可能会改变后台界面的布局、颜色、图标等,以提供更美观和易用的界面。 使用这个美化版的好处是它能够为用户带来更好的使用体验,使得 PHPCMS后台管理更加舒适和高效。美化后的界面通常会采用现代化的设计元素,例如扁平化风格、响应式布局和友好的用户交互。这样的改进能够提升用户对 PHPCMS 后台功能的使用欲望,并帮助用户更方便地管理和维护网站。 总之,"phpcms-后台美化版.zip" 提供了一种改进 PHPCMS 后台界面的方式,使其更加美观和现代化,从而提升用户体验和管理效率。 ### 回答2: "phpcms-后台美化版.zip" 是一个经过美化和定制的 phpCMS 后台界面的压缩文件。phpCMS 是一个流行的开源内容管理系统,它提供了一个功能强大的后台管理界面,用于创建、编辑和管理网站的内容。 这个美化版的后台界面通过优化布局、色彩、图标等元素,使它更加美观、易用和符合现代设计的风格。这些改进主要是为了提高用户的使用体验,并使得后台管理更加高效和便捷。 美化版后台界面还可能包含一些额外的功能增强,以提供更好的操作和管理选项。例如,可以增加快速导航菜单、个性化主题设置、界面语言选择等功能。这些增强功能可以根据用户的需求进行定制和调整,以满足不同用户的使用习惯和喜好。 使用这个美化版后台界面,网站管理员可以更轻松地管理和维护网站的内容。他们可以通过直观且易于导航的界面,轻松访问和编辑文章、页面、分类等内容。同时,他们还可以方便地上传和管理网站所需的图片、附件和多媒体文件。这些改进都有助于提高管理员的工作效率和任务完成速度。 总而言之,"phpcms-后台美化版.zip" 提供了一个通过改进和定制后的 phpCMS 后台界面,使得网站管理员可以更加方便、高效地管理和维护网站的内容。这样的美化版后台界面可以提升用户的使用体验,并提供更好的操作和管理选项。 ### 回答3: "phpcms-后台美化版.zip" 是一个经过美化的 phpCMS 后台模板文件压缩包。phpCMS 是一个基于 PHP 的内容管理系统,用于构建网站和管理网站内容。而这个美化版的后台模板则是对原本的 phpCMS 后台界面进行了个性化、美化的设计。 这个美化版的后台模板主要涉及到界面布局、颜色搭配、图标等方面的改变,旨在提升用户体验和界面美观度。它可能会包含更加简洁、清晰的界面设计,更加合理的布局结构,以及更加符合现代审美趋势的颜色和图标选择。这样一来,用户在使用phpCMS后台时,能够更加轻松、愉快地进行操作,提高了工作效率。 使用这个美化版的后台模板,首先需要将zip文件解压缩,得到对应的文件格式。然后,根据它提供的安装说明,将其中的模板文件替换原本的 phpCMS 后台模板文件即可。一般来说,这个过程比较简单,即可实现美化版后台模板的安装和应用。 使用这个美化版的后台模板有一些好处。首先,它可以提升用户的工作体验,使得使用 phpCMS 后台的过程更加舒适、高效。其次,美化版的后台模板可以使得整个网站的界面风格更加统一、专业,提升整体的用户体验度。最后,美化版的后台模板还可以根据个人需求进行自定义,可以根据不同网站的风格和需求,进行相应的样式修改和优化。 总之,"phpcms-后台美化版.zip" 提供了一个美化后台模板,可以让 phpCMS 后台界面更加优雅、美观,提升用户的使用体验和整体网站的品质。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值