如何在DocPad中使用`write:false`获取文件集合

时间:2013-11-17 17:39:16

标签: docpad query-engine

我有这样的设置:

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

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

我已尝试在portfolio.html.eco中对此进行一些修改,但它们似乎都是空集:

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

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

@getFilesAtPath('portfolio/') 

它确实为我提供了正确的内容,但尚未呈现。更新:已呈现,我使用的是body值,而不是{{1} }。

任何人都可以解释我对收藏版本的错误吗?让contentRendered阻止文档被包含在集合中吗?

2 个答案:

答案 0 :(得分:1)

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

使用非常简单,在此处获取 - &gt; 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

答案 1 :(得分:1)

我最终要做的是从文件中删除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

看到完整的来源