dede表单value值如何正确填写?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

核心思路

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

dede填写表单value
(图片来源网络,侵删)
  1. 获取数据:首先需要从数据库中或通过其他方式获取你想要填入表单的值。
  2. 输出数据:然后使用 PHP 的 echo 或其他输出方法,将这个值填充到 HTML 表单元素的 value 属性中。

在 DedeCMS 中,我们最常用的数据来源是通过文章 ID 获取文章内容


在文章编辑页修改表单(最常见)

这是最经典的需求,你自定义了一个表单模型(产品”),现在要编辑一篇已有的产品文章,需要把文章的标题、价格、简介等信息自动填充到表单的输入框里。

步骤:

找到你的编辑模板文件

DedeCMS 的编辑页面通常位于 /templets/你的文件夹/目录名称_edit.htm。 如果你的自定义模型目录是 product,那么编辑模板文件就是 /templets/default/product_edit.htm

dede填写表单value
(图片来源网络,侵删)

在模板文件中定位表单元素

打开你的 product_edit.htm 文件,找到你想要赋值的表单元素,比如一个标题输入框。

使用 DedeCMS 的内置变量赋值

DedeCMS 在加载编辑页面时,已经通过 arc.edit.inc.php 等文件将当前文章的所有字段数据都读取出来,并存储在 $_POST 数组和 $fields 数组中(在模板中可以直接使用 $字段名 来访问)。

示例:

假设你的文章有一个自定义字段 price(价格),你在编辑页面需要将它显示在价格输入框中。

dede填写表单value
(图片来源网络,侵删)

修改前(空表单):

<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 就可以获取到当前登录用户的用户名。

总结与注意事项

  1. name 属性是关键:表单元素的 name 必须和 DedeCMS 后台的字段名(英文)完全对应。

  2. 编辑 vs 新增

    • 编辑页面:数据来源于 $fields['字段名'],用于回显已有数据。
    • 新增页面:数据可以来源于硬编码的默认值,或者来源于 PHP 动态变量(如 $cfg_ml->M_UserName)。
  3. 安全性:直接 echo 出来的数据如果包含特殊字符(如引号),可能会导致 HTML 结构错误或 XSS 漏洞,为了更安全,可以使用 htmlspecialchars() 函数进行转义。

    <input type="text" name="title" value="<?php echo htmlspecialchars($fields['title']); ?>" />

    这会将 < 转为 &lt;, 转为 &quot; 等,确保浏览器能正确显示,防止脚本注入。

  4. 调试value 没有显示出来,最简单的方法是使用 print_r()var_dump() 来检查数据是否存在。

    <?php
    // 在编辑模板的顶部加上这行,用于调试
    echo '<pre>';
    print_r($fields);
    echo '</pre>';
    ?>

    这样你就能在页面上看到所有可用的字段和它们的值,方便你确认字段名是否正确以及数据是否已正确读取。

-- 展开阅读全文 --
头像
织梦10万条数据如何优化?
« 上一篇 今天
织梦自定义标签怎么制作?
下一篇 » 今天

相关文章

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

目录[+]