import { postsPerPage } from '@/app/(main)/layout.config'; import { NumberedPagination } from '@/components/numbered-pagination'; import { PostCard } from '@/components/posts/post-card'; import { Section } from '@/components/section'; import { createMetadata } from '@/lib/metadata'; import { getPublishedPosts } from '@/lib/payload-posts'; import type { Metadata, ResolvingMetadata } from 'next'; import { notFound, redirect } from 'next/navigation'; const CurrentPostsCount = ({ startIndex, endIndex, totalPosts, }: { startIndex: number; endIndex: number; totalPosts: number; }) => { const start = startIndex + 1; const end = endIndex < totalPosts ? endIndex : totalPosts; if (start === end) return ({start}); return ( ({start}-{end}) ); }; const Pagination = ({ pageIndex, pageCount, }: { pageIndex: number; pageCount: number; }) => { const handlePageChange = async (page: number) => { 'use server'; redirect(`/posts?page=${page}`); }; return (
); }; export default async function Page(props: { searchParams: Promise<{ [key: string]: string | string[] | undefined }>; }) { const searchParams = await props.searchParams; const pageIndex = searchParams.page ? Number.parseInt( Array.isArray(searchParams.page) ? (searchParams.page[0] ?? '') : searchParams.page, 10, ) - 1 : 0; if (Number.isNaN(pageIndex)) notFound(); // 获取文章(带分页) const { posts, totalDocs, totalPages } = await getPublishedPosts({ limit: postsPerPage, page: pageIndex + 1, }); if (pageIndex < 0 || (totalPages > 0 && pageIndex >= totalPages)) notFound(); const startIndex = pageIndex * postsPerPage; const endIndex = startIndex + posts.length; return ( <>

All {totalDocs} Posts{' '}

{posts.map((post) => { const date = post.date.toDateString(); return ( ); })}
{totalPages > 1 && ( )} ); } type Props = { params: Promise<{ slug: string[] }>; searchParams: Promise<{ [key: string]: string | string[] | undefined }>; }; export async function generateMetadata( props: Props, parent: ResolvingMetadata, ): Promise { const searchParams = await props.searchParams; const pageIndex = searchParams.page ? Number.parseInt( Array.isArray(searchParams.page) ? (searchParams.page[0] ?? '') : searchParams.page, 10, ) : 1; const isFirstPage = pageIndex === 1 || !searchParams.page; const pageTitle = isFirstPage ? 'Posts' : `Posts - Page ${pageIndex}`; const canonicalUrl = isFirstPage ? '/posts' : `/posts?page=${pageIndex}`; return createMetadata({ title: pageTitle, description: `Posts${!isFirstPage ? ` - Page ${pageIndex}` : ''}`, openGraph: { url: canonicalUrl, }, alternates: { canonical: canonicalUrl, }, }); }