dede提示页如何调用自定义表单字段?

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

核心原理

无论哪种方法,其核心原理都是相通的:

dede提示页调用自定义表单字段
(图片来源网络,侵删)
  1. 数据暂存:当用户提交自定义表单时,DedeCMS 不会立即将数据写入 dede_addonxx 数据表,相反,它会将表单数据暂存在一个临时的会话(Session)变量中,$_SESSION['dede_addon']
  2. 页面跳转:提交成功后,页面会跳转到指定的提示页(如 post_ok.htm)。
  3. 数据提取:在提示页模板文件中,我们需要通过 PHP 代码从 $_SESSION 变量中取出之前暂存的表单数据。
  4. 数据赋值:将取出的数据赋值给 DedeCMS 的一个全局变量(通常是 Fieldsdigg)。
  5. 模板调用:在模板文件中,使用 DedeCMS 的全局标签 {dede:field.name/} 来显示这些数据。

修改 post_ok.htm 模板文件(最推荐、最安全)

这是最直接、最推荐的方法,因为它只修改模板文件,不涉及核心文件,升级系统时不会被覆盖。

步骤 1:找到并编辑 post_ok.htm

  1. 登录你的 DedeCMS 后台。
  2. 进入【模板】->【默认模板管理】。
  3. 找到并点击你当前使用的模板文件夹,进入编辑。
  4. 在文件列表中找到 post_ok.htm 文件,点击后面的【修改】。

步骤 2:在模板文件中添加 PHP 代码和调用标签

打开 post_ok.htm 文件后,在 <body> 标签内的合适位置(比如标题下方或内容区域)进行如下操作:

添加 PHP 代码块

在模板的任意位置(建议放在最上面或最下面),加入以下 PHP 代码,这段代码的作用是从 Session 中读取数据并赋值给一个全局变量 $Fields

dede提示页调用自定义表单字段
(图片来源网络,侵删)
{dede:php}
    // 检查 Session 中是否存在自定义表单数据
    if (isset($_SESSION['dede_addon'])) {
        // 将 Session 数据赋值给一个全局变量 $Fields
        $GLOBALS['Fields'] = $_SESSION['dede_addon'];
    }
{/dede:php}

在页面中调用字段

你可以在页面的任何地方使用 {dede:field.字段名/} 来调用你提交的自定义表单字段了。

如果你的自定义表单有 name(姓名)、tel(电话)和 content)三个字段,你可以在 post_ok.htm 中这样写:

<div class="success-tips">
    <h3>提交成功!</h3>
    <p>感谢您的留言,我们会尽快与您联系。</p>
    <div class="submited-info">
        <h4>您提交的信息如下:</h4>
        <p><strong>姓名:</strong>{dede:field.name/}</p>
        <p><strong>电话:</strong>{dede:field.tel/}</p>
        <p><strong>留言内容:</strong>{dede:field.content/}</p>
    </div>
</div>

完整示例 post_ok.htm

dede提示页调用自定义表单字段
(图片来源网络,侵删)
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">提交成功</title>
</head>
<body>
    {dede:php}
        // 核心代码:从 Session 中提取数据并赋值给全局变量
        if (isset($_SESSION['dede_addon'])) {
            $GLOBALS['Fields'] = $_SESSION['dede_addon'];
        }
    {/dede:php}
    <div class="container">
        <div class="success-message">
            <h1>提交成功!</h1>
            <p>您的信息已成功提交,请耐心等待。</p>
            <!-- 在这里调用自定义字段 -->
            <div class="form-data">
                <h2>您提交的信息:</h2>
                <ul>
                    <li>姓名:{dede:field.name/}</li>
                    <li>电话:{dede:field.tel/}</li>
                    <li>邮箱:{dede:field.email/}</li>
                    <li>公司:{dede:field.company/}</li>
                </ul>
            </div>
        </div>
    </div>
</body>
</html>

修改 post.php 核心文件(功能更强大,但有风险)

这种方法通过修改 DedeCMS 的核心处理文件 post.php,将数据直接传递给模板,它的优点是更灵活,可以传递任何你想要的数据,但缺点是升级 DedeCMS 时,这个修改可能会被覆盖。

步骤 1:备份并编辑 post.php

  1. 使用 FTP 或文件管理器,进入你的网站根目录。
  2. 找到 /plus/ 目录下的 post.php 文件,先备份一份
  3. 用代码编辑器(如 VS Code, Sublime Text)打开 post.php 文件。

步骤 2:定位代码并添加数据传递

post.php 文件中,找到处理成功后跳转到提示页的代码段,通常是在 if($dopost == 'send') 的逻辑分支末尾。

找到类似这样的代码:

// ... 处理表单数据的代码 ...
// 成功后,设置跳转页面
$gourl = "post_ok.php?dopost=$dopaid&aid=$id";
// ... 其他代码 ...
header("location:$gourl");
exit();

在这段代码的 header("location:$gourl"); 之前,添加以下代码来将 Session 数据传递给模板:

// ... 处理表单数据的代码 ...
// --- 新增代码开始 ---
// 将 Session 中的自定义表单数据赋值给模板变量 $ Fields
// 这样在 post_ok.htm 中就可以直接使用 {dede:field.name/} 来调用了
if (isset($_SESSION['dede_addon'])) {
    $Fields = $_SESSION['dede_addon'];
}
// --- 新增代码结束 ---
// 成功后,设置跳转页面
$gourl = "post_ok.php?dopost=$dopost&aid=$id";
// ... 其他代码 ...
header("location:$gourl");
exit();

注意:如果你的 post_ok.htm 文件名不是 post_ok.php,请确保 $gourl 中的路径正确。

步骤 3:在 post_ok.htm 中直接调用

修改完 post.php 后,你的 post_ok.htm 模板文件就不需要再添加 {dede:php} 代码块了,可以直接使用 {dede:field.字段名/} 来调用。

<!-- post_ok.htm -->
<div class="success-info">
    <p>姓名:{dede:field.name/}</p>
    <p>电话:{dede:field.tel/}</p>
</div>

总结与对比

特性 方法一 (修改 post_ok.htm) 方法二 (修改 post.php)
安全性 ,只修改模板,不触及核心文件。 ,修改核心文件,系统升级后可能丢失。
易用性 简单,只需修改一个模板文件。 较复杂,需要修改 PHP 核心文件。
维护性 ,模板文件通常不会被覆盖。 ,每次升级都需要重新修改。
适用场景 绝大多数情况,特别是新手和追求稳定性的网站。 需要在提示页传递非 Session 数据,或对模板引擎理解较深的开发者。

强烈建议初学者和绝大多数用户使用【方法一】,因为它更安全、更符合 DedeCMS 的模板分离思想。

希望这个详细的教程能帮助你解决问题!如果在操作中遇到任何困难,可以随时提问。

-- 展开阅读全文 --
头像
dede模板PC与手机端不同步怎么办?
« 上一篇 2025-12-20
dede标签内如何调用变量名的值?
下一篇 » 2025-12-20

相关文章

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