2013-11-17 2 views
2

У меня есть настройка так:Как получить набор файлов с `пишут: false` в DocPad

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 вместо contentRendered.

Может ли кто-нибудь объяснить, что я делаю неправильно с версией коллекции? Имеет ли write: false документы, не включенные в коллекцию?

+1

Вы когда-нибудь находили ответ на этот вопрос? У меня такая же проблема (хочу использовать коллекцию файлов с write: false) –

+0

Да, извините, что я забыл об этом, теперь я разместил ответ ниже: http://stackoverflow.com/a/26721750/933879 –

ответ

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; 
     }, 
     // ... 

(You может видеть полный источник на https://github.com/nfriedly/nfriedly.com/blob/master/docpad.js#L81)

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 
+0

Круто, я об этом не знал. Я думаю, что сейчас буду придерживаться своей текущей настройки, потому что я хотел бы использовать свой основной макет, не разбивая его на начальные и конечные файлы, но я буду помнить об этом. –