如何在提交 Netlify 表单后创建 Netlify CMS 集合文件?

How can I create a Netlify CMS collection file upon the submission of a Netlify Form?

我目前有一个 GatsbyJS 应用程序,它使用 Netlify CMS (NCMS) 进行内容管理,并通过 GitHub 进行 Netlify hosting/deployment。

我想构建一个非常简单的订单系统,但我想使用 JSON 文件和 NCMS 集合来表示数据,因为我对数据的要求非常低,而且我希望能够完全通过 NCMS 管理数据。

例如,我有一个 Products 集合和一个 Orders 集合。 Products 正在使用 JSON 扩展名并包含代表每个产品的 JSON 个文件。那里一切看起来都很好。对于 Orders,我希望能够从 NCMS 或从我的应用程序中的订单创建新条目。

在 NCMS 中创建 Orders 条目应该足够简单,使用关系小部件将 Products 条目合并到每个订单中。我想弄清楚的是如何在提交表单后在我的文件系统(repo)中创建 JSON 文件。我认为这可以通过 GitHub webhooks 以某种方式实现,因为当您在他们的系统中创建文件时,NCMS 会这样做。

当用户提交一个我的应用程序中的 Netlify 表单?

如果这不可能,我的后续策略是将 Orders 数据保存在 MongoDB 数据库中。我还没有任何使用 Mongo 的经验,但我知道它基于使用类似 JSON 语法的“平面”数据格式。我能否在通过 Netlify Lambda 函数提交时将我的订单数据保存在 Mongo 集合中,然后通过 Netlify 触发构建,并在我的应用程序中在构建时拉入 Mongo 数据,并以某种方式创建一个每个订单对象的文件,可能通过 Gatsby 的 API?

我最后的办法是在我的应用程序中设置一个管理区域,可以在其中查看、修改和删除订单。我宁愿避免这种情况,因为 a) 我没有 Netlify Pro 服务,因此无法访问受密码保护的站点访问权限(尽管我不确定 NCMS 如何利用身份并能够避免高级计划?), b) 我希望所有数据管理都通过同一平台 (Netlify CMS) 进行。

您绝对可以使用 Netlify 表单、函数和 Github API 来做到这一点。我为我的一个 gatsby 站点做了类似的事情,其中​​表单数据直接提交给 Netlify 函数。

如果您想利用 Netlify Form 的功能,如垃圾邮件预防和电子邮件通知,我认为它看起来像这样:

  • 设置您的 Netlify Form
  • 设置一个 Netlify function 来监听 submission-created 事件。在请求的正文中,您会找到一个 payload 对象,其中包含表单数据以及有关您网站的信息(以防您有大量此类信息)。 Netlify 有一个 package 可以真正简化开发过程。

  • 触发对 Github API 的调用,以便为该提交创建文件或更新包含所有提交的现有文件。

  • 此时,您可以设置 netlifyCMS 来读取该文件夹/文件的内容,并允许管理员查看/修改提交内容。

希望对您有所帮助!