pit設定

pitプロパティでは、CMSのUI・処理上で特別な表示・操作をするフィールドを設定できます。

基本構造

{
	"pit": {
		"title": "title",
		"body": "content",
		"createdAt": "publishedAt",
		"updatedAt": "modifiedAt",
		"draft": "isDraft",
		"order": "displayOrder",
		"defaultSortField": "_createdAt",
		"defaultSortOrder": "desc"
	}
}

プロパティ一覧

プロパティ説明
titlestringタイトルとして表示するフィールド名
bodystring本文として扱うフィールド名
createdAtstring作成日として表示するフィールド名
updatedAtstring更新日として表示するフィールド名
draftstring下書き状態を示すフィールド名
orderstring手動ソート用のフィールド名(number型)
defaultSortFieldstringデフォルトソートに使う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指定フィールドが本文部分に格納される
jsonbodyは無視される(すべてJSONオブジェクト内)

createdAt

作成日時として扱うフィールドを指定します。指定するフィールドはdateタイプである必要があります。

{
	"fields": [{ "name": "publishedAt", "type": "date", "label": "公開日時", "includeTime": true }],
	"pit": {
		"createdAt": "publishedAt"
	}
}

動作

  • 指定されたフィールドは通常のフィールド一覧(layoutエリア)には表示されません
  • 代わりに、タイトルの下に日時として小さく表示されます
  • 編集画面ではクリックすると日時入力に切り替わり、手動で編集できます
  • 新規作成時は現在時刻が自動的に設定されます
createdAtの表示位置

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エリア)には表示されません
  • 代わりに、編集画面では保存ボタンの横にトグルスイッチとして表示されます
  • コンテンツ一覧では、下書きのコンテンツにバッジが表示されます
draftの表示位置 コンテンツ一覧での下書きバッジ

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が設定されている降順
ファイル名常に表示昇順

デフォルトソートの決定

優先度条件ソートフィールドソート順
1URLパラメータが指定されているURLパラメータに従うURLパラメータに従う
2pit.defaultSortFieldが設定されている New ✨defaultSortFieldに従うdefaultSortOrderに従う
3pit.orderが設定されているorder昇順
4pit.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"
	}
}