我尝试创建一个新的棋子页面,一种撇号cms的博客风格。我有trainings
,trainings-widgets
和trainings-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: []
}
我无法弄清楚这里可能出现的问题。
答案 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
推荐更通用的位置。
您可以通过两种方式解决问题:
选项一
将layout.html
移至lib/modules/apostrophe-templates/views/layout.html
。
总是extend
它是这样的:
{% 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
继承的。但我们过去的感觉已经过去了这种方法不是很直观。)