【问题标题】:How do I get a collection of files with `write: false` in DocPad如何在 DocPad 中获取带有“write: false”的文件集合
【发布时间】:2013-11-17 17:39:15
【问题描述】:

我有这样的设置:

portfolio.html.eco
portfolio/
  - project1.html.md
  - project2.html.md
  - etc.

我希望将其全部合并到 out/ 目录中的单个大型 portfolio.html 文件中。我所有的项目文件都有 write: false 元数据,这会阻止它们被写入。

我尝试在我的portfolio.html.eco 中对此进行一些变体,但它们似乎都得到了一个空集合:

<% for project in @getCollection("documents").findAll({relativePath: 'portfolio'}).toJSON() %>

但我总是得到一个空列表。我也试过这个:

@getFilesAtPath('portfolio/') 

它确实为我提供了正确的内容,但它还没有被渲染。更新:它已经被渲染了,我使用的是body值而不是contentRendered。 p>

谁能解释我在收藏版中做错了什么?拥有write: false 是否会阻止文档被包含在集合中?

【问题讨论】:

  • 你找到答案了吗?我遇到了同样的问题(希望使用带有 write:false 的文件集合)
  • 是的,对不起,我忘记了,我现在在下面发布了一个答案:stackoverflow.com/a/26721750/933879

标签: docpad query-engine


【解决方案1】:

有一个插件可以在渲染过程之后将文件组合在一起。

使用非常简单,在这里获取 -> docpad-plugin-combiner

它是如何工作的一个例子:

文件 1:

---
combine: true
outPath: portfolio.html
---
#Title 1

文件 2:

---
combine: true
outPath: portfolio.html
---
#Title 2

要安装,请转到您的 docpad 网站根文件夹并运行:

npm install --save docpad-plugin-combiner

【讨论】:

  • 酷,我不知道。我想我现在会坚持我目前的设置,因为我想使用我的主布局,而不必将其拆分为开始和结束文件,但我会记住这一点。
【解决方案2】:

我最终做的是从文件中删除write: false,而是先创建集合,然后以编程方式将write: false 添加到集合中的文档中:

module.exports = {
    collections: {
        projects: function() {
            var projects = this.getFilesAtPath('projects', [{filename:1}]);
            projects.each(function(project) {
                project.setMetaDefaults({'write': 'false'});
            });
            projects.on("add", function (model) {
                model.setMetaDefaults({'write': 'false'})
            });
            return projects;
        },
        // ...

(您可以在https://github.com/nfriedly/nfriedly.com/blob/master/docpad.js#L81查看完整源代码)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2019-09-17
    • 1970-01-01
    • 2023-03-24
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多