核心思路
无论哪种情况,核心思路都是一致的:

- 获取数据:首先需要从数据库中或通过其他方式获取你想要填入表单的值。
- 输出数据:然后使用 PHP 的
echo或其他输出方法,将这个值填充到 HTML 表单元素的value属性中。
在 DedeCMS 中,我们最常用的数据来源是通过文章 ID 获取文章内容。
在文章编辑页修改表单(最常见)
这是最经典的需求,你自定义了一个表单模型(产品”),现在要编辑一篇已有的产品文章,需要把文章的标题、价格、简介等信息自动填充到表单的输入框里。
步骤:
找到你的编辑模板文件
DedeCMS 的编辑页面通常位于 /templets/你的文件夹/目录名称_edit.htm。
如果你的自定义模型目录是 product,那么编辑模板文件就是 /templets/default/product_edit.htm。

在模板文件中定位表单元素
打开你的 product_edit.htm 文件,找到你想要赋值的表单元素,比如一个标题输入框。
使用 DedeCMS 的内置变量赋值
DedeCMS 在加载编辑页面时,已经通过 arc.edit.inc.php 等文件将当前文章的所有字段数据都读取出来,并存储在 $_POST 数组和 $fields 数组中(在模板中可以直接使用 $字段名 来访问)。
示例:
假设你的文章有一个自定义字段 price(价格),你在编辑页面需要将它显示在价格输入框中。

修改前(空表单):
<input type="text" name="price" id="price" size="40" class="input-text" />
修改后(自动填充数据):
<input type="text" name="price" id="price" size="40" class="input-text" value="<?php echo $fields['price']; ?>" />
代码解析:
name="price":这个name属性必须和你后台自定义字段中的“字段名称”完全一致,这是 DedeCMS 接收和返回数据的关键。value="...":这里就是我们要填充的地方。<?php echo $fields['price']; ?>:这是 PHP 代码。$fields是一个包含了当前文章所有自定义字段值的数组。$fields['price']就取出了price字段的值,并用echo输出到value属性中。
其他常见元素示例:
-
文本域:
<textarea name="content" id="content" rows="8" cols="60"><?php echo $fields['content']; ?></textarea>
-
下拉选择框:
<select name="category"> <option value="1"<?php if ($fields['category'] == '1') echo ' selected="selected"'; ?>>分类一</option> <option value="2"<?php if ($fields['category'] == '2') echo ' selected="selected"'; ?>>分类二</option> </select>注意:下拉框需要判断,如果当前值等于某个选项的
value,则加上selected="selected"属性来使其被选中。 -
单选按钮:
<input type="radio" name="is_on_sale" value="1" <?php if ($fields['is_on_sale'] == '1') echo 'checked'; ?> /> 是 <input type="radio" name="is_on_sale" value="0" <?php if ($fields['is_on_sale'] == '0') echo 'checked'; ?> /> 否
注意:单选框使用
checked属性来标记被选中的项。 -
复选框: 复选框稍微复杂一点,因为值通常是数组,假设
tags字段存储的是逗号分隔的标签,如 "标签1,标签2,标签3"。<input type="checkbox" name="tags[]" value="标签1" <?php if (strpos($fields['tags'], '标签1') !== false) echo 'checked'; ?> /> 标签1 <input type="checkbox" name="tags[]" value="标签2" <?php if (strpos($fields['tags'], '标签2') !== false) echo 'checked'; ?> /> 标签2 <input type="checkbox" name="tags[]" value="标签3" <?php if (strpos($fields['tags'], '标签3') !== false) echo 'checked'; ?> /> 标签3
注意:复选框的
name通常写成tags[]以便 PHP 接收为数组,判断逻辑是检查当前字段的值中是否包含选项的值。
在新增页面设置默认值
你希望在新增文章时,某些字段就有一个默认值,而不是让用户每次都输入。
示例:
假设新增“产品”时,默认的“库存”都是 100。
模板代码:
<input type="text" name="stock" id="stock" size="10" class="input-text" value="100" />
代码解析:
这种情况下,你不需要 PHP 代码,直接在 value 属性里写死你想要的默认值即可,DedeCMS 在新增时,如果没有用户输入,就会使用这个默认值。
结合动态数据(如当前用户ID)
你需要根据当前登录的用户或其他动态信息来设置默认值。
示例:
新增文章时,自动将作者字段填入当前登录的用户名。
模板代码:
<input type="text" name="author" id="author" size="40" class="input-text" value="<?php echo $cfg_ml->M_UserName; ?>" />
代码解析:
<?php echo $cfg_ml->M_UserName; ?>:$cfg_ml是 DedeCMS 的用户登录类对象。$cfg_ml->M_UserName就可以获取到当前登录用户的用户名。
总结与注意事项
-
name属性是关键:表单元素的name必须和 DedeCMS 后台的字段名(英文)完全对应。 -
编辑 vs 新增:
- 编辑页面:数据来源于
$fields['字段名'],用于回显已有数据。 - 新增页面:数据可以来源于硬编码的默认值,或者来源于 PHP 动态变量(如
$cfg_ml->M_UserName)。
- 编辑页面:数据来源于
-
安全性:直接
echo出来的数据如果包含特殊字符(如引号),可能会导致 HTML 结构错误或 XSS 漏洞,为了更安全,可以使用htmlspecialchars()函数进行转义。<input type="text" name="title" value="<?php echo htmlspecialchars($fields['title']); ?>" />
这会将
<转为<, 转为"等,确保浏览器能正确显示,防止脚本注入。 -
调试:
value没有显示出来,最简单的方法是使用print_r()或var_dump()来检查数据是否存在。<?php // 在编辑模板的顶部加上这行,用于调试 echo '<pre>'; print_r($fields); echo '</pre>'; ?>
这样你就能在页面上看到所有可用的字段和它们的值,方便你确认字段名是否正确以及数据是否已正确读取。
