我根据以下文档创建了联系表单模块:https://apostrophecms.org/docs/tutorials/intermediate/forms.html
提交工作和提交的表单显示在“联系表单”管理菜单项下。
我还想为每个提交生成一封电子邮件到收件人的电子邮件地址。 撇号-提交小工具表示我可以override the beforeInsert method to send email, if desired.
但是,我不确定应该在哪里覆盖此方法。
是否应该在 /lib/modules/contact-form/index.js beforeInsert
方法内添加self.submit
方法?
或者,我应该创建 apostrophe-pieces-submit-widgets 的项目级副本,然后在其中覆盖beforeInsert
方法(我觉得这可能也是 全局,因此不理想)?
最后,我应该涉及撇号电子邮件吗?
答案 0 :(得分:3)
我在这里的答案假设您实际上是在使用apostrophe-pieces-submit-widgets
。因此,到目前为止,您不必编写太多代码。您已经有一个Pieces模块,我们将其称为products
,并制作了一个products-submit-widgets
扩展了apostrophe-pieces-submit-widgets
的Submit Widgets模块。好,很好。让我们讨论一下如何处理剩下的发送电子邮件的方式。
beforeInsert
方法有目的地完全不做任何事情,因为这是您在项目级代码中做“额外的事情”的机会。
要覆盖该方法,请创建lib/modules/products-submit-widgets/index.js
(如果尚未创建)。根据{{1}}的文档,您可能已经包含带有addFields
和extend
等的文件。
现在您的代码如下所示:
apostrophe-pieces-submit-widgets
现在,在项目级别的module.exports = {
// ALL OF YOUR EXISTING CONFIGURATION OF THE products-submit-widgets
// MODULE STILL GOES HERE, then...
construct: function(self, options) {
self.beforeInsert = function(req, piece, callback) {
return self.email(req, 'emailSubmission', {
piece: piece
}, {
// can also specify from and other
// valid properties for nodemailer messages here
to: 'admin@example.com',
subject: 'A new submission was received'
}, callback);
};
}
}
中,创建一个lib/modules/my-pieces-module-name-submit-widgets/views
文件并按如下所示填充它:
emailSubmission.html
到目前为止一切顺利!但是,为了使<h4>A new submission was received</h4>
A new submission was received from {{ piece.someFieldOrOther }}.
It contains this information:
{{ piece.someOtherField }}
{{ piece.yetAnotherField }}
{{ piece.etc }}
方法起作用,您确实需要配置self.email
模块。如果您已经在Linux服务器上安装了电子邮件传递代理,则基本配置可能看起来像这样:
apostrophe-email
但是,有关该信息的更多完整信息,请参见sending email from your Apostrophe project。如果您使用幼稚的配置,您的电子邮件可能会被视为垃圾邮件。如果您不打算使用Amazon Simple Email Service或Postmark之类的服务,并且您的流量很小,则可以将nodemailer配置为通过有效的gmail帐户发送消息,而无需进行过多工作。
希望这会有所帮助!将其添加为撇号件提交微件模块的可选内置功能将是一个很好的PR。