解决 Dedecms 游客投稿图片字段无法上传的问题
在开发一个微商货源网站时,遇到了 Dedecms 游客投稿功能的一个问题:后台设置好游客投稿后,在前台发布时,上传图片字段仍需要登录才能上传。更糟糕的是,即使登录并上传了图片,也无法选择上传的图片。
为了解决这个问题,我们需要对相关代码进行修改。以下是具体步骤:
首先,在 archives_add.htm 文件中,需要对表单字段进行调整:
<label>货源封面:</label>
<input class="file" name="touxiang" type="file" id="touxiang" onchange="SeePicNew('divpicview',this);" />
接着,在 archives_add.php 文件中,添加以下代码以接收并保存上传的图片:
$filename = MemberUploads('touxiang','',$cfg_ml->M_ID,'image','',-1,-1,true);
SaveUploadInfo($title,$filename,1);
这里使用了 Dedecms 的 MemberUploads 函数来处理文件上传。接下来详细介绍该函数的参数:
1. $upname - 这是文件上传的 input 标签对应的名称。
2. $handname - 图片存储的文件夹名称。
3. $userid - 默认会员 ID。
4. $utype - 文件类型(如 image 表示图片)。
5. $exname - 文件上传后的名称。如果未指定,则会随机生成。
6. $maxwidth 和 $maxheight - 上传后图片的最大尺寸。
7. $water 和 $isadmin - 是否加水印和操作者是否为管理员。
在 upload.helper.php 文件中,可以找到 MemberUploads 函数的具体实现:
function MemberUploads($upname,$handname,$userid=0,$utype='image',$exname='',$maxwidth=0,$maxheight=0,$water=false,$isadmin=false)
如果要上传的文件夹不存在,函数会尝试自动创建:
if(!is_dir($cfg_basedir.$cfg_user_dir."/$userid"))
{
MkdirAll($cfg_basedir.$cfg_user_dir."/$userid", $cfg_dir_purview);
CloseFtp();
}
生成的文件名规则如下:
if($exname=='')
{
$filename = $cfg_user_dir."/$userid/".dd2char($nowtme.'-'.mt_rand(1000,9999)).'.'.$sname;
}
else
{
$filename = $cfg_user_dir."/{$userid}/{$exname}.".$sname;
}
通过上述方法,可以成功解决 Dedecms 游客投稿图片字段无法上传的问题。
希望本文能帮助到正在处理类似问题的开发者们!
换行标签:
空格标签: