Headless Eleventy 11ty 未生成 post 文件,仅生成索引
Headless Eleventy 11ty not generating post files, only index
我正在尝试从 .md
文件转移到无头 CMS。
我正在关注 this tutorial,出于某种原因,我看到在索引文件 (blog/index.html
) 上创建的帖子数据包含文章列表,但是 HTML不会生成每篇文章的文件 ,除非我在 dir.input
路径中的某处添加 .md
文件。
这是我的 .eleventy.js
文件的样子:
module.exports = function(eleventyConfig) {
eleventyConfig.setLiquidOptions({
dynamicPartials: false,
});
eleventyConfig.addLayoutAlias('default', 'layouts/default.html');
eleventyConfig.addLayoutAlias('home', 'layouts/home.html');
eleventyConfig.addLayoutAlias('post', 'layouts/post.html');
return {
dir: {
input: './',
output: './_site'
},
passthroughFileCopy: true
};
};
这就是我的 _data/posts.js
文件的样子:
// fetch WordPress posts
const
wordpressAPI = 'http://xxxxxx/wordpress/wp-json/wp/v2/posts',
fetch = require('node-fetch');
// fetch number of WordPress post pages
async function wpPostPages() {
try {
const res = await fetch(`${ wordpressAPI }?_fields=id&page=1`);
return res.headers.get('x-wp-totalpages') || 0;
}
catch(err) {
return 0;
}
}
// fetch list of WordPress posts
async function wpPosts(page = 1) {
try {
const
res = await fetch(`${ wordpressAPI }?_fields=id,slug,date,title,excerpt,content&page=${ page }`),
json = await res.json();
return json
.filter(p => p.content.rendered && !p.content.protected)
.map(p => {
return {
slug: p.slug,
date: new Date(p.date),
dateYMD: dateYMD(p.date),
dateFriendly: dateFriendly(p.date),
excerpt: wpStringClean(p.excerpt.rendered),
content: wpStringClean(p.content.rendered)
};
});
}
catch (err) {
return null;
}
}
//defining wpStringClean and other functions used above.
...
// process WordPress posts
module.exports = async function() {
const posts = [];
const wpPages = await wpPostPages();
if (!wpPages) return posts;
// fetch all pages of posts
const wpList = [];
for (let w = 1; w <= wpPages; w++) {
wpList.push( wpPosts(w) );
}
const all = await Promise.all( wpList );
return all.flat();
};
我的 _includes/layouts/post.html
包含这个:
---
layout: default
author: Me
pagination:
data: posts
alias: post
size: 1
permalink: "/blog/{{ post.slug | slug }}/index.html"
---
...
我错过了什么?
为什么 11ty 需要一个 md 文件来为每个帖子创建文件?
您可能想尝试将分页从布局模板中移出并移到源目录中。看起来你的分页键在 _includes/layouts
中,Eleventy 不会将其作为输出文件处理。
尝试将您的 _includes/layouts/post.html
文件移动到您的输入目录(在本例中是您的项目根目录,./post.html
),分页应该可以正常工作。
我正在尝试从 .md
文件转移到无头 CMS。
我正在关注 this tutorial,出于某种原因,我看到在索引文件 (blog/index.html
) 上创建的帖子数据包含文章列表,但是 HTML不会生成每篇文章的文件 ,除非我在 dir.input
路径中的某处添加 .md
文件。
这是我的 .eleventy.js
文件的样子:
module.exports = function(eleventyConfig) {
eleventyConfig.setLiquidOptions({
dynamicPartials: false,
});
eleventyConfig.addLayoutAlias('default', 'layouts/default.html');
eleventyConfig.addLayoutAlias('home', 'layouts/home.html');
eleventyConfig.addLayoutAlias('post', 'layouts/post.html');
return {
dir: {
input: './',
output: './_site'
},
passthroughFileCopy: true
};
};
这就是我的 _data/posts.js
文件的样子:
// fetch WordPress posts
const
wordpressAPI = 'http://xxxxxx/wordpress/wp-json/wp/v2/posts',
fetch = require('node-fetch');
// fetch number of WordPress post pages
async function wpPostPages() {
try {
const res = await fetch(`${ wordpressAPI }?_fields=id&page=1`);
return res.headers.get('x-wp-totalpages') || 0;
}
catch(err) {
return 0;
}
}
// fetch list of WordPress posts
async function wpPosts(page = 1) {
try {
const
res = await fetch(`${ wordpressAPI }?_fields=id,slug,date,title,excerpt,content&page=${ page }`),
json = await res.json();
return json
.filter(p => p.content.rendered && !p.content.protected)
.map(p => {
return {
slug: p.slug,
date: new Date(p.date),
dateYMD: dateYMD(p.date),
dateFriendly: dateFriendly(p.date),
excerpt: wpStringClean(p.excerpt.rendered),
content: wpStringClean(p.content.rendered)
};
});
}
catch (err) {
return null;
}
}
//defining wpStringClean and other functions used above.
...
// process WordPress posts
module.exports = async function() {
const posts = [];
const wpPages = await wpPostPages();
if (!wpPages) return posts;
// fetch all pages of posts
const wpList = [];
for (let w = 1; w <= wpPages; w++) {
wpList.push( wpPosts(w) );
}
const all = await Promise.all( wpList );
return all.flat();
};
我的 _includes/layouts/post.html
包含这个:
---
layout: default
author: Me
pagination:
data: posts
alias: post
size: 1
permalink: "/blog/{{ post.slug | slug }}/index.html"
---
...
我错过了什么? 为什么 11ty 需要一个 md 文件来为每个帖子创建文件?
您可能想尝试将分页从布局模板中移出并移到源目录中。看起来你的分页键在 _includes/layouts
中,Eleventy 不会将其作为输出文件处理。
尝试将您的 _includes/layouts/post.html
文件移动到您的输入目录(在本例中是您的项目根目录,./post.html
),分页应该可以正常工作。