You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3中如何在Powermail表单提交后的跳转页面显示提交信息?

当然可以实现!我之前帮不少开发者解决过模态框表单提交后跳转展示数据的需求,用Powermail完全能搞定,下面分步骤给你说具体怎么操作:

实现步骤

1. 配置表单的提交跳转目标

首先在TYPO3后端找到你的Powermail表单,进入编辑界面后,切换到「行为(Behaviour)」或者「提交设置(Submit Settings)」标签页,找到「提交后跳转(Redirect after submit)」选项。这里你可以选择一个已有的页面(比如专门做的“提交成功感谢页”),或者直接填写自定义URL,保存表单配置即可。

2. 让Powermail传递表单数据到跳转页面

默认情况下,Powermail会通过会话(Session)存储提交的表单数据,跳转后的页面可以直接读取。你只需要确保Powermail的静态模板已经包含在站点模板里(一般默认已包含,若没有则在模板的「包含静态模板」中添加powermail相关模板)。

如果需要更灵活的控制(比如只传递特定字段、预处理数据),可以用Powermail的tx_powermail_afterSubmit钩子实现:

<?php
namespace Vendor\YourExtension\Hooks;

class PowermailAfterSubmitHook
{
    public function process(\In2code\Powermail\Domain\Model\Mail $mail, array $settings)
    {
        // 提取表单字段数据
        $fields = $mail->getForm()->getFields();
        $formData = [];
        foreach ($fields as $field) {
            $formData[$field->getTitle()] = $mail->getAnswerByField($field)->getValue();
        }
        // 存入会话
        $GLOBALS['TSFE']->fe_user->setKey('ses', 'powermail_submitted_data', $formData);
        $GLOBALS['TSFE']->fe_user->storeSessionData();
        return $mail;
    }
}

然后在ext_localconf.php中注册钩子:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/powermail/Classes/Controller/FormController.php']['afterSubmit'][] =
    \Vendor\YourExtension\Hooks\PowermailAfterSubmitHook::class . '->process';

3. 在跳转页面渲染提交的信息

接下来在感谢页模板里,就可以读取并展示这些数据了:

方式1:直接调用特定字段

如果你知道字段的Marker属性(比如name、email),可以直接指定字段展示:

<div class="submitted-data">
    <h3>您的提交已成功!</h3>
    <p><strong>姓名:</strong>{powermail_field_name}</p>
    <p><strong>邮箱:</strong>{powermail_field_email}</p>
    <p><strong>留言内容:</strong>{powermail_field_message}</p>
</div>

方式2:遍历所有字段(通用写法)

如果表单字段可能变化,用循环更灵活:

<div class="submitted-data">
    <h3>您提交的信息如下:</h3>
    <f:for each="{powermail_all}" as="value" key="label">
        <p><strong>{label}:</strong>{value}</p>
    </f:for>
</div>

方式3:读取自定义钩子存入的会话数据

如果用了自定义钩子存数据,需要手动从会话读取:

<f:variable name="submittedData" value="{f:if(condition: '{TSFE:fe_user:ses:powermail_submitted_data}', then: '{TSFE:fe_user:ses:powermail_submitted_data}', else: '{}')}" />
<div class="submitted-data">
    <h3>您的提交已成功!</h3>
    <f:if condition="{submittedData}">
        <f:for each="{submittedData}" as="value" key="label">
            <p><strong>{label}:</strong>{value}</p>
        </f:for>
    </f:if>
</div>

注意事项

  • 确保跳转页面的模板已加载Powermail的ViewHelper(通过包含静态模板实现),否则无法识别{powermail_field_*}这类变量。
  • 不推荐用GET参数传递数据,因为URL会暴露所有输入内容,安全性和用户体验都不如会话存储。

这样整个流程就完成了,模态框表单提交后会跳转到你指定的页面,清晰展示用户输入的所有信息。

内容的提问来源于stack exchange,提问作者user500665

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:40:32