manongxiaobing

OneThink原生系统中的图片上传功能是uploadify.swf插件进行上传的,默认是只能上传一张图片的,但是uploadify.swf是支持多图片批量上传的,那么我们稍加改动就可实现OneThink实现多图片批量上传功能。

首先我们修改模型管理中的字段类型选项,在里面添加一项“批量上传图片”,如下图所示。

OneThink实现多图片批量上传功能 - 第1张  | 码农小兵

添加方法:打开Application/Admin/Common/function.php文件,找到function get_attribute_type($type=”),在第86行下添加一项’uploadpics’ => array(‘批量上传图片’,’varchar(255) NOT NULL’)

/*********************
 *copyright www.devdo.net*
 *获取属性类型信息********
*********************/
function get_attribute_type($type=\'\'){
 // TODO 可以加入系统配置
 static $_type = array(
 \'num\' => array(\'数字\',\'int(10) UNSIGNED NOT NULL\'),
 \'string\' => array(\'字符串\',\'varchar(255) NOT NULL\'),
 \'textarea\' => array(\'文本框\',\'text NOT NULL\'),
 \'datetime\' => array(\'时间\',\'int(10) NOT NULL\'),
 \'bool\' => array(\'布尔\',\'tinyint(2) NOT NULL\'),
 \'select\' => array(\'枚举\',\'char(50) NOT NULL\'),
 \'radio\' => array(\'单选\',\'char(10) NOT NULL\'),
 \'checkbox\' => array(\'多选\',\'varchar(100) NOT NULL\'),
 \'editor\' => array(\'编辑器\',\'text NOT NULL\'),
 \'picture\' => array(\'上传图片\',\'int(10) UNSIGNED NOT NULL\'),
 \'uploadpics\' => array(\'批量上传图片\',\'varchar(255) NOT NULL\'), //批量上传图片项
 \'file\' => array(\'上传附件\',\'int(10) UNSIGNED NOT NULL\'),
 );
 return $type?$_type[$type][0]:$_type;
}

添加这一项后,你在后台添加字段的时候就可以进行选择了,不过要实现功能你还需要修改一些东西。

修改你的模板(如添加文章、修改文章模板),比如Application/Admin/View/Think/edit.html。在<case value=”picture”>…</case>下添加如下代码。

这里是为了实现具体图片上传功能。

<case value="uploadpics">
 <!-- 批量上传 --> 
 <input type="file" id="upload_all"> 
 <input type="hidden" name="{$field.name}" value="{$data[$field[\'name\']]}" class="input_upload_all"/>
 <div class="uploadpics_piclist">
 <ul class="highslide-gallery">
 <notempty name="data[$field[\'name\']]">
 <?php
 $pics=explode(\',\', $data[$field[\'name\']]);
 foreach($pics as $v){
 if($v!=\'\'){
 ?> 
 <li><a href="__ROOT__{$v|get_cover=\'path\'}" target="_blank"><img src="__ROOT__{$v|get_cover=\'path\'}"/></a><span onclick="delthispic(this)" dataid="{$v},"></span></li>
 <?php
 }
 }
 ?>
 </notempty>
 </ul>
 </div>
 <script type="text/javascript">
 //上传图片
 /* 初始化上传插件 */
 $("#upload_all").uploadify({
 "height" : 30,
 "swf" : "__STATIC__/uploadify/uploadify.swf",
 "fileObjName" : "download",
 "buttonText" : "批量上传图片",
 "uploader" : "{:U(\'File/uploadPicture\',array(\'session_id\'=>session_id()))}",
 "width" : 120,
 \'removeTimeout\' : 1,
 \'fileTypeExts\' : \'*.jpg; *.png; *.gif;\', 
 "onUploadSuccess" : uploadAll,
 \'onFallback\' : function() {
 alert(\'未检测到兼容版本的Flash.\');
 }
 });
 function uploadAll(file, data){ 
 var data = $.parseJSON(data); 
 
 var src = \'\';
 if(data.status){ 
 src = data.url || \'__ROOT__\' + data.path; 
 var value = \'<li><a href="\'+src+\'" class="highslide" onClick="return hs.expand(this)"><img src="\' + src + \'"/></a><span onclick="delthispic(this)" dataid="\'+data.id+\',"></span></li>\'; 
 $(\'.input_upload_all\').val($(\'.input_upload_all\').val()+data.id+\',\'); 
 
 $(\'.uploadpics_piclist ul\').append(value);
 
 } else {
 updateAlert(data.info);
 setTimeout(function(){
 $(\'#top-alert\').find(\'button\').click();
 $(that).removeClass(\'disabled\').prop(\'disabled\',false);
 },1500);
 }
 } 
 function delthispic(obj){
 var dataid=$(obj).attr(\'dataid\');
 $(\'.input_upload_all\').val($(\'.input_upload_all\').val().replace(dataid, ""));
 $(obj).parent().remove();
 }
 </script> 
 </case>

 

最终原理,定义一个字段,存取的是图片的ID序列,图片上传成功后保存ID,再通过ID获取图片地址。

明白原理后要实现其它地方上传(如前台上传),上传其它类型文件以及定义上传路径等就都可以扩展改编来实现。

如有不明白地方,请查看详情http://www.devdo.net/onethink-tupianpiliangshangchuan.html

分类:

技术点:

相关文章:

  • 2022-01-01
  • 2021-11-30
  • 2021-11-30
  • 2021-11-20
  • 2021-08-26
  • 2021-11-20
  • 2021-08-01
  • 2021-11-30
猜你喜欢
  • 2021-11-20
  • 2021-11-20
  • 2021-11-13
  • 2021-11-16
  • 2021-09-08
  • 2021-11-11
相关资源
相似解决方案