phpcms模块开发之swfupload的使用介绍(5)


function att_show(serverData,file)
{
    var serverData = serverData.replace(/<div.*?<\/div>/g,'');
    var data = serverData.split(',');
    var id = data[0];
    var src = data[1];
    var ext = data[2];
    var filename = data[3];
    if(id == 0) {
        alert(src)
        return false;
    }
    if(ext == 1) {
        var img = '<a href="javascript:;"><div></div><img src="'https://www.jb51.net/article/+src+'" imgid="'+id+'" path="'https://www.jb51.net/article/+src+'" title="'+filename+'"/></a>';
    } else {
        var img = '<a href="javascript:;"><div></div><img src="statics/images/ext/'+ext+'.png" imgid="'+id+'" path="'https://www.jb51.net/article/+src+'" title="'+filename+'"/></a>';
    }
    $.get('index.php?m=attachment&c=attachments&a=swfupload_json&aid='+id+'&src='https://www.jb51.net/article/+src+'&filename='+filename);
    $('#fsUploadProgress').append('<li><div></div></li>');
    $('#attachment_'+id).html(img);
    $('#att-status').append('|'+src);
    $('#att-name').append('|'+filename);
}


这个方法的目的是在id为fsuuploadprogress的元素里面添加我们上传成功的附件.但是我们还木有找到文件到底去哪里了

关键的地方来了.我们在swfupload方法里面不是有个attachment的系统类的实例么

真正上传附件是在这里实现的.我们调用了attachment里面的upload方法来实现了文件的上传.

这个attachment文件里面的upload方法在系统类里面 也就是phpcms/libs/classes/attachment.class.php里面

在这个类里面我们可以找到upload方法里面有这样一行

复制代码 代码如下:


$this->savepath = $this->upload_root.$this->upload_dir.date('Y/md/');


这个自然就是指定了上传到的目录.文件名是通过getname方法来获取的.

到这里我们就理清思路了.

系统是这么运行的

首先在模板里面引用swfupload(配置文件是用函数生成的)->上传文件->attachment模块里的swfupload方法处理(使用系统的attachment类里面的upload方法循环上传附件.并返回结果给swfupload方法)->处理结果通过swfupload的方法(fileDialogComplete)返回给页面.

在上面我们已经实现了在模板里面引入swfupload.但是我们使用的配置文件和上传附件的方法等都是系统原来自带的.并不能实现我想要的目录结构和文件命名方法.怎么办..

改.

怎么改,首先们要把配置文件改掉. 在自己的模块里面的functions文件夹里面建立自己的函数.我们用自己的函数名称 文件命名为global.func.php这样系统会通过auto_load把我们的函数加载

进去我们把系统中attachment模块functions文件夹下面的global.func.php里面的initupload函数全盘拷贝进来.只修改其中的一行

复制代码 代码如下:


upload_url:"'.APP_PATH.'index.php?m=你的模块名称&c=你的控制器名称&a=你的方法名称&dosubmit=1",


这样文件就会提交到我们的控制器下面.并且调用我们自己写的方法

然后我们去改系统的attachment类  我们在自己的模块下的classes文件夹下面建立一个myattachment.class.php

写一个我们自己的类.去集成系统的attachment类.(记得吧里面的私有方法copy过来.)我们需要修改几行.首先一点是吧upload方法里面的上传目录改掉.然后是改掉文件名的命名方法.

复制代码 代码如下:


function upload($field, $alowexts = '', $maxsize = 0, $overwrite = 0,$thumb_setting = array(), $watermark_enable = 1) {
        if(!isset($_FILES[$field])) {
            $this->error = UPLOAD_ERR_OK;
            return false;
        }
        if(empty($alowexts) || $alowexts == '') {
            $site_setting = $this->_get_site_setting($this->siteid);
            $alowexts = $site_setting['upload_allowext'];
        }
        $fn = $_GET['CKEditorFuncNum'] ? $_GET['CKEditorFuncNum'] : '1';

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f3c06aaa98cc50e552f6533d7219ae47.html