织梦会员自定义图片

99ANYc3cd6
预计阅读时长 28 分钟
位置: 首页 织梦建站 正文

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

织梦会员自定义图片
(图片来源网络,侵删)
  1. 使用“多媒体”或“图片”字段(最简单、最推荐)
  2. 使用自定义表单+PHP文件上传(最灵活)

我会分别对这两种方法进行详细说明,并提供操作步骤。


使用“多媒体”或“图片”字段(最简单、最推荐)

这种方法利用了织梦后台强大的自定义模型功能,直接在会员模型中添加一个可以上传图片的字段,这是最标准、最安全、也最容易维护的方式。

适用场景:

  • 会员需要上传一张或多张图片,如头像、作品、封面图等。
  • 图片需要与会员的其他信息一起保存在数据库中。

操作步骤:

第一步:创建或修改会员模型

  1. 登录织梦后台
  2. 进入 【核心】 -> 模型管理】
  3. 你会看到一个名为 “普通会员” 的模型,点击它后面的 【字段管理】

第二步:添加新的图片字段

织梦会员自定义图片
(图片来源网络,侵删)
  1. 在字段管理页面,点击右上角的 【添加新字段】

  2. 填写字段信息:

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

第三步:在前台会员中心显示上传表单

织梦会员自定义图片
(图片来源网络,侵删)

织梦默认的会员编辑页面不会自动显示新添加的字段,你需要手动修改模板文件。

  1. 找到会员中心的编辑资料模板文件,路径通常是: templets/plus/profile_edit.htm

  2. 用代码编辑器打开这个文件。

  3. 在合适的位置(比如密码修改表单下方)添加以下代码:

    <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 文件处理逻辑不包含新字段的保存,你需要修改它。

  1. 打开文件:/member/soft_config.php (这个文件专门用来处理会员中心的自定义字段)。

  2. 找到类似这样的代码段:

    //更新普通会员信息
    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);
    }
  3. 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文件上传(最灵活)

这种方法不依赖织梦模型,而是创建一个独立的表单和处理脚本,完全由自己控制上传逻辑,适合需要复杂上传逻辑的场景。

适用场景:

  • 需要上传到独立目录。
  • 需要对图片进行复杂的处理(如加水印、裁剪、生成缩略图)。
  • 上传逻辑与会员核心信息关联不大。

操作步骤:

第一步:创建自定义表单页面

  1. 在你的模板目录下(如 templets/your_template/),创建一个新文件,upload_avatar.htm

  2. 在这个文件中,编写一个包含文件上传输入框的表单:

    <!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处理脚本

  1. /member/ 目录下,创建一个新文件 upload_avatar.php

  2. 编写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(): 织梦自带的提示信息函数。

第三步:在会员中心添加链接

  1. 打开会员中心首页模板 templets/plus/member_space.htm

  2. 在合适的位置(个人资料”旁边)添加一个链接,指向你刚创建的上传页面:

    <a href="/templets/your_template/upload_avatar.htm">上传头像</a>

总结与对比

特性 方法一 (模型字段) 方法二 (自定义表单)
易用性 ,后台配置即可,无需写代码。 ,需要手动创建模板和PHP文件。
灵活性 ,受限于织模型字段的功能。 ,可以完全自定义上传逻辑和目录。
维护性 ,与织梦系统无缝集成,升级方便。 ,自定义代码可能与系统升级冲突。
安全性 ,利用织梦内置的过滤机制。 ,需要自己编写代码进行安全处理(文件类型、大小、重命名等)。
适用场景 绝大多数常规需求,如头像、封面图。 特殊需求,如独立图库、复杂图片处理、与其他系统集成。

给新手的建议:

如果你是第一次接触织梦,或者需求不复杂,强烈推荐使用方法一,它更符合织梦的设计理念,也更稳定、更安全,方法二虽然灵活,但需要你具备一定的PHP和织梦内核知识,适合有经验的开发者进行二次开发。

-- 展开阅读全文 --
头像
阿里云服务器如何搭建织梦CMS系统?
« 上一篇 前天
30行C代码示例,精简入门还是进阶基础?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

目录[+]