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
相关产品推荐
相关产品推荐

