コレクションは1種類のコンテンツと、エディターがそれを作成するために使用するフォームを定義します。フィールドは各エントリに含めることができる値を定義します。例えば、製品コレクションにはタイトル、価格、説明、製品画像、ブランドエントリへの参照を含めることができます。
管理者はコンテンツタイプでコレクションを管理します。シードファイルは、サイトや環境を設定から構築する際に同じコレクション設定を定義できます。
コレクションID
すべてのコレクションには複数形のラベル、オプションの単数形ラベル、スラグがあります。ラベルは管理パネルに表示されます。スラグはクエリ、APIルート、シードファイル、データベースでコレクションを識別します。
例えば、ブログ記事とラベル付けされたコレクションは、単数形ラベルとしてブログ記事、スラグとしてpostsを使用できます。Astroコードはそのスラグでクエリします:
import { getEmDashCollection } from "emdash";
const { entries: posts } = await getEmDashCollection("posts");
コレクションを作成する前にスラグを選択してください。管理パネルはコレクションスラグやフィールドスラグを後から名前変更しません。既存のクエリと保存されたカラムがそれらに依存しているためです。スラグは小文字で始まり、小文字、数字、アンダースコアのみを含み、最大63文字です。EmDashは自身のルートやエントリデータで使用される予約名も拒否します。
コレクションの動作
コレクション設定は、エディターと公開ページがエントリをどのように使用するかを制御します:
- ルーティング可能は、エントリが公開される前に公開スラグを必要とします。URLパターンはエントリスラグまたはIDを公開日と組み合わせて公開パスを生成できます。
- 下書きはエディターが公開前に作業を保存できるようにします。
- リビジョンはコンテンツ履歴のスナップショットを保持します。
- プレビューは未公開コンテンツの署名付きプレビューURLを提供します。
- 検索は検索可能とマークされたフィールドの全文検索を有効にします。
- SEOはタイトル、説明、画像メタデータフィールドを追加し、コレクションをサイトマップに含めます。
- 編集ロックは1人のエディターが作業中にエントリを保持し、ロックが解除されるまで他のライターを拒否します。
- コメントはコレクションごとに有効にでき、モデレーションと自動クローズの設定があります。
- グループはコレクションをサイドバーの折りたたみ可能なフォルダーに配置します。同じグループのコレクションは1つのフォルダーを共有し、最初のコレクションが表示される位置に配置されます。タクソノミーは、割り当てられたすべてのコレクションがそのフォルダーに表示される場合にフォルダーに参加します。
サイトが実際に使用する動作を有効にしてください。例えば、プレビューをオンにするとプレビューURLが提供されますが、Astroページはエントリとそのプレビュー状態を正しくレンダリングする必要があります。完全なフローについてはプレビューモードを参照してください。
フィールドタイプ
エディターが入力する値とアプリケーションコードが受け取る方法のフィールドタイプを選択してください。EmDashは16のフィールドタイプをサポートしています:
| コンテンツの必要性 | フィールドタイプ | エディターが扱うもの |
|---|---|---|
| 短いまたは長いテキスト | string、text、slug、url | テキスト入力、テキストエリア、URL値 |
| 数値 | number、integer | 小数または整数入力 |
| 状態と時間 | boolean、datetime | スイッチまたは日時ピッカー |
| 固定選択肢 | select、multiSelect | 設定されたオプションから1つまたは複数の選択 |
| リッチまたは構造化データ | portableText、json、repeater | リッチテキスト、JSON、またはサブフィールドの繰り返しグループ |
| メディア | image、file | メディアライブラリから選択したアイテム |
| リレーションシップ | reference | 別のコレクションから選択したエントリ |
タイプはエディターコントロール以上のものです。EmDashが値をどのように保存・検証するか、生成されたTypeScript宣言がどのように記述するかも決定します。フィールドタイプリファレンスに各タイプの値の形式とオプションが記載されています。
フィールドルール
すべてのカスタムフィールドにはラベルとスラグがあります。以下のオプションはその動作をさらに記述します:
- 必須は値なしでエントリを保存することを防ぎます。
- ユニークはコレクション内の2つのエントリが同じ値を使用することを防ぎます。
- デフォルト値は適切な場合に開始値を提供します。
- バリデーションはフィールドタイプに応じて、テキスト長、数値範囲、パターン、選択肢、ファイルタイプ、リピーター長を制限できます。
- 検索可能はサポートされたテキストフィールドをコレクションの全文検索インデックスに含めます。
- インデックス付きはサポートされたフィールドでのソートまたはフィルタリング用のデータベースインデックスを作成します。
- 翻訳可能は各ロケールが独自の値を持つかどうかを制御します。翻訳不可の値は同じエントリの翻訳間で共有されます。
クエリがそのカスタムフィールドでソートまたはフィルタリングする場合、インデックス付きをオンにしてください。インデックスはデータベースが一致する順序付けされたエントリを見つけるのに役立ちますが、追加のストレージを使用し、コンテンツが作成または更新されるたびに作業が追加されます。ページがフィールドを表示するだけの理由でインデックスを作成しないでください。
インデックスはstring、url、number、integer、boolean、datetime、select、reference、slugフィールドで利用可能です。リッチテキスト、JSON、リピーター、複数選択値はより複雑なデータを含み、この種のインデックスを使用できません。
参照はターゲットエントリのIDを保存します。ターゲットコレクションで参照を設定し、フィールドが複数のエントリIDを保持する必要がある場合にのみ複数値を有効にしてください。参照はコードが関連コンテンツを読み込んだり識別したりできるようにします。ターゲットエントリをソースエントリにコピーするわけではありません。
フィールドの後からの変更
ラベル、バリデーション、検索設定、インデックス、ウィジェットオプション、表示順序はフィールドを置き換えることなく変更できます。フィールドの追加は既存のすべてのエントリを保持しますが、サイトが値を期待する場合、それらのエントリには新しいフィールドの値が必要です。
移行は既存の値を変換し、モデルを更新し、デプロイメント中に古いアプリケーションコードと新しいアプリケーションコードの互換性を保つ必要があります。これらの変更を行う前にデプロイ済みサイトのスキーマ進化に従ってください。
関連タスク
エントリの作成と公開にはコンテンツの操作を使用してください。フィルタリングとソートにはコンテンツのクエリを使用してください。生成された型とシードファイルについてはコンテンツモデルをお読みください。