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

时间:2021-04-07 12:05:45

标签: apostrophe-cms

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

// 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 也适用于 home?

1 个答案:

答案 0 :(得分:1)

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

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

相关问题