在 DedeCMS 中,并没有一个叫做“注册模板变量”的后台设置选项。

dede 注册模板变量
(图片来源网络,侵删)

你所说的“注册模板变量”,实际上指的是 “在注册模板文件中,如何使用和调用 DedeCMS 系统预定义的变量,以及如何自定义新的变量”

这个过程分为两个主要部分:

  1. 使用系统内置变量:直接在注册模板文件中使用,用于显示表单元素、错误提示等。
  2. 自定义变量:通过修改 PHP 源文件,向模板中传递你自己的数据,例如从数据库读取的某个配置项或列表。

下面我们分步详细讲解。


第一部分:使用 DedeCMS 内置的注册模板变量

DedeCMS 的用户注册功能是通过一个模板文件来控制前端样式的,这个模板文件通常位于:

dede 注册模板变量
(图片来源网络,侵删)

/templets/default/reg_new.htm

打开这个文件,你会发现里面充满了各种变量,它们都以 {dede:...} 或 的形式出现,这些就是 DedeCMS 的模板标签(变量)。

常用的内置变量和标签

这些变量主要用于构建注册表单和显示提示信息。

a) 表单提交地址

dede 注册模板变量
(图片来源网络,侵删)
<form name="form1" method="post" action="{dede:global.cfg_cmspath/}/member/index_do.php" enctype="multipart/form-data">
  • {dede:global.cfg_cmspath/}: 这是 DedeCMS 的一个全局变量,代表你的网站根目录,确保表单提交到正确的处理文件 index_do.php

b) 隐藏的安全字段

<input type="hidden" name="dopost" value="regnew" />
<input type="hidden" name="product" value="" />
  • dopost="regnew": 这个隐藏字段告诉后台处理程序,当前执行的是“新用户注册”操作。这个字段是必须的,不能删除或修改。

c) CSRF 防护令牌

<input type="hidden" name="safeid" value="{dede:global.safeid/}" />
  • {dede:global.safeid/}: 用于防止跨站请求伪造攻击,是 DedeCMS 的安全机制。

d) 输入框和标签 这些变量通常成对出现,用于显示表单的标签和输入框的 name 属性。

  • 用户名:<input type="text" name="userid" />
  • 密码:<input type="password" name="pwd" />
  • 确认密码:<input type="password" name="pwdok" />
  • 电子邮箱:<input type="text" name="email" />
  • 验证码:<input type="text" name="validate" />

e) 验证码图片

<img src="{dede:global.cfg_cmspath/}/member/validateimg.php" id="validateimg">
  • 这行代码会生成一个验证码图片,validateimg.php 是 DedeCMS 内置的验证码生成脚本。

f) 提示信息变量 这些变量通常在表单提交后,由 PHP 脚本根据处理结果进行赋值,用于显示成功或失败的信息。

  • {dede:global.namemsg/}: 显示用户名相关的错误信息(如“用户名已存在”)。
  • {dede:global.pwdmsg/}: 显示密码相关的错误信息。
  • {dede:global.emailmsg/}: 显示邮箱相关的错误信息。
  • {dede:global.validatemsg/}: 显示验证码相关的错误信息。

g) 动态JS和URL

  • {dede:global.cfg_memberurl/}: 会员中心的 URL。
  • <script language="javascript" type="text/javascript" src="{dede:global.cfg_cmspath/}/member/js/reg_new.js"></script>: 注册页面所需的 JavaScript 文件。

如何使用这些变量?

你不需要在后台做任何设置,直接打开 /templets/default/reg_new.htm 文件,像修改普通 HTML 一样修改这些标签即可,想修改用户名输入框的提示文字:

<!-- 修改前 -->
<input type="text" name="userid" />
<!-- 修改后 -->
<input type="text" name="userid" placeholder="请输入您想注册的用户名" />

第二部分:自定义注册模板变量

如果你想在注册模板中显示一些系统默认不提供的内容,用户协议”、“网站名称”等,或者从数据库读取某个自定义字段,你就需要“自定义变量”。

这个过程分为两步:

  1. 在 PHP 文件中定义变量
  2. 在模板文件中调用变量

场景举例: 我们想在注册页面顶部显示网站的名称,并且这个名称是从后台配置中读取的,而不是直接写在模板里。

步骤 1: 修改 PHP 源文件

找到处理注册页面的 PHP 文件,这个文件通常是 /member/index.php(用于显示注册页面)。

  1. 打开 /member/index.php 文件。
  2. 找到 require_once(DEDEINC.'/membermodel.php'); 这类引入模型文件的代码。
  3. require_once 之后,require_once(DEDETEMPLATE.'/member/reg_new.htm'); 之前,添加你的自定义变量。

示例代码:

// ... 其他代码 ...
// 引入会员模型
require_once(DEDEINC.'/membermodel.php');
// ====== 在这里添加你的自定义变量 ======
// 获取网站名称,并将其赋值给一个名为 'my_site_name' 的变量
$my_site_name = $cfg_webname;
// 将变量传递给模板,使其在模板中可用
$GLOBALS['my_site_name'] = $my_site_name;
// =====================================
// 加载注册模板
require_once(DEDETEMPLATE.'/member/reg_new.htm');
// ... 其他代码 ...

步骤 2: 在模板文件中调用变量

打开你的注册模板文件 /templets/default/reg_new.htm,在你想显示网站名称的地方,使用以下语法调用变量:

<div class="register-header">
    <h1>欢迎注册 {$my_site_name} 会员</h1>
    <p>成为我们的会员,享受更多专属服务!</p>
</div>

语法说明:

  • {$变量名}:这是 DedeCMS 模板中调用简单变量最常用的方式。 符号表示这是一个变量,花括号 包裹变量名,可以有效避免变量名与周围文本混淆。

进阶:传递数组或复杂对象

如果你想传递更复杂的数据,比如一个文章列表或配置项数组。

PHP 端:

// 假设你有一个自定义配置项,存储在 `dede_sysconfig` 表中
// 这里我们模拟一个配置项
$custom_config = array(
    'agreement_title' => '用户注册协议',
    'agreement_content' => '请仔细阅读以下协议...'
);
$GLOBALS['custom_config'] = $custom_config;

模板端:

<h2>{$custom_config.agreement_title}</h2>
<div class="agreement-content">
    {$custom_config.agreement_content}
</div>

需求 解决方案 关键点
修改注册页面的样式、文字 直接编辑模板文件 /templets/default/reg_new.htm 使用 {dede:global.xxx/} 和表单元素的 name 属性。
使用系统内置变量 无需操作,直接在模板文件中使用 理解 dopost, safeid, cfg_cmspath 等全局变量的作用。
添加一个简单的自定义文本 修改 member/index.php 定义变量。
在模板中使用 {$变量名} 调用。
PHP 中用 $GLOBALS['var'] = value;,模板中用 {$var}
添加一个动态获取的列表或配置 在 PHP 中查询数据库,将结果存为数组。
通过 $GLOBALS 传递给模板。
在模板中使用 {dede:var.name/}{$var.key} 调用。
PHP 端负责数据获取和传递,模板端负责数据展示。

希望这个详细的解释能帮助你完全理解 DedeCMS 中“注册模板变量”的用法!