Короткий ответ: вам необходимо загрузить данные 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>
вам нужен 1 выходной файл для каждого входного файла JSON ли? Относительно легко [добавить пользовательские данные из файлов JSON] (http://assemble.io/docs/Data.html) в глобальный набор данных, но сложнее динамически генерировать выходные файлы, используя данные из произвольного набора JSON входные файлы. – James
Я хотел бы сгенерировать 1. Несколько файлов с полным detaild; 2. Один файл со списком имен. –