【问题标题】:Add pre-defined widgets to home将预定义的小部件添加到主页
【发布时间】:2021-04-09 06:23:22
【问题描述】:

我正在关注这个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也适用于家庭?

【问题讨论】:

    标签: apostrophe-cms


    【解决方案1】:

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

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

    【讨论】:

    • 我期待同样的行为,但遗憾的是事实并非如此。我已经用db.dropDatabase() 删除了数据库,但仍不会填充 home。谢谢关于迁移的提示,我在这里学到了很多关于撇号的知识,这在其他一些情况下肯定会有用,但在这里我不需要。我的问题只被认为是第一次创建数据库。
    • 迁移方法甚至可以帮助创建。这将取决于启动顺序,但可能值得一试。
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 2014-04-08
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2021-11-05
    相关资源
    最近更新 更多