vhAstro-Theme/src/pages/[...page].astro
2025-04-02 19:14:32 +08:00

44 lines
1.4 KiB
Plaintext

---
import { getCollection } from "astro:content";
import type { GetStaticPathsOptions } from "astro";
import setSearchJson from "@/utils/vhSearch";
import moveTopToFirst from "@/utils/moveTopToFirst";
export async function getStaticPaths(options: GetStaticPathsOptions) {
const { paginate } = options;
const posts = (await getCollection("blog")).sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());
// 置顶文章功能
moveTopToFirst(posts);
// 生成 Search JSON 文件
await setSearchJson(posts);
// 隐藏的文章不显示
return paginate(
posts.filter(i => !i.data.hide),
{ pageSize: 15 }
);
}
const { page } = Astro.props;
const { data, ...page_data } = page;
// 页面 Info
import SITE_CONFIG from "@/config";
const { Description } = SITE_CONFIG;
// 博客列表组件
import ArticleCard from "@/components/ArticleCard/ArticleCard.astro";
// 公共 Layout
import Layout from "@/layouts/Layout/Layout.astro";
// 分页组件
import Pagination from "@/components/Pagination/Pagination.astro";
const currentPage = page_data.url.current.replace("/", "");
---
<Layout title={currentPage ? `第${currentPage}页文章` : ""} description={Description}>
<section class="article-list-main">
<section class="article-list">
<!-- 文章列表 -->
{data.map((post, index) => <ArticleCard post={post} index={index} />)}
<!-- 分页 -->
</section>
<Pagination data={page_data.url} />
</section>
</Layout>