由于织梦本身没有直接提供一个“上传自定义图片”的字段类型,我们需要通过以下两种主流方法来实现:

- 使用“多媒体”或“图片”字段(最简单、最推荐)
- 使用自定义表单+PHP文件上传(最灵活)
我会分别对这两种方法进行详细说明,并提供操作步骤。
使用“多媒体”或“图片”字段(最简单、最推荐)
这种方法利用了织梦后台强大的自定义模型功能,直接在会员模型中添加一个可以上传图片的字段,这是最标准、最安全、也最容易维护的方式。
适用场景:
- 会员需要上传一张或多张图片,如头像、作品、封面图等。
- 图片需要与会员的其他信息一起保存在数据库中。
操作步骤:
第一步:创建或修改会员模型
- 登录织梦后台。
- 进入 【核心】 -> 模型管理】。
- 你会看到一个名为 “普通会员” 的模型,点击它后面的 【字段管理】。
第二步:添加新的图片字段

-
在字段管理页面,点击右上角的 【添加新字段】。
-
填写字段信息:
- 字段名称:
user_avatar(建议用英文,方便调用) - 字段别名:
会员头像(这是后台显示的名称) - 字段类型: 务必选择【多媒体】 或 【图片】。
- 多媒体:可以上传图片、视频、音频等多种文件,但调用时需要判断类型。
- 图片:只能上传图片,调用时最简单,直接就是图片路径。推荐选择【图片】。
- 字段大小:
255(足够存放图片路径) - 默认值: 留空
- 提示文字:
请上传您的个人头像(在前台表单中显示给会员的提示) - 是否为必填项: 根据需要选择
是或否。 - 发布项: 勾选
会员。
- 字段名称:
-
点击 【保存】,一个新的图片字段就添加到会员模型里了。
第三步:在前台会员中心显示上传表单

织梦默认的会员编辑页面不会自动显示新添加的字段,你需要手动修改模板文件。
-
找到会员中心的编辑资料模板文件,路径通常是:
templets/plus/profile_edit.htm -
用代码编辑器打开这个文件。
-
在合适的位置(比如密码修改表单下方)添加以下代码:
<tr> <td height="25" align="right">会员头像:</td> <td> <input type="text" name="user_avatar" id="user_avatar" value="<?php echo $row['user_avatar']; ?>" style="width:300px" /> <input type="button" name="setuser_avatar" value="浏览..." style="width:70px" onclick="SelectImage('form1.user_avatar','big');" /> </td> </tr> <tr> <td height="25" align="right">预览:</td> <td> <img src="<?php echo $row['user_avatar'] ? $row['user_avatar'] : '/images/defaultpic.gif'; ?>" id="previewuser_avatar" style="max-width:200px; max-height:200px;" /> </td> </tr>name="user_avatar": 必须与你创建的字段名一致。value="<?php echo $row['user_avatar']; ?>": 用于显示会员当前已经上传的头像。onclick="SelectImage(...)": 这是织梦自带的弹出式图片选择器,方便会员从已上传的图片库中选择。id="previewuser_avatar": 用于实时预览上传的图片。
第四步:修改处理文件以保存数据
织梦默认的 profile_edit.php 文件处理逻辑不包含新字段的保存,你需要修改它。
-
打开文件:
/member/soft_config.php(这个文件专门用来处理会员中心的自定义字段)。 -
找到类似这样的代码段:
//更新普通会员信息 if($dopost=='save') { $query = "UPDATE `dede_member` SET `mtype`='$mtype', `sex`='$sex', `rank`='$rank', `email`='$email', `scores`='$scores', `money`='$money', `birthday`='$birthday', `safecode`='$safecode', `jointime`='$jointime', `mid`='$mid' WHERE mid='".$cfg_ml->M_ID."'"; $dsql->ExecuteNoneQuery($query); } -
在
SET后面、WHERE前面,加入你新添加的字段://更新普通会员信息 if($dopost=='save') { // 获取新字段的值,并进行安全过滤 $user_avatar = $dsql->GetTextVar('user_avatar'); $query = "UPDATE `dede_member` SET `mtype`='$mtype', `sex`='$sex', `rank`='$rank', `email`='$email', `scores`='$scores', `money`='$money', `birthday`='$birthday', `safecode`='$safecode', `jointime`='$jointime', `mid`='$mid', `user_avatar`='$user_avatar' // <-- 添加这一行 WHERE mid='".$cfg_ml->M_ID."'"; $dsql->ExecuteNoneQuery($query); }
第五步:在前台模板中调用会员自定义图片
你可以在任何需要显示会员头像的地方调用这个字段了。
假设在文章列表页 templets/default/list_article.htm 中,你想显示发布者的头像:
{dede:field name='writer' function='GetWriterUrl(@me)'/}
可以修改为:
<img src="{dede:global name='cfg_memberurl'/}/space/img/avatar/<?php echo $row['user_avatar'] ? $row['user_avatar'] : 'default.jpg'; ?>" alt="作者头像" />
或者,如果你使用织梦的标签调用,可以在循环体内使用:
{dede:arclist titlelen='30'}
<li>
<img src="[field:mid runphp='yes'] global $cfg_memberurl; $mid = @me; $row = $GLOBALS['dsql']->GetOne("SELECT user_avatar FROM dede_member WHERE mid = $mid"); @me = $cfg_memberurl.'/space/img/avatar/'.$row['user_avatar']; [/field:mid]" alt="[field:title function='htmlspecialchars(@me)'/]" />
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
注意:上面的调用方式比较复杂,更推荐直接在PHP环境中开发,或者使用更高级的标签。
使用自定义表单+PHP文件上传(最灵活)
这种方法不依赖织梦模型,而是创建一个独立的表单和处理脚本,完全由自己控制上传逻辑,适合需要复杂上传逻辑的场景。
适用场景:
- 需要上传到独立目录。
- 需要对图片进行复杂的处理(如加水印、裁剪、生成缩略图)。
- 上传逻辑与会员核心信息关联不大。
操作步骤:
第一步:创建自定义表单页面
-
在你的模板目录下(如
templets/your_template/),创建一个新文件,upload_avatar.htm。 -
在这个文件中,编写一个包含文件上传输入框的表单:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>上传我的头像</title> </head> <body> <form name="myform" action="/member/upload_avatar.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="dopost" value="upload" /> <input type="file" name="avatar" /> <input type="submit" value="上传" /> </form> </body> </html>enctype="multipart/form-data": 文件上传表单必须带这个属性。action="/member/upload_avatar.php": 指向我们将要创建的处理脚本。
第二步:创建PHP处理脚本
-
在
/member/目录下,创建一个新文件upload_avatar.php。 -
编写PHP代码来处理上传:
<?php require_once(dirname(__FILE__)."/config.php"); CheckRank(0, 0); // 如果是上传请求 if($dopost == 'upload') { // 1. 获取会员ID $mid = $cfg_ml->M_ID; // 2. 设置上传目录 $uploadDir = DEDEDATA . '/member/upload/'; // 建议放在数据目录下,更安全 if (!is_dir($uploadDir)) { mkdir($uploadDir, 0777, true); } // 3. 处理上传的文件 $upload = new upload('avatar', 'jpg|jpeg|gif|png', $uploadDir, $mid); if($upload->save()) { // 上传成功,获取文件名 $filename = $upload->GetFilePath(); // 4. (可选)将文件名保存到数据库 // 假设我们有一个表 `dede_member_info` 存储扩展信息 $sql = "UPDATE dede_member SET user_avatar = '{$filename}' WHERE mid = {$mid}"; $dsql->ExecuteNoneQuery($sql); // 5. 提示成功并跳转 ShowMsg('上传成功!', 'javascript:history.go(-1);', 0, 2000); exit(); } else { // 上传失败 ShowMsg('上传失败:' . $upload->GetError(), 'javascript:history.go(-1);', 0, 2000); exit(); } } ?>require_once...config.php: 引入织梦核心配置,确保在织梦环境中运行。CheckRank(0, 0);: 检查会员是否登录。upload: 这是织梦自带的文件上传类,非常方便,你需要确保文件名和参数正确。DEDEDATA: 织梦定义的数据目录常量。ShowMsg(): 织梦自带的提示信息函数。
第三步:在会员中心添加链接
-
打开会员中心首页模板
templets/plus/member_space.htm。 -
在合适的位置(个人资料”旁边)添加一个链接,指向你刚创建的上传页面:
<a href="/templets/your_template/upload_avatar.htm">上传头像</a>
总结与对比
| 特性 | 方法一 (模型字段) | 方法二 (自定义表单) |
|---|---|---|
| 易用性 | 高,后台配置即可,无需写代码。 | 低,需要手动创建模板和PHP文件。 |
| 灵活性 | 低,受限于织模型字段的功能。 | 高,可以完全自定义上传逻辑和目录。 |
| 维护性 | 高,与织梦系统无缝集成,升级方便。 | 低,自定义代码可能与系统升级冲突。 |
| 安全性 | 高,利用织梦内置的过滤机制。 | 中,需要自己编写代码进行安全处理(文件类型、大小、重命名等)。 |
| 适用场景 | 绝大多数常规需求,如头像、封面图。 | 特殊需求,如独立图库、复杂图片处理、与其他系统集成。 |
给新手的建议:
如果你是第一次接触织梦,或者需求不复杂,强烈推荐使用方法一,它更符合织梦的设计理念,也更稳定、更安全,方法二虽然灵活,但需要你具备一定的PHP和织梦内核知识,适合有经验的开发者进行二次开发。
