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

你所说的“注册模板变量”,实际上指的是 “在注册模板文件中,如何使用和调用 DedeCMS 系统预定义的变量,以及如何自定义新的变量”。
这个过程分为两个主要部分:
- 使用系统内置变量:直接在注册模板文件中使用,用于显示表单元素、错误提示等。
- 自定义变量:通过修改 PHP 源文件,向模板中传递你自己的数据,例如从数据库读取的某个配置项或列表。
下面我们分步详细讲解。
第一部分:使用 DedeCMS 内置的注册模板变量
DedeCMS 的用户注册功能是通过一个模板文件来控制前端样式的,这个模板文件通常位于:

/templets/default/reg_new.htm
打开这个文件,你会发现里面充满了各种变量,它们都以 {dede:...} 或 的形式出现,这些就是 DedeCMS 的模板标签(变量)。
常用的内置变量和标签
这些变量主要用于构建注册表单和显示提示信息。
a) 表单提交地址

<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="请输入您想注册的用户名" />
第二部分:自定义注册模板变量
如果你想在注册模板中显示一些系统默认不提供的内容,用户协议”、“网站名称”等,或者从数据库读取某个自定义字段,你就需要“自定义变量”。
这个过程分为两步:
- 在 PHP 文件中定义变量。
- 在模板文件中调用变量。
场景举例: 我们想在注册页面顶部显示网站的名称,并且这个名称是从后台配置中读取的,而不是直接写在模板里。
步骤 1: 修改 PHP 源文件
找到处理注册页面的 PHP 文件,这个文件通常是 /member/index.php(用于显示注册页面)。
- 打开
/member/index.php文件。 - 找到
require_once(DEDEINC.'/membermodel.php');这类引入模型文件的代码。 - 在
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 中“注册模板变量”的用法!
