MkSaaS Docs
MkSaaS Docs
Homepage

介绍

快速入门什么是 Fumadocs对比

设置

手动安装静态导出

写作

Markdown国际化

UI

概览主题搜索
组件
MDX
文档布局
文档布局
主页布局
主页布局
笔记本
笔记本
文档页面
文档页面
根提供者
根提供者
Layouts

文档页面

文档中的页面

可以渲染完整页面的组件(标题、目录等)。

正文

page.tsx
import { DocsPage } from 'fumadocs-ui/page';

export default function Page({ params }: { params: { slug?: string[] } }) {
  const page = getPage(params);

  return (
    <DocsPage
      title={page.title}
      description={page.description}
      mdx={page.body}
      toc={page.toc}
    />
  );
}

SEO

为页面添加 SEO 优化,有几种方法。首先,允许文档生成器提供 metadata 帮助程序:

api.ts
export { createMetadata } from 'fumadocs-core/docs';

默认值包括 标题、描述、开放图形(Open Graph)和 Twitter 图片、规范(Canonical)URL 和 locale 元数据。

现在您可以直接使用它:

page.tsx
import type { Metadata } from 'next';
import { createMetadata } from '@/app/api';

export async function generateMetadata({
  params,
}: {
  params: { slug?: string[] };
}): Promise<Metadata> {
  const page = await getPage(params);

  return createMetadata({
    page,
    params,
  });
}

或者您可以手动构建它:

page.tsx
import type { Metadata } from 'next';
import { absoluteUrl } from 'fumadocs-core/utils/absolute-url';

export const metadata: Metadata = {
  title: 'My Page',
  description: 'Page Description',
  openGraph: {
    title: 'My Page',
    description: 'Page Description',
    type: 'article',
    url: absoluteUrl('/docs/my-page'),
  },
  twitter: {
    title: 'My Page',
    description: 'Page Description',
    card: 'summary_large_image',
  },
  alternates: {
    canonical: absoluteUrl('/docs/my-page'),
  },
};

内容目录

支持无限级别的标题。从页面内容中提取,您应该通过 toc 字段传递它。

page.tsx
import { DocsPage } from 'fumadocs-ui/page';
import { getToc } from 'fumadocs-core';

export default function Page() {
  const toc = getToc(content);

  return <DocsPage toc={toc} />;
}

自定义内容目录

可以定制 TOC(目录)的呈现方式,但您仍然需要通过 toc 字段传递真实的 TOC 项目。

page.tsx
import { DocsPage } from 'fumadocs-ui/page';

export default function Page() {
  return (
    <DocsPage tocClassName="hidden lg:block" toc={toc}>
      <div>Custom TOC</div>
    </DocsPage>
  );
}

最后更新时间

page.tsx
import { DocsPage } from 'fumadocs-ui/page';

export default function Page() {
  return <DocsPage lastUpdatedAt={new Date()} />;
}

页脚

layout.tsx
import { DocsPage } from 'fumadocs-ui/page';
import { baseOptions } from '@/app/layout.config';

export default function Page() {
  return (
    <DocsPage
      footer={{
        text: 'Built with Fumadocs',
      }}
    />
  );
}

使用基础配置

您可以创建一个 baseOptions 对象,用于所有页面和布局组件。

layout.config.ts
import type { BasePageConfig } from 'fumadocs-ui/page';

export const baseOptions: BasePageConfig = {
  githubUrl: 'https://github.com/fuma-nama/fumadocs',
  footer: {
    text: 'Built with Fumadocs',
  },
};
page.tsx
import { DocsPage } from 'fumadocs-ui/page';
import { baseOptions } from '@/app/layout.config';

export default function Page() {
  return <DocsPage {...baseOptions} />;
}

编辑链接

import { DocsPage } from 'fumadocs-ui/page';

export default function Page() {
  return (
    <DocsPage
      gitTimestamp={true}
      footer={{
        // Edit Link
        editLink: {
          text: 'Edit this page',
          url: 'https://github.com/username/repo/blob/main',
        },
      }}
    />
  );
}

页面导航

import { DocsPage } from 'fumadocs-ui/page';
import { getPagesPath } from 'fumadocs-core';

export default function Page({ params }: { params: { slug?: string[] } }) {
  const pagePath = getPagesPath(params);
  const prev = getAdjacentPages({ current: pagePath, dir: 'prev' });
  const next = getAdjacentPages({ current: pagePath, dir: 'next' });

  return (
    <DocsPage
      footer={{
        navigation: {
          prev: prev?.url
            ? {
                title: prev.title,
                href: prev.url,
              }
            : undefined,
          next: next?.url
            ? {
                title: next.title,
                href: next.url,
              }
            : undefined,
        },
      }}
    />
  );
}

自定义获取相邻页面

您可以在 createAdjacentPages 方法中应用 includeInPageNav 过滤器,该方法由文档生成器创建:

api.ts
import { createAdjacentPages } from 'fumadocs-core/docs';
import { tree } from '@/app/source';

export const getAdjacentPages = createAdjacentPages(tree, {
  includeInPageNav: (page) => !page.data.preview,
});

笔记本

文档布局的更紧凑版本

文档页面

文档中的页面

Table of Contents

正文
SEO
内容目录
自定义内容目录
最后更新时间
页脚
使用基础配置
编辑链接
页面导航
自定义获取相邻页面