39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
|
|
import { getCollection } from "astro:content";
|
|
|
|
// 格式化文章列表
|
|
const fmtArticleList = (articleList: any) => {
|
|
// 按年份分类
|
|
const groupedByYear = articleList.reduce((acc: any, item: any) => {
|
|
const year = item.data.date.getFullYear();
|
|
// 初始化
|
|
!acc[year] && (acc[year] = []);
|
|
acc[year].push(item.data);
|
|
return acc;
|
|
}, {});
|
|
// 转换为目标格式
|
|
return Object.keys(groupedByYear).map(year => ({ name: parseInt(year), data: groupedByYear[year] })).reverse();
|
|
}
|
|
|
|
// 获取分类下的文章列表
|
|
const getCategoriesList = async (categories: string) => {
|
|
const posts = await getCollection("blog");
|
|
const articleList = posts.filter((i: any) => i.data.categories == categories).sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());;
|
|
return fmtArticleList(articleList);
|
|
}
|
|
|
|
// 获取标签下的文章列表
|
|
const getTagsList = async (tags: string) => {
|
|
const posts = await getCollection("blog");
|
|
const articleList = posts.filter((i: any) => i.data.tags.includes(tags)).sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());;
|
|
return fmtArticleList(articleList);
|
|
}
|
|
|
|
// 获取归档列表
|
|
const getArchiveList = async () => {
|
|
const posts = await getCollection("blog");
|
|
const articleList = posts.sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());;
|
|
return fmtArticleList(articleList);
|
|
}
|
|
|
|
export { getCategoriesList, getTagsList, getArchiveList }; |