Sanity
Sanity 向けの公式インテグレーションです。
概要
Fumadocs は、Sanity CMS のセットアップを簡単にする公式インテグレーションを提供しています。
Sanity のサンプルは GitHub で公開しています。
セットアップ
このガイドでは、Sanity の公式ドキュメントに従って、すでに設定が完了していることを前提としています。
データ型
次のコマンドを実行して、コンテンツタイプを初期化します。
npx @fumadocs/cli add sanity/baseまたは、npx @fumadocs/cli add を実行して、ほかの Sanity プリセットを一覧から選んでインストールすることもできます。
インストールした型を登録します。
import { docsType, blockContent, callout, card, cards } from '@/lib/sanity/base';
export const schemaTypes = [blockContent, callout, card, cards, docsType];コンテンツローダー
インテグレーションをインストールします。
npm i @fumadocs/sanitySanity クライアントでソースを作成します:
import { dynamicLoader } from 'fumadocs-core/source';
import { createSanitySource } from '@fumadocs/sanity';
// Sanity クライアント
import { client } from '@/sanity/lib/client';
// 生成された型
import type { Docs } from '@/sanity/types';
const source = dynamicLoader(
createSanitySource<Docs>({
client,
docType: 'docs',
}),
{
baseUrl: '/docs',
},
);
export async function getSource() {
return source.get();
}次に、getSource() 関数を使ってページをレンダリングします:
import type { Route } from './+types/docs';
import { useFumadocsLoader } from 'fumadocs-core/source/client';
import { DocsLayout } from 'fumadocs-ui/layouts/docs';
import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/layouts/docs/page';
import { renderToc } from '@fumadocs/sanity/client';
import { getSource } from '@/lib/source';
import { CustomPortableText } from '@/components/sanity';
export async function loader({ params }: Route.LoaderArgs) {
const source = await getSource();
const page = source.getPage(params['*'].split('/').filter((v) => v.length > 0));
if (!page) throw new Response('Not found', { status: 404 });
const { title, description, _toc, body } = await page.data.load();
return {
title,
description,
toc: _toc,
body,
pageTree: await source.serializePageTree(source.getPageTree()),
};
}
export default function Page({ loaderData }: Route.ComponentProps) {
const { title, description, toc, body, pageTree } = useFumadocsLoader(loaderData);
return (
<DocsLayout tree={pageTree}>
<DocsPage toc={renderToc({ toc, render: (block) => <CustomPortableText value={block} /> })}>
<DocsTitle>{title}</DocsTitle>
<DocsDescription>{description}</DocsDescription>
<DocsBody>
<CustomPortableText value={body!} />
</DocsBody>
</DocsPage>
</DocsLayout>
);
}完了
Studio エディターで docs タイプのドキュメントを作成すると、docs ルートに表示されるようになります。
How is this guide?
最終更新日
