我尝试创建一个新的 pieces 页面,有点像撇号 cms 中的博客风格。我有 trainings
、trainings-widgets
和 trainings-pages
文件夹。我在app.js
中注册了它们;单独的部分和小部件工作得很好。问题是当我尝试添加培训类型的页面时。我在控制台中收到 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
最佳答案
除了模块目录名称不正确之外,如前所述:
lib/modules/trainigs-pages
应该是:
lib/modules/trainings-pages
当我们解决这个问题时,我们会遇到一个新的错误:
错误:找不到模板:trainings-pages:layout.html
您正在扩展 layout.html
。但该文件位于不同的模块 apostrophe-pages
中,trainings-pages
未扩展,因此从未找到。这是我们的错,因为我们没有在教程中为 layout.html
推荐一个更通用的位置。
有两种解决方法:
选项一
将
layout.html
移动到lib/modules/apostrophe-templates/views/layout.html
。总是像这样
扩展
它:
{% extends 'apostrophe-templates:layout.html' %}
无论您在哪个模块中,这种“跨模块”路径语法都可以在 apostrophe-templates
模块中找到。
选项二
另一种选择是在 app.js
中设置 apostrophe-templates
的 viewsFolderFallback
选项,如下所示:
'apostrophe-templates': {
viewsFolderFallback: __dirname + '/views'
},
并在项目的顶层创建一个 views/
文件夹,并将 layout.html
移到那里。然后你不必使用特殊的语法,你可以只写 layout.html
如果模块没有自己的,它会在 fallback 文件夹中查找。这是我们通常在内部做的事情。
我将与撇号核心团队的其他成员讨论本教程应该推荐选项一还是选项二,并调整撇号 CLI 以自动设置选项二(如果首选)。
(还有第三种选择:你可以把东西放在 lib/modules/apostrophe-module/views
中,它可以作为后备而不需要任何配置。那是因为所有模块最终都继承自 apostrophe-module
。但我们过去的感觉是这种方法不是很直观。)
关于javascript - Apostrophe-pieces-pages 无法注册页面类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47016305/