コンテンツにスキップ

コンテンツ管理

コレクション、エントリ、ロケール、リリースを備えたヘッドレス CMS。Content パネルまたは SDK からコンテンツを管理できます。

Proyecta にはフル機能のヘッドレス CMS が搭載されています。スキーマファーストの設計で、まず コレクション(構造化されたコンテンツタイプ)を定義し、各コレクションのフィールドに合わせた エントリ を作成します。エントリはローカライズしたり、リリース としてまとめたりすることができます。

コンテンツは SDK を使って管理することも、AI に依頼して管理することもできます。Content API には 6 種類のリソースタイプがあります。

タブ / リソース用途
Collectionsコンテンツスキーマの定義と管理(例:「Blog Post」「FAQ」「Product Spec」)
Fieldsコレクション内の型付きスロット(Collections のサブリソースとして管理)
Entriesコレクション内のエントリの閲覧、作成、編集、公開、削除
Locales翻訳コンテンツ用の言語・地域ロケールの追加と管理
Releases複数のエントリをまとめて公開(または非公開に)する;releases.publish() で手動公開
Assetsエントリから参照できるメディアファイル(画像、動画、PDF)のアップロードと管理

Collections タブでコレクションをクリックすると、そのエントリに移動します。Entries タブでは、個々のコンテンツアイテムの作成、編集、公開、削除が行えます。

すべての操作は SDK(proyecta.content)を使ってプログラムで行うこともできます。

概念説明
Collectionスキーマ — 1 種類のコンテンツの形状(例:「Blog Post」「FAQ」「Product Spec」)
Fieldコレクション内の型付きスロット(例:title: stringbody: rich_textcoverImage: asset
Entryコレクションの単一インスタンス(ブログ記事 1 件、FAQ アイテム 1 件)
Assetエントリから参照できるアップロード済みメディアファイル
Localeコンテンツを翻訳する対象の言語・地域
Release同時に公開(または非公開に)するエントリのグループ
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collection
const blog = await proyecta.content.collections.create({
api_id: 'blogPost',
name: 'Blog Post',
// fields are added via collections.fields.create()
});
// 2. Create an entry
const post = await proyecta.content.entries.create({
collection_id: blog.id,
data: {
title: 'Hello, world',
body: 'My very first post.',
},
});
// 3. Publish it
await proyecta.content.entries.publish({ entryId: post.id });
// Browse collections
for await (const collection of proyecta.content.collections.list()) {
console.log(collection.name);
}
// Add or remove fields on a collection
await proyecta.content.collections.fields.create(blog.id, {
/* field definition */
});
await proyecta.content.collections.fields.delete(blog.id, fieldId);

エントリは実際のコンテンツ行です。各エントリはコレクションに属し、そのコレクションのフィールドに合ったデータを持ちます。

// Browse entries (pass the collection's api_id, not its numeric id)
for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) {
console.log(entry);
}
// Update an entry
await proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entry
await proyecta.content.entries.publish({ entryId: post.id });
// Delete an entry
await proyecta.content.entries.delete(post.id);

アセットのアップロードはファーストクラスの機能です。画像、動画、PDF をエントリに添付するために使用します。

// Browse assets
for await (const asset of proyecta.content.assets.list()) {
console.log(asset);
}
// Upload, update, or delete via assets.create / assets.update / assets.delete

チャットを使ったファイルアップロード(Builder へのドラッグ&ドロップ)については、ファイルとメディア を参照してください。

コンテンツは複数のロケールに翻訳できます。各ロケールは proyecta.content.locales で管理されるレコードです。

await proyecta.content.locales.create({
/* code, name, etc. */
});
for await (const locale of proyecta.content.locales.list()) {
console.log(locale);
}

エントリを取得する際に、特定ロケールの翻訳を指定できます。i18n 全体の概要については 国際化 を参照してください。

リリース は、同時に公開(または非公開に)するエントリのまとまりです。マーケティングローンチ、新しい製品ページ、FAQ の刷新など、協調したコンテンツ公開をステージングして、すべてをアトミックに切り替えることができます。

注意: 時刻指定による自動公開はまだ実装されていません。scheduled_at に日時を設定したリリースは scheduled ステータスになりますが、releases.publish() を使って手動で公開する必要があります。指定時刻での自動公開は近日中に対応予定です。

// Create a release (optionally with a target date)
const release = await proyecta.content.releases.create({
name: 'Monday launch',
scheduled_at: '2024-01-08T09:00:00Z',
});
// Manually publish a release when ready
await proyecta.content.releases.publish({ releaseId: release.id });
// Browse releases
for await (const r of proyecta.content.releases.list()) {
console.log(r);
}

リリースのスケジュールを変更するには、削除して再作成してください — update エンドポイントは存在しません。

よくある使い方(AI に実装してもらう)

Section titled “よくある使い方(AI に実装してもらう)”
  • "Proyecta Content API を使ってブログを作成してください。'Blog Post' コレクションにフィールド: title、slug、excerpt、body(リッチテキスト)、coverImage(アセット)、author を追加し、/blog と /blog/[slug] にパブリックルートを設けてください。"
  • "Proyecta Content に FAQ コレクションを作成してください。FAQ を追加・編集できる管理ページと、公開用の /faq ページを作ってください。"
  • "Proyecta Content を使って英語とスペイン語のロケールを持つ多言語ランディングページを設定してください。"
  • "3 つのブログ記事を含むリリースを作成し、準備ができたら手動で公開してください。"
ユースケース使うべきもの
編集コンテンツ(記事、FAQ、マーケティングコピー)— 公開/下書き状態、スケジュール管理、ローカライゼーションが必要Content API
アプリデータ(ユーザー、注文、明細行)— クエリ速度、トランザクション、リアルタイムが必要Database
コード内の静的アセットプロジェクト内の public/ ディレクトリ
ユーザーがアップロードするファイルファイルとメディア
  • リッチテキストエントリエディタ — Content パネルで rich_text フィールドをフル WYSIWYG 編集
  • コンテンツ変更のアプリへの ライブプレビュー
  • コンテンツロール — 編集者権限と開発者権限の分離