织梦会员中心模板如何调用?

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

织梦会员中心是一个独立的系统,它有自己的模板引擎和目录结构,理解这一点是关键,与主站调用 {dede:} 标签不同,会员中心主要使用 PHP原生代码自定义函数 来调用数据。

织梦会员中心模板调用
(图片来源网络,侵删)

会员中心模板文件结构

你需要知道会员中心模板文件在哪里,默认情况下,它们位于:

/templets/你的会员目录/

这里的“你的会员目录”是在后台“系统” -> “系统基本参数” -> “会员设置”中设置的,通常是 member/

在这个目录下,你会看到多个子文件夹,每个文件夹对应一个会员中心的功能模块:

织梦会员中心模板调用
(图片来源网络,侵删)
  • index.php / index.htm: 会员中心首页模板。
  • space/: 个人空间模板。
  • profile/: 资料修改模板。
  • article/: 发布、管理文章的模板。
  • myfriend/: 好友管理模板。
  • pm/: 站内信模板。
  • shop/: 商城相关模板(如果商城是独立模块)。
  • favorite/: 收藏夹模板。
  • ...等等。

核心思想:你要修改哪个页面,就去对应的文件夹里找 .htm 模板文件进行编辑。


主要调用方式

会员中心模板主要使用以下几种方式来调用数据:

使用PHP原生代码

这是最常用、最核心的方式,因为会员中心模板最终会被PHP文件解析,所以你可以在 .htm 文件中直接写PHP代码。

示例:在会员首页调用当前会员的用户名和头像

织梦会员中心模板调用
(图片来源网络,侵删)

假设你的会员首页模板是 index.htm,你可以在模板的任意位置添加如下代码:

<div class="user-info">
    <p>欢迎您,<strong><?php echo $cfg_ml->M_UserName; ?></strong>!</p>
    <img src="<?php echo $cfg_ml->M_MbType; ?>" alt="用户头像">
</div>

代码解析:

  • $cfg_ml: 这是织梦会员中心的核心对象,代表当前登录的会员实例。
  • $cfg_ml->M_UserName: 获取当前会员的用户名。
  • $cfg_ml->M_MbType: 获取会员的头像地址(这取决于你的会员模型设置,通常存储的是头像图片的路径)。

其他常用 $cfg_ml 属性:

  • M_ID: 会员ID
  • M_Money: 会员余额
  • M_Scores: 会员积分
  • M_Rank: 会员等级
  • M_Email: 会员邮箱
  • M_Imode: 会员模式 (如个人、企业)

调用会员发布的文章/信息

会员中心最常用的功能之一就是展示会员自己发布的内容,这通常需要结合PHP循环和SQL查询。

示例:在会员首页展示该会员发布的最新5篇文章

<div class="my-articles">
    <h3>我发布的文章</h3>
    <ul>
        <?php
        $dsql->SetQuery("SELECT * FROM `#@__archives` WHERE mid='{$cfg_ml->M_ID}' AND arcrank=0 ORDER BY pubdate DESC LIMIT 0, 5");
        $dsql->Execute();
        while($row = $dsql->GetObject())
        {
        ?>
            <li>
                <a href="<?php echo GetOneArchive($row->id); ?>"><?php echo $row->title; ?></a>
                <span><?php echo MyDate('Y-m-d', $row->pubdate); ?></span>
            </li>
        <?php
        }
        ?>
    </ul>
</div>

代码解析:

  • $dsql: 织梦的数据库操作对象,用于执行SQL查询。
  • SetQuery(): 设置要执行的SQL语句。
    • #@__archives: 这是织梦表前缀 dede_ 的别名,写代码时用这个,系统会自动替换。
    • mid='{$cfg_ml->M_ID}': 关键条件,只查询当前会员发布的内容。
    • arcrank=0: 只查询已通过审核的文章(arcrank=-1为待审核,-2为回收站)。
    • ORDER BY pubdate DESC LIMIT 0, 5: 按发布时间倒序排列,只取前5条。
  • Execute(): 执行查询。
  • while($row = $dsql->GetObject()): 循环遍历查询结果,$row 是一个对象,包含了当前行的数据。
  • $row->id: 文章ID。
  • $row->title: 文章标题。
  • $row->pubdate: 文章发布时间戳。
  • GetOneArchive($row->id): 这是一个织梦内置函数,根据文章ID获取其正确的URL链接。
  • MyDate(): 织梦日期格式化函数。

调用系统全局标签

虽然会员中心以PHP为主,但在某些场景下,你也可以使用主站的 {dede:} 标签,但需要通过 lib_main.php 中的相关函数来解析。

示例:调用会员中心的导航菜单

会员中心的导航菜单通常是通过一个标签来生成的,这个标签在 templets/plus/menu.htm 文件中定义。

你可以在你的模板中这样引入:

{dede:include filename="menu.htm"/}

这个 menu.htm 文件内部可能也使用了PHP代码来动态生成菜单项。


实战案例:修改会员首页 (index.htm)

假设你想做一个简单的会员首页,包含以下模块:

  1. 欢迎信息和用户头像。
  2. 会员账户概览(余额、积分)。
  3. 最近发布的3篇文章。
  4. 最近收藏的5个栏目。

模板代码示例 (index.htm):

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">会员中心 - {dede:global.cfg_webname/}</title>
    <link rel="stylesheet" href="/templets/member/style.css">
</head>
<body>
    {dede:include filename="head.htm"/} <!-- 通常包含会员中心的头部和导航 -->
    <div class="main">
        <div class="left">
            <!-- 欢迎信息和用户头像 -->
            <div class="user-profile">
                <img src="<?php echo $cfg_ml->M_MbType; ?>" alt="头像" class="avatar">
                <div class="info">
                    <h2>欢迎回来,<strong><?php echo $cfg_ml->M_UserName; ?></strong>!</h2>
                    <p>等级:<?php echo $cfg_ml->M_Rank; ?></p>
                </div>
            </div>
            <!-- 会员账户概览 -->
            <div class="account-overview">
                <h3>账户概览</h3>
                <ul>
                    <li>余额:<strong><?php echo $cfg_ml->M_Money; ?></strong> 元</li>
                    <li>积分:<strong><?php echo $cfg_ml->M_Scores; ?></strong> 分</li>
                </ul>
            </div>
            <!-- 最近发布的文章 -->
            <div class="recent-articles">
                <h3>最近发布的文章</h3>
                <?php
                $dsql->SetQuery("SELECT id, title, pubdate FROM `#@__archives` WHERE mid='{$cfg_ml->M_ID}' AND arcrank=0 ORDER BY pubdate DESC LIMIT 0, 3");
                $dsql->Execute();
                if($dsql->GetTotalRow() > 0) {
                ?>
                    <ul>
                        <?php while($row = $dsql->GetObject()){ ?>
                        <li>
                            <a href="<?php echo GetOneArchive($row->id); ?>"><?php echo $row->title; ?></a>
                            <span><?php echo MyDate('m-d', $row->pubdate); ?></span>
                        </li>
                        <?php } ?>
                    </ul>
                <?php } else { ?>
                    <p>您还没有发布过文章。</p>
                <?php } ?>
            </div>
        </div>
        <div class="right">
            <!-- 最近收藏的栏目 -->
            <div class="recent-favorites">
                <h3>我的收藏</h3>
                <?php
                // 调用收藏夹的标签,需要用到特定的函数
                // 这是一个更复杂的例子,展示了如何调用非标准数据表
                $dsql->SetQuery("SELECT * FROM `#@__member_stow` WHERE mid='{$cfg_ml->M_ID}' ORDER BY addtime DESC LIMIT 0, 5");
                $dsql->Execute();
                if($dsql->GetTotalRow() > 0) {
                ?>
                    <ul>
                        <?php while($row = $dsql->GetObject()){ ?>
                        <li>
                            <a href="<?php echo $row->url; ?>" target="_blank"><?php echo $row->title; ?></a>
                        </li>
                        <?php } ?>
                    </ul>
                <?php } else { ?>
                    <p>您还没有收藏任何内容。</p>
                <?php } ?>
            </div>
        </div>
    </div>
    {dede:include filename="foot.htm"/} <!-- 页脚 -->
</body>
</html>

重要技巧与注意事项

  1. 文件命名规范:会员中心的模板文件通常是 index.htm, list.htm, info.htm 等,后台的PHP文件(如 index.php)会负责获取数据并包含对应的 .htm 模板文件。
  2. 路径问题:模板中的CSS、JS、图片等资源路径,最好使用绝对路径(如 /templets/member/style.css)或者织梦的全局变量 {dede:global.cfg_templets_dir/},避免路径错乱。
  3. 安全第一:在会员中心,用户输入是不可信的,如果涉及到表单提交或用户生成内容的展示,一定要做好数据过滤和转义,防止XSS等攻击,虽然 $dsql->GetObject() 已经做了基本的防护,但养成好习惯总是对的。
  4. 调试技巧:如果代码不生效,可以尝试在PHP代码块中 echo $cfg_ml->M_ID; 来确认变量是否正确获取,也可以开启PHP错误报告来查看具体错误。
  5. 查看源码:学习织梦默认会员中心模板是最好的方法,直接去 templets/member/ 目录下,打开默认的 index.htm 等文件,看看官方是如何实现的,然后模仿和修改。
需求 推荐方法 示例
获取当前会员信息 使用 $cfg_ml 对象 <?php echo $cfg_ml->M_UserName; ?>
调用会员发布的文章/商品 使用 $dsql 执行SQL查询 SELECT ... FROM#@__archivesWHERE mid='{$cfg_ml->M_ID}'
调用会员收藏/好友等 使用 $dsql 查询对应的数据表 SELECT ... FROM#@__member_stowWHERE mid='{$cfg_ml->M_ID}'
调用系统固定模块(如菜单) 使用 {dede:include} 或特定标签 {dede:include filename="menu.htm"/}
格式化日期/获取链接 使用织梦内置函数 MyDate(), GetOneArchive()

掌握了PHP原生代码和SQL查询在会员中心模板中的应用,你就可以随心所欲地定制任何会员中心页面了。

-- 展开阅读全文 --
头像
dede如何添加下载链接?
« 上一篇 今天
C语言与汇编语言如何联合编程?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]