ページスラッグとページツリー
生成されるページスラッグとページツリーをカスタマイズします。
このガイドは、Fumadocs MDX など、loader() APIを使用するコンテンツソースにのみ該当します。
概要
Fumadocs は loader() を使用して、コンテンツディレクトリからページスラッグとページツリー(サイドバーの項目)を生成します。
ルーティングは、お使いの React フレームワークが処理します。
ファイルシステムベースのルーティングと同じ要領で、フォルダーとページを定義できます。
出力をさらにカスタマイズしたい場合は、ローダープラグインを使用できます。
ファイル
MDX & Markdown ファイルでは、フロントマターでページ情報をカスタマイズできます。
---
title: My Page
description: Best document ever
icon: House
---
## Learn MoreFumadocs は、以下のプロパティをもとにページツリーを構築します。
| 名前 | 説明 |
|---|---|
title | ページのタイトル |
description | ページの説明 |
icon | アイコン名。アイコンを参照してください |
補足
ページ情報は、Fumadocs MDX などのコンテンツソースから提供されます。
Fumadocs MDX では、schema オプションを指定することで、フロントマターのスキーマをカスタマイズできます。
スラッグ
ページのスラッグは、そのファイルパスから生成されます。
| パス (コンテンツフォルダーからの相対パス) | スラッグ |
|---|---|
./dir/page.mdx | ['dir', 'page'] |
./dir/index.mdx | ['dir'] |
フォルダー
複数のページをまとめて整理できます。Metaファイルを作成すると、フォルダーをカスタマイズできます。
フォルダーグループ
デフォルトでは、ファイルをフォルダーに入れるとその slugs が変わります。 フォルダー名を括弧で囲むと、子ファイルの slugs に影響を与えないようにできます。
| パス(コンテンツフォルダーからの相対パス) | slugs |
|---|---|
./(group-name)/page.mdx | ['page'] |
ルートフォルダー
フォルダーをルートフォルダーとして指定します。その場合、開いているルートフォルダー内のアイテムのみが表示されます。
{
"title": "Name of Folder",
"description": "The description of root folder (optional)",
"root": true
}たとえば、ルートフォルダー framework を開いている場合、他のフォルダー(例: headless)はサイドバーやその他のナビゲーション要素に表示されません。
Fumadocs UI
Fumadocs UI はルートフォルダーを Layout Tabs としてレンダリングするため、ユーザーはルートフォルダー間を切り替えられます。
ルートタイプ
root には文字列も指定でき、これはルートフォルダーのタイプを表します。
同じ親スコープ内にある同じタイプのルートフォルダーは、同じドキュメントの異なるバージョンのように、互いに切り替え可能なものとして扱われます。
{
"title": "1.0.0",
"root": "version"
}root: true は単なるデフォルトのタイプで、タブとして表示されます。
同じタイプの別のルートフォルダーに切り替えると、ページはその構造的射影、つまりルートフォルダーからの相対パスが同じページに対応付けられます。
| ページ | v2 での射影 |
|---|---|
v1/guide.mdx | v2/guide.mdx |
v1/python/guide.mdx | v2/python/guide.mdx(ネストされたルートフォルダーは維持されます) |
Meta
フォルダー内に meta.json ファイルを作成すると、そのフォルダーをカスタマイズできます。
{
"title": "Display Name",
"icon": "MyIcon",
"pages": ["index", "getting-started"],
"defaultOpen": true
}コンテンツソースが対応している場合は、メタファイルをコード(meta.ts または meta.js)で記述し、データをデフォルトエクスポートとして公開できます。
| 名前 | 説明 |
|---|---|
title | 表示名 |
icon | アイコン名(アイコンを参照) |
defaultOpen | フォルダーをデフォルトで開いた状態にする |
collapsible | フォルダーの内容を折りたたみ可能にする(デフォルト: true) |
pages | フォルダー内のアイテム(後述) |
pagesIndex | インデックスアイテム(後述) |
Pages
フォルダー内のアイテムはデフォルトでアルファベット順に並びます。pages を使用すると、アイテムを追加したり、並び順を指定したりできます。
{
"pages": ["index", "getting-started"]
}指定した場合、pages に記載されていない項目は含まれません。
| 種類 | 構文 | 説明 |
|---|---|---|
| パス | ./path/to/page | ページまたはフォルダーへのパスです。 |
| セパレーター | ---Label------[Icon]Label--- | 2つのセクションの間に置く区切りです (アイコン対応) 。 |
| リンク | [Text](url)[Icon][Text](url)external:[Text](url) | リンクを挿入します (アイコン対応) 。external: プレフィックスを付けると、外部リンクとして扱われます。 |
| Rest | ... | 残りのページを含めます (アルファベット順) 。 |
| Reversed Rest | z...a | Rest 項目の逆順版です。 |
| Extract | ...folder | フォルダー内の項目を展開します。 |
| Except | !item | ... または z...a から項目を除外します。 |
{
"pages": [
"components",
"---My Separator---",
"...folder",
"...",
"!file",
"!otherFolder",
"[Vercel](https://vercel.com)",
"[Triangle][Vercel](https://vercel.com)"
]
}URL の重複禁止
同じページ URL をページツリー全体で複数回使用することはできません。 同じ理由から、ページ項目を重複させることもできません。
これは意図的な仕様です。これにより、Fumadocs は現在のパス名だけを基にアクティブなツリー項目を特定できます。
フォルダーのインデックス
フォルダーがインデックス項目を持つ場合、そのフォルダーはクリック可能になり、クリックするとインデックス項目に移動します。
デフォルトでは、各フォルダー内の index ファイルがインデックス項目になります。フォルダーのインデックス項目は任意に指定することもでき、パスまたはリンクを指定できます。
{
// フォルダー内に "overview.mdx" ファイルがあると仮定します
"pagesIndex": "overview"
}アイコン
Fumadocs にはアイコンライブラリが含まれていないため、ランタイムでアイコン名を JSX 要素に変換し、コンポーネントとしてレンダリングする必要があります。
そのためには、loader() に icon ハンドラーを追加します。
i18n ルーティング
i18n ルーティングのスタイルは、用途に応じて定義できます。
import type { I18nConfig } from 'fumadocs-core/i18n';
export const i18n: I18nConfig = {
// デフォルト
parser: 'dot',
// または
parser: 'dir',
};ファイル名の末尾に .{locale} を付けると、言語ごとの Markdown/meta ファイルを追加できます。例:
デフォルトのロケールでは、ロケールコードを省略できます。
パスパラメーター
[name] という名前のフォルダーは、パラメーターの値ごとに生成されます。値は、そのフォルダーのメタファイルの staticParams に列挙してください。
{
"title": "Framework",
"staticParams": [{ "framework": "waku" }, { "framework": "astro" }]
}| パス (コンテンツフォルダーからの相対パス) | slugs |
|---|---|
./[framework]/deploy.mdx | ['waku', 'deploy'], ['astro', 'deploy'] |
meta ファイルは、生成されるすべてのフォルダーに適用されます。各ページは params を props として受け取るほか、loader() から page.params としても取得できます。
meta.ts では、代わりに params を受け取る関数をエクスポートすることもできます。その場合は、staticParams を名前付きエクスポートとして併せてエクスポートします。
const names = { waku: 'Waku', astro: 'Astro' };
export const staticParams = [{ framework: 'waku' }, { framework: 'astro' }];
export default ({ framework }: { framework: keyof typeof names }) => ({
title: names[framework],
});補足
[name] フォルダーは、その値を列挙するものがなければ、通常のフォルダーのままです。
ページのパラメーター
ページのフロントマターにも staticParams を指定できます。親フォルダーでも指定されている場合、そのページは両方に共通する値に対してのみ生成されます。
---
title: Fumadocs MDX
staticParams:
- framework: waku
---静的パス
固定のパスに置かれたファイルは、動的に生成されるファイルよりも優先されます。たとえば、astro/deploy.mdx は [framework]/deploy.mdx から生成される astro ページを置き換えます。meta ファイルについても同様です。
ローカライズされたページ
i18n を使用する場合、各ロケールのファイルはフォールバックロケールのファイルよりも優先されます。/cn/docs/astro/deploy の場合は、次のうち最初に見つかったファイルが使用されます。
astro/deploy.cn.mdx[framework]/deploy.cn.mdxastro/deploy.mdx[framework]/deploy.mdx
ローカライズされたページでは、まず meta.cn.json から staticParams が読み込まれます。dir パーサーを使用する場合は、言語ごとのフォルダーにそれぞれの値を記述します。
How is this guide?
最終更新日
