在我的Gatsby JS网站中,我对文章进行了分类,并且设法为每个类别创建了一个页面,并根据页面上显示的最大文章数对每个页面进行了分页。 问题是我的代码没有计算每个类别的确切现有页面数,而是计算了现有页面的总数(基于所有文章,而不是基于类别的文章)。
这是代码:
gatsby-node.js
let categories = []
_.each(result.data.allMarkdownRemark.edges, edge => {
if (_.get(edge, "node.frontmatter.categories")) {
categories = categories.concat(edge.node.frontmatter.categories)
}
})
const categoryarticles = categories.filter(category =>{
return category === category
})
const categoryarticlesPerPage = 6
const numPages = Math.ceil(categoryarticles.length / categoryarticlesPerPage)
//Creating a PAGINATED page for each category, so that any category page will only display a certain amount of articles (defined in categoryarticlesPerPage)
Array.from({ length: numPages }).forEach((el, i) => {
categories.forEach(category => {
createPage({
path: i === 0 ? `/${_.kebabCase(category)}` : `/${_.kebabCase(category)}/${i + 1}`,
component: categoryTemplate,
context: {
category,
limit: categoryarticlesPerPage,
skip: i * categoryarticlesPerPage,
numPages,
currentPage: i + 1,
},
})
})
})
该错误无疑在const类别的文章中。
理想的结果是按类别计算文章数量,以便类别分页开始正常工作(现在,由于考虑了网站上的全部文章数量,因此它创建了不必要的页面)。 / p>
有任何线索吗?
谢谢。
答案 0 :(得分:0)
const categoryarticles = categories.filter(category =>{
return category === category
})
总是返回整个数组,因为category === category
始终为true
。这些category
变量之一应该不同。您可能需要过滤articles
。
另外,对于_.flatMap
来说,这似乎是一项完美的工作,就像这样:
const categories = _.flatMap(result.data.allMarkdownRemark.edges, edge => {
return _.get(edge, "node.frontmatter.categories", []);
});
// get articles from somewhere
const categoryarticles = articles.filter(category => {
return article.category === category;
});
如果您要计算每个类别中的文章数,可以按以下方式使用_.countBy
:
const categoryWiseArticleCount = _.countBy(articles, article => {
// return the article category here
return article.category;
});
console.log(categoryWiseArticleCount);
// {
// category_1: 7,
// category_2: 10,
// }