pit設定
pitプロパティでは、CMSのUI・処理上で特別な表示・操作をするフィールドを設定できます。
基本構造
{
"pit": {
"title": "title",
"body": "content",
"createdAt": "publishedAt",
"updatedAt": "modifiedAt",
"draft": "isDraft",
"order": "displayOrder",
"defaultSortField": "_createdAt",
"defaultSortOrder": "desc"
}
} プロパティ一覧
| プロパティ | 型 | 説明 |
|---|---|---|
title | string | タイトルとして表示するフィールド名 |
body | string | 本文として扱うフィールド名 |
createdAt | string | 作成日として表示するフィールド名 |
updatedAt | string | 更新日として表示するフィールド名 |
draft | string | 下書き状態を示すフィールド名 |
order | string | 手動ソート用のフィールド名(number型) |
defaultSortField | string | デフォルトソートに使うpitキー名(_プレフィックス付き) New ✨ |
defaultSortOrder | "asc" | "desc" | デフォルトのソート順 New ✨ |
すべてのプロパティはオプションで、値にはコレクションのfieldsに定義されたフィールド名を指定します。
title
titleに指定したフィールドの値は、コンテンツ一覧やパンくずリストなど・そのファイルを示すものとして使用されます。
{
"fields": [{ "name": "title", "type": "text", "label": "タイトル" }],
"pit": {
"title": "title"
}
} 指定しない場合、コンテンツはファイル名で表示されます。
body
マークダウンファイルの本文部分にマッピングするフィールドを指定します。
{
"fields": [{ "name": "content", "type": "richtext", "label": "本文" }],
"pit": {
"body": "content"
}
} 動作
- 指定したフィールドは、マークダウンファイルのフロントマッター後の本文部分に格納されます
bodyを指定しない場合、すべてのフィールドはフロントマッターに格納されます
ファイル形式による違い
| 形式 | bodyの動作 |
|---|---|
md | 指定フィールドが本文部分に格納される |
json | bodyは無視される(すべてJSONオブジェクト内) |
createdAt
作成日時として扱うフィールドを指定します。指定するフィールドはdateタイプである必要があります。
{
"fields": [{ "name": "publishedAt", "type": "date", "label": "公開日時", "includeTime": true }],
"pit": {
"createdAt": "publishedAt"
}
} 動作
- 指定されたフィールドは通常のフィールド一覧(layoutエリア)には表示されません
- 代わりに、タイトルの下に日時として小さく表示されます
- 編集画面ではクリックすると日時入力に切り替わり、手動で編集できます
- 新規作成時は現在時刻が自動的に設定されます
updatedAt
更新日時として扱うフィールドを指定します。指定するフィールドはdateタイプである必要があります。
{
"fields": [{ "name": "modifiedAt", "type": "date", "label": "更新日時", "includeTime": true }],
"pit": {
"updatedAt": "modifiedAt"
}
} 動作
- 指定されたフィールドは通常のフィールド一覧(layoutエリア)には表示されません
- タイトルの下に
createdAtと並んで日時として小さく表示されます - 保存時に自動的に現在時刻が設定されます(
createdAtとの違い) - 手動で編集した場合でも、次回保存時に上書きされます
draft
下書き状態を示すフィールドを指定します。指定するフィールドはbooleanタイプである必要があります。
{
"fields": [{ "name": "isDraft", "type": "boolean", "label": "下書き", "default": true }],
"pit": {
"draft": "isDraft"
}
} 動作
- 指定されたフィールドは通常のフィールド一覧(layoutエリア)には表示されません
- 代わりに、編集画面では保存ボタンの横にトグルスイッチとして表示されます
- コンテンツ一覧では、下書きのコンテンツにバッジが表示されます
order
手動で表示順を管理するためのフィールドを指定します。指定するフィールドはnumberタイプである必要があります。
{
"fields": [
{ "name": "title", "type": "text", "label": "タイトル" },
{ "name": "displayOrder", "type": "number", "label": "表示順" }
],
"pit": {
"title": "title",
"order": "displayOrder"
}
} 動作
- 値は0から始まる連番(0, 1, 2, 3, …)で管理されます
- コンテンツ一覧画面でドラッグ&ドロップによる並び替えが可能になります
- 一覧ページで並び替えを行うと、各コンテンツの
orderフィールドの値が自動的に再計算され、コミットされます
defaultSortField / defaultSortOrder
コレクション一覧を開いたときのデフォルトソートを指定します。
{
"pit": {
"title": "title",
"createdAt": "publishedAt",
"defaultSortField": "_createdAt",
"defaultSortOrder": "desc"
}
} 動作
defaultSortField:_プレフィックス付きのpitキー名を指定しますdefaultSortOrder:"asc"(昇順)または"desc"(降順)を指定します- URLパラメータでソートが指定されている場合は、そちらが優先されます
- 不正な値が設定された場合は警告が表示され、従来のフォールバックが適用されます
指定可能な値
| 値 | ソート対象 | 条件 |
|---|---|---|
_filename | ファイル名 | 常に使用可能 |
_title | タイトル | pit.titleが設定されている |
_createdAt | 作成日 | pit.createdAtが設定されている |
_updatedAt | 更新日 | pit.updatedAtが設定されている |
_order | 表示順 | pit.orderが設定されている |
_プレフィックスはシステム予約値を示す規約です(フォーム機能の{{_allFields}}/{{_submittedAt}}と同様)。
設定例
作成日の降順でソート:
{
"pit": {
"createdAt": "publishedAt",
"defaultSortField": "_createdAt",
"defaultSortOrder": "desc"
}
} ファイル名でソート(pit.createdAtが設定されていてもファイル名ソートにしたい場合):
{
"pit": {
"createdAt": "publishedAt",
"defaultSortField": "_filename",
"defaultSortOrder": "asc"
}
}
_order(表示順)ソートは昇順固定のため、defaultSortOrderは無視されます。
一覧のソート機能
コンテンツ一覧ページでは、pitの設定に応じてソートオプションが利用できます。
ソートオプション
| オプション | 表示条件 | デフォルト順 |
|---|---|---|
| 表示順 | pit.orderが設定されている | 昇順 |
| タイトル | pit.titleが設定されている | 昇順 |
| 作成日 | pit.createdAtが設定されている | 降順 |
| 更新日 | pit.updatedAtが設定されている | 降順 |
| ファイル名 | 常に表示 | 昇順 |
デフォルトソートの決定
| 優先度 | 条件 | ソートフィールド | ソート順 |
|---|---|---|---|
| 1 | URLパラメータが指定されている | URLパラメータに従う | URLパラメータに従う |
| 2 | pit.defaultSortFieldが設定されている New ✨ | defaultSortFieldに従う | defaultSortOrderに従う |
| 3 | pit.orderが設定されている | order | 昇順 |
| 4 | pit.createdAtが設定されている | createdAt | 降順 |
| 5 | 上記いずれもなし | ファイル名 | 昇順 |
ソート状態はURLクエリパラメータ(?sort=createdAt&order=desc)に保存されるため、ページリロードやブックマークで状態を維持できます。
設定例
ブログ記事
{
"name": "posts",
"label": "ブログ記事",
"path": "content/posts",
"extension": "md",
"fields": [
{ "name": "title", "type": "text", "label": "タイトル", "required": true },
{ "name": "slug", "type": "text", "label": "スラッグ", "required": true },
{ "name": "content", "type": "richtext", "label": "本文" },
{ "name": "publishedAt", "type": "date", "label": "公開日時", "includeTime": true },
{ "name": "modifiedAt", "type": "date", "label": "更新日時", "includeTime": true },
{ "name": "isDraft", "type": "boolean", "label": "下書き", "default": true }
],
"pit": {
"title": "title",
"body": "content",
"createdAt": "publishedAt",
"updatedAt": "modifiedAt",
"draft": "isDraft",
"defaultSortField": "_createdAt",
"defaultSortOrder": "desc"
}
} 手動で並び替えるコレクション
{
"name": "navigation",
"label": "ナビゲーション",
"path": "content/navigation",
"extension": "json",
"fields": [
{ "name": "title", "type": "text", "label": "タイトル", "required": true },
{ "name": "url", "type": "text", "label": "URL", "required": true },
{ "name": "displayOrder", "type": "number", "label": "表示順" }
],
"pit": {
"title": "title",
"order": "displayOrder"
}
} 製品情報(JSON形式)
{
"name": "products",
"label": "製品",
"path": "content/products",
"extension": "json",
"fields": [
{ "name": "name", "type": "text", "label": "製品名", "required": true },
{ "name": "price", "type": "number", "label": "価格" },
{ "name": "createdAt", "type": "date", "label": "登録日", "includeTime": true }
],
"pit": {
"title": "name",
"createdAt": "createdAt"
}
} 著者(シンプルな設定)
{
"name": "authors",
"label": "著者",
"path": "content/authors",
"extension": "json",
"fields": [
{ "name": "name", "type": "text", "label": "名前", "required": true },
{ "name": "bio", "type": "text", "label": "自己紹介" }
],
"pit": {
"title": "name"
}
}