如何在MODX的Formit邮件中移除附件?
解决Formit Email钩子移除附件的问题
我之前也踩过Formit更新后覆盖自定义设置的坑,给你几个可靠的解决方案,能确保邮件里完全不包含附件,同时不影响其他功能:
方法1:使用beforeEmail前置钩子清理附件数据
这是最稳妥的方式——Formit在触发email钩子前会先执行beforeEmail钩子,我们可以在这里提前清空附件相关的数据:
- 创建一个新的MODX片段(比如命名为
clearFormitAttachments),内容如下:
// 清空attachments字段,阻止email钩子处理附件 $hook->setValue('attachments', []); // 如果你的附件字段是自定义命名(比如`user_upload`),替换成对应的字段名 // $hook->setValue('user_upload', []); return true;
- 在你的Formit调用配置里,把这个片段添加到
hooks参数中,放在email钩子前面:
[[!FormIt? &hooks=`beforeEmail,email` &beforeEmail=`clearFormitAttachments` // 其他配置参数... ]]
这样在发送邮件前,附件数据就被清空了,email钩子自然不会处理附件,而且不影响其他可能用到附件的后续操作(比如保存到数据库)。
方法2:用emailExcludeFields参数排除附件字段
Formit的email钩子支持通过emailExcludeFields参数指定不包含在邮件里的字段,同时也会跳过对这些字段的附件处理:
在Formit配置里添加这个参数,把你的附件字段名填进去(多个字段用逗号分隔):
[[!FormIt? &hooks=`email` &emailExcludeFields=`attachments` // 如果是自定义附件字段,比如`invoice_upload`,就写: // &emailExcludeFields=`invoice_upload` // 其他配置参数... ]]
这个方法更简洁,但要注意字段名必须和你表单里的附件字段完全一致,否则不会生效。
方法3:自定义邮件模板(仅隐藏内容,不阻止发送)
如果只是不想在邮件内容里显示附件信息,但Formit还是会尝试发送附件的话,可以修改你的邮件模板,去掉所有和附件相关的输出代码。不过这个方法不能真正阻止附件被发送,所以更适合配合前两种方法使用。
内容的提问来源于stack exchange,提问作者Niels Peeren
相关产品推荐
相关产品推荐

