正式接触phpcms模块开发后.开发了几个功能模块.其中遇到了需要批量上传图片的问题.于是开始挖掘phpcms里面的swfupload的用法.
在phpcms里面自带的内容类型里面能够直接指定图片组.不过这样的图片组功能并不是我想用的.我需要上传一整个静态的html文件.需要
能够找到一个方法上传整个文件夹.并且能够保留原来的文件名称.
目的总结如下:
1,不改变系统的文件和目录结构.
2,实现多附件上传功能.
3,能够得到上传后的文件夹名称.
在phpcms中自带了附件上传的功能.我想去用swfupload功能,而这个功能被phpcms的附件上传功能集成进去了.那我要做的就是抽出来并加以修改.
第一步,我来研究研究这个是怎么调用的.
首先,打开firefox浏览器的firebug 打开网络面板.找到phpcm中swfupload呗调出的那个按钮.看看系统是请求的什么连接.
复制代码 代码如下:
?m=attachment&c=attachments&a=swfupload&args=10,,1&module=&catid=&authkey=b756a93dea2e627293e88fa9d62af709&pc_hash=iXFbo1
我们捕捉到一串这样的请求.调用了attachment模块的attachements控制器里面的swfupload方法.
我们去找到这个模块中的这个控制器里面的这个方法.
在phpcms/modoules/attachemet/attachemts.php里面
打开看看,代码如下
复制代码 代码如下:
public function swfupload(){
$grouplist = getcache('grouplist','member');
if(isset($_POST['dosubmit'])){
//if里面的内容我们暂时不看.因为这是上传之后的处理.我们要先找到是如何引入swfupload的.
} else {
if($this->isadmin==0 && !$grouplist[$this->groupid]['allowattachment']) showmessage(L('att_no_permission'));
$args = $_GET['args'];//得到参数
$authkey = $_GET['authkey'];//得到密匙
if(upload_key($args) != $authkey) showmessage(L('attachment_parameter_error'));//验证密匙
extract(getswfinit($_GET['args']));//拆分参数
$siteid = $this->get_siteid();//得到网站id
$site_setting = get_site_setting($siteid);//得到网站设置
$file_size_limit = sizecount($site_setting['upload_maxsize']*1024);//允许上传大小
$att_not_used = param::get_cookie('att_json');//得到未处理的文件列表
if(empty($att_not_used) || !isset($att_not_used)) $tab_status = '';//如果有未处理的设置标签样式为on
if(!empty($att_not_used)) $div_status = ' hidden';//否则隐藏标签
$att = $this->att_not_used();//获取临时未处理文件列表
include $this->admin_tpl('swfupload');//这个地方才是关键.加载了这个模板.
}
}
前面的我们就先不管了 ,那是处理上传的东西.我从else开始看.首先验证了是否允许附件上传
然后从$_GET里面得到swfupload的参数args,然后去验证了密匙,密匙通过了去解析args.得到网站的id,得到网站的设置,得到允许上传附件的大小.从cookie里面得到未使用的附件列表.
设置模板里面的各种显示.最后也是最关键的.它使用了swfupload模板.也就是说我要找到这个模板.看看swfupload是怎么引过来的.
模板在这里:phpcms/modules/attachment/templates/swfupload.tpl.php
打开模板文件.模板文件上面引入了一堆文件:
复制代码 代码如下:
<?php $show_header = $show_validator = $show_scroll = 1; include $this->admin_tpl('header', 'attachment');?>
<link href="<?php echo JS_PATH?>swfupload/swfupload.css" type="text/css" />
<script language="JavaScript" type="text/javascript" src="<?php echo JS_PATH?>swfupload/swfupload.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo JS_PATH?>swfupload/fileprogress.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo JS_PATH?>swfupload/handlers2.js"></script>
<script type="text/javascript">
<?php echo initupload($_GET['module'],$_GET['catid'],$args,$this->userid,$this->groupid,$this->isadmin)?>
</script>
首先是引入了头文件.我大概看里一下.里面有jquery什么的.是必要文件.所以一会我们要用的时候也要引入这个头.
之后是swfupload的样式文件和必要的JS.这里调用了一个系统函数initupload,这个函数到底是干嘛的.
千万别小觑这行.整个swfupload的配置都在这里了.
我们去找找看这个函数.
在phpcms/modules/attachment/functions/golable.func.php里面找到了它的踪迹.代码如下,这个函数的主要作用就是配置swfupload这个插件.
复制代码 代码如下: