Apostrophe-pieces-pages无法注册页面类型

时间:2017-10-30 13:20:33

标签: javascript node.js apostrophe-cms

我尝试创建一个新的棋子页面,一种撇号cms的博客风格。我有trainingstrainings-widgetstrainings-pages个文件夹。我在app.js注册了所有内容。单件和小部件工作精美。问题是当我尝试添加Trainings类型的页面时。我在控制台中获得Error: template not found: pages/trainings-page.html

apostrophe-pages/index.js我配置了它:

module.exports = {
    types: [{
            name: 'home',
            label: 'Home'
        },
        {
            name: 'trainings-page',
            label: 'Trainings'
        }
    ]
}

trainings-pages/index.js

module.exports = {
    name: 'trainings-page',
    label: 'Training Page',
    extend: 'apostrophe-pieces-pages',
    piecesFilters: []
}

我无法弄清楚这里可能出现的问题。

编辑:展示git: https://github.com/msdsk/apostrophe-error

2 个答案:

答案 0 :(得分:3)

模块目录名称上有拼写错误:lib/modules/trainigs-pages应为lib/modules/training-pages

答案 1 :(得分:3)

除了模块目录名称不正确之外,如上所述:

lib/modules/trainigs-pages应该是:

lib/modules/trainings-pages

当我们解决这个问题时,我们会逐渐陷入新的错误:

Error: template not found: trainings-pages:layout.html

您正在延长layout.html。但是该文件位于apostrophe-pages的不同模块中,trainings-pages未扩展,因此永远不会找到它。我们的错误是不在教程中为layout.html推荐更通用的位置。

您可以通过两种方式解决问题:

选项一

  1. layout.html移至lib/modules/apostrophe-templates/views/layout.html

  2. 总是extend它是这样的:

  3. {% extends 'apostrophe-templates:layout.html' %}

    无论您使用什么模块,这种“跨模块”路径语法都会在apostrophe-templates模块中找到它。

    选项二

    另一种选择是在viewsFolderFallback中设置apostrophe-templates的{​​{1}}选项,如下所示:

    app.js

    在项目的顶层创建一个'apostrophe-templates': { viewsFolderFallback: __dirname + '/views' }, 文件夹,然后在其中移动views/。然后你不必使用特殊的语法,你可以只写layout.html,如果模块没有自己的,它将在fallback文件夹中查找。这就是我们通常在内部做的事情。

    我将与Apostrophe核心团队的其他成员讨论教程是否应该推荐选项一或选项二,如果首选,则调整撇号CLI以自动设置选项二。

    (还有第三种选择:你可以将内容放在layout.html中,它可以作为后备而无需任何配置。这是因为所有模块最终都是从lib/modules/apostrophe-module/views继承的。但我们过去的感觉已经过去了这种方法不是很直观。)