コンテンツモデル

このページ

コンテンツモデルは、サイトが保存する情報を記述します。EmDash では、モデルはコレクションとフィールドで構成されます。データベースはそのモデルを保存し、管理パネルはそれを使用してエディターが作業するフォームを構築します。

コレクション、フィールド、エントリ

コレクションは、投稿、製品、著者などのコンテンツの種類です。フィールドは、タイトル、本文、価格、著者参照などのコンテンツの一つの情報です。エントリは、コレクション内の保存された項目です。

例えば、投稿コレクションには次のフィールドがあるかもしれません:

Posts
├── Title          短いテキスト、必須
├── Excerpt        長いテキスト、オプション
├── Content        リッチテキスト、オプション
└── Featured image 画像、オプション

EmDash は、ID、公開スラッグ、公開状態、著者、作成・更新日時、ロケール、リビジョン参照など、すべてのエントリに必要な情報も管理します。クエリ結果は、コレクションに定義されたフィールドとともにこれらの標準情報を公開します。

エントリを削除すると、削除時刻が設定されてごみ箱に移動されます。管理者は、誰かがごみ箱から完全に削除するまで復元できます。このエントリワークフローは、スキーマを変更して保存されたデータを削除するフィールドやコレクションの削除とは異なります。

1つのモデル、2つの管理方法

管理者は、管理パネルのコンテンツタイプでコレクションを作成・編集できます。EmDash がデータベーススキーマを更新し、コンテンツエディターは次にコレクションを読み込む時にその変更を使用します。

シードファイルは、JSON で開始モデルを記述します。テンプレートは、セットアップ時にコレクションやその他のサイトデータを作成するためにシードを使用します。チームはバージョン管理にシードを保持し、別の環境を作成する際に適用することもできます。管理パネルとシードは別々のモデルを作成しません。両方ともターゲットデータベースに保存されたモデルを変更します。

次のシードフラグメントは、投稿の例の4つのカスタムフィールドを定義しています:

{
	"version": "1",
	"collections": [
		{
			"slug": "posts",
			"label": "Posts",
			"labelSingular": "Post",
			"fields": [
				{
					"slug": "title",
					"label": "Title",
					"type": "string",
					"required": true
				},
				{ "slug": "excerpt", "label": "Excerpt", "type": "text" },
				{ "slug": "content", "label": "Content", "type": "portableText" },
				{ "slug": "featured_image", "label": "Featured Image", "type": "image" }
			]
		}
	]
}

シードファイルリファレンスでは、コンフリクト処理と、設定、タクソノミー、メニュー、ウィジェットエリア、リダイレクト、サンプルコンテンツを含むシードに含められるその他のオブジェクトについて説明しています。

既存コンテンツがあるモデルの変更

コレクションを追加すると、新しいエントリ用の空の場所が作成されます。オプションのフィールドを追加すると、すべてのエントリにそのフィールドが追加されますが、エディターまたはマイグレーションが値を提供するまで、既存のエントリには値がありません。デフォルト値は、フィールドが追加される際に初期値を提供できます。

ラベル、説明、バリデーションルール、検索設定、フィールドの順序は、フィールドを置き換えずに更新できます。コレクションとフィールドのスラッグは安定した識別子です。管理パネルは作成時に設定し、後でリネームを提供しません。

本番で使用されているモデルを変更する前に、デプロイされたサイトのスキーマ進化をお読みください。

TypeScript 宣言

EmDash は、データベース内のモデルから TypeScript 宣言を生成できます。宣言はコレクション名とフィールド形状をパブリッククエリ関数に追加するため、posts のクエリは data.titledata.content などのフィールドが TypeScript に既知のエントリを返します。

ローカル開発中、Astro インテグレーションは emdash-env.d.ts を書き込み、スキーマ変更後にリフレッシュします。ファイルは生成された出力です。宣言ではなくコンテンツモデルを編集してください。リモートワークフローは emdash types を実行して、選択した EmDash サイトから .emdash/types.ts を書き込むことができます。表現するモデルを変更した後、そのファイルを再生成してください。

生成された型はコードが現在のスキーマに一致するのを助けますが、保存されたコンテンツをマイグレーションしません。モデル変更と必要なコンテンツマイグレーションは別々の操作のままです。

関連コンセプト

コレクションの機能とフィールドの選択については、コレクションとフィールドをお読みください。エディターと権限モデルについては、管理パネルをお読みください。