将预定义的小部件添加到主页

Add pre-defined widgets to home

我正在关注这个 这对我在新创建的页面上有一些预定义的小部件非常有用。

// lib/modules/apostrophe-pages/index.js

  construct: function(self, options) {
    self.beforeInsert = function(req, page, options, callback) {
      page.navigationArea = {
        "type" : "area",
        "items" : [
          {
            "by" : "id",
            "limitByAll" : 5,
            "limitByTag" : 5,
            "navShadow" : false,
            "linksArray" : [ ],
            "_id" : self.apos.utils.generateId(),
            "nav" : "default",
            "pieceIds" : [ ],
            "logoId" : null,
            "navBackgroundImageId" : null,
            "navColor" : null,
            "navTextColor" : null,
            "gradientColorTop" : null,
            "gradientColorBottom" : null,
            "tags" : [ ],
            "type" : "navigations"
          }
        ]
      }
      return setImmediate(callback);
    };
  }

但这只会在我创建的页面上添加 navigationArea。在启动时创建的主页似乎被排除在外。 Home 在第一次启动时会有 navigationArea 为空,我需要手动添加它。如何确保功能 self.beforeInsert 也适用于家庭?

我想如果这是在创建数据库之前添加的,那么 beforeInsert 会覆盖它。由于还没有主页,它会在应用程序首次启动时插入。但让我们假设您已经创建了该应用程序。

这可能是一项迁移工作。您可以 write a migration 查找主页 (slug: '/') 并查看该区域是否为空。如果是,则使用您的数据更新文档。它应该只 运行 一次,因为迁移是在数据库集合中跟踪的。即使它再次 运行,只要您只查询还没有数据的“主页”,您就安全了。