湖中沉 发表于 2013-3-24 13:45:58

引用DZ自带上传的方法总结(绑定帖子法)

首先,在模版中要加入调用按钮<div id="check_bar" class="bar">
<!--{eval $seditor = array('fastpost', array('bold', 'color', 'link', 'quote', 'img', 'smilies', 'flash', 'quote'), 0, '<span class="pipe z">|</span><span id="spanButtonPlaceholder">'.lang('template', 'upload').'</span>');}-->
<!--{subtemplate common/seditor}-->
</div>
<div class="area">
<textarea rows="5" cols="80" name="message" id="fastpostmessage" tabindex="4" class="pt" style="height:300px;" required="required"></textarea>
</div>
</div>以上代码中,定义了SEDITOR对应fastpost为id前缀的textarea文本框,然后在常用标签之外,加入了上传按钮位置,也就是<span class="pipe z">|</span>之后的那部分。之后需要用一段JS来初始化变量<script type="text/javascript">
var editorid = '';
var ATTACHNUM = {'imageused':0,'imageunused':0,'attachused':0,'attachunused':0}, ATTACHUNUSEDAID = new Array(), IMGUNUSEDAID = new Array();
</script>模版中最后的工作如下:
                                        <div class="fieldset flash" id="attachlist"></div>
                                                <!--{subtemplate common/upload}-->
                                                <script type="text/javascript">
                                                      var postminchars = parseInt('$_G['setting']['minpostsize']');
                                                      var postmaxchars = parseInt('$_G['setting']['maxpostsize']');
                                                      var disablepostctrl = parseInt('{$_G['group']['disablepostctrl']}');
                                                      var fid = parseInt(120);
                                                      var upload = new SWFUpload({
                                                                upload_url: "{$_G}misc.php?mod=swfupload&action=swfupload&operation=upload&fid=120",
                                                                post_params: {"uid" : "$_G", "hash":"$swfconfig"},
                                                                file_size_limit : "$swfconfig",
                                                                file_types : "$swfconfig",
                                                                file_types_description : "$swfconfig",
                                                                file_upload_limit : $swfconfig['limit'],
                                                                file_queue_limit : 0,
                                                                swfupload_preload_handler : preLoad,
                                                                swfupload_load_failed_handler : loadFailed,
                                                                file_dialog_start_handler : fileDialogStart,
                                                                file_queued_handler : fileQueued,
                                                                file_queue_error_handler : fileQueueError,
                                                                file_dialog_complete_handler : fileDialogComplete,
                                                                upload_start_handler : uploadStart,
                                                                upload_progress_handler : uploadProgress,
                                                                upload_error_handler : uploadError,
                                                                upload_success_handler : uploadSuccess,
                                                                upload_complete_handler : uploadComplete,
                                                                button_image_url : "{IMGDIR}/uploadbutton_small.png",
                                                                button_placeholder_id : "spanButtonPlaceholder",
                                                                button_width: 17,
                                                                button_height: 25,
                                                                button_cursor:SWFUpload.CURSOR.HAND,
                                                                button_window_mode: "transparent",
                                                                custom_settings : {
                                                                        progressTarget : "attachlist",
                                                                        uploadSource: 'forum',
                                                                        uploadType: 'attach',
                                                                        fid: 120,
                                                                        <!--{if $swfconfig['maxsizeperday']}-->
                                                                        maxSizePerDay: $swfconfig['maxsizeperday'],
                                                                        <!--{/if}-->
                                                                        <!--{if $swfconfig['maxattachnum']}-->
                                                                        maxAttachNum: $swfconfig['maxattachnum'],
                                                                        <!--{/if}-->
                                                                        uploadFrom: 'fastpost'
                                                                },
                                                                debug: false
                                                      });
                                                </script>
                              </div>
这是上传的控制JS,其中需要注意如下几点:

[*]引入common/upload作为上传JS的引入
[*]var fid = parseInt(120);来定义上传绑定的帖子所在的板块FID
[*]button_placeholder_id : "spanButtonPlaceholder",来定义在编辑器中用上传flash替换的span的ID
[*]button_image_url : "{IMGDIR}/uploadbutton_small.png",是定义上传按钮的图片
[*]custom_settings 设定组为最重要的部分,其中

[*]progressTarget : "attachlist",定义上传成功后返回附件列表的DIV
[*]uploadSource: 'forum',定义上传模式
[*]uploadType: 'attach',定义上传类型
[*]fid: 120,再次定义版块
[*]uploadFrom: 'fastpost'定义上传来源(本处为借鉴版块列表的快速发贴,因此定义为fastpost)
[*]最后,debug: false是定义是否开启上传的DEBUG的

到此,模版中的工作结束,转到对应PHP页面

作为发帖页面,一般会常规性引入: require_once libfile('function/forum');
require_once libfile('function/forumlist');
require_once libfile('function/discuzcode');
require_once libfile('function/post');
loadforum(120);
$forum = $_G['forum'];本例中引入了forumlist是因为模拟版块来实现DX3的模块化发帖初始$forum变量 //加载未使用附件
      $attachlist = getattach(0);
      $attachs = $attachlist['attachs'];
      $imgattachs = $attachlist['imgattachs'];
      unset($attachlist);
      !isset($attachs['unused']) && $attachs['unused'] = array();
      !isset($imgattachs['unused']) && $imgattachs['unused'] = array();
      foreach($attachs['unused'] as $value){
                $attachlist[$value['aid']] = $value;
      }
      foreach($imgattachs['unused'] as $value){
                $attachlist[$value['aid']] = $value;
      }此段代码用于加载未使用的附件和图片,然后把附件以及图片用aid为键来并入attachelist数组,实现调用,也为新增附件初始化变量然后在提交页面检查了submit后进行附件的更新信息处理updateattach($modnewthreads, $tid, $pid, $attachlist);函数在function_post,可以看一下流程,就能知道这是处理提交过来的未处理附件的更新处理
整理比较乱,见谅





页: [1]
查看完整版本: 引用DZ自带上传的方法总结(绑定帖子法)