2015-02-21 10 views
0

Так у меня есть папка rules, что это выглядит следующим образом:Как я могу сгенерировать страницы в сборке на основе разных json-файлов?

rule-001.json 
rule-002.json 
rule-003.json 

Каждый * .json файл унифицированного формата:

{ name: 'AAA', descriptions: 'BBB' } 

Как я могу генерировать страницы на основе этих файлов Собрать?

+0

вам нужен 1 выходной файл для каждого входного файла JSON ли? Относительно легко [добавить пользовательские данные из файлов JSON] (http://assemble.io/docs/Data.html) в глобальный набор данных, но сложнее динамически генерировать выходные файлы, используя данные из произвольного набора JSON входные файлы. – James

+0

Я хотел бы сгенерировать 1. Несколько файлов с полным detaild; 2. Один файл со списком имен. –

ответ

1

Короткий ответ: вам необходимо загрузить данные JSON в свой файл Grunt и использовать его для замены объекта Assemble pages.

Я написал blog post about generating pages from data, основываясь на Assemble Blog Theme sample. В обоих случаях данные страниц были сохранены в одном файле JSON.

В вашем случае вам необходимо загрузить данные из всех файлов JSON в файл Grunt и преобразовать данные в формат pages. Вы можете сделать это любое количество способов, но один простой способ будет написать функцию в вашем Gruntfile, что делает это:

function loadDataPages (jsonFileSpec) { 
    var path = require("path"); 
    var jsonPaths = grunt.file.expand(jsonFileSpec); 
    var jsonPages = jsonPaths.map(function (jsonPath) { 
     var jsonData = grunt.file.readJSON(jsonPath); 
     var outputFileName = path.basename(jsonPath, path.extname(jsonPath)) + ".html"; 
     var jsonPage = { 
      "data": jsonData, 
      "content": "This is the body content for page " + outputFileName, 
      "filename": outputFileName 
     }; 
     return jsonPage; 
    }); 
    return jsonPages; 
} 

, а затем вам нужно загрузить этот объект данных в вашей Grunt конфигурации и передать его Собирают-х pages вариант:

grunt.initConfig({ 
    assemble: { 
     data: { 
      options: { 
       flatten: true, 
       layout: "source/templates/layouts/custom-data-layout.hbs", 
       pages: loadDataPages("source/custom-data/*.json") 
      }, 
      files: { 
       "output/custom-data-pages/": ["source/custom-data/index.hbs"] 
      } 
     } 
    } 
    // ... 
}); 

Вот что макеты может выглядеть следующим образом:

заказ данных-layout.hbs

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Custom Data - {{name}}</title> 
    </head> 
    <body> 
     <h1>Custom Data - {{name}}</h1> 
     <p>{{ description }}</p> 
     {{> body }} 
    </body> 
</html> 

index.hbs

--- 
layout: false 
title: Custom Data Index 
--- 
<!DOCTYPE html> 
<html> 
<head> 
    <title>{{title}}</title> 
</head> 
<body> 
<h1>{{title}}</h1> 
<ul> 
    {{#each pages }} 
     <li><a href="{{relativeLink}}">{{basename}}</a></li> 
    {{/each}} 
</ul> 
</body> 
</html>