コンテンツモデルは、サイトが保存する情報を記述します。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.title、data.content などのフィールドが TypeScript に既知のエントリを返します。
ローカル開発中、Astro インテグレーションは emdash-env.d.ts を書き込み、スキーマ変更後にリフレッシュします。ファイルは生成された出力です。宣言ではなくコンテンツモデルを編集してください。リモートワークフローは emdash types を実行して、選択した EmDash サイトから .emdash/types.ts を書き込むことができます。表現するモデルを変更した後、そのファイルを再生成してください。
生成された型はコードが現在のスキーマに一致するのを助けますが、保存されたコンテンツをマイグレーションしません。モデル変更と必要なコンテンツマイグレーションは別々の操作のままです。
関連コンセプト
コレクションの機能とフィールドの選択については、コレクションとフィールドをお読みください。エディターと権限モデルについては、管理パネルをお読みください。