Hoppa till innehåll

Innehållshantering

Ett headless CMS med collections, entries, locales och releases. Hantera innehåll från panelen Content eller via SDK:t.

Proyecta har ett komplett headless CMS. Det är schemabaserat: du definierar collections (strukturerade innehållstyper) och skapar sedan entries som följer varje collections fält. Entries kan lokaliseras och grupperas i releases.

Innehåll kan hanteras via SDK:t eller genom att fråga AI:n. Content API har sex resurstyper:

Flik / ResursVad den används till
CollectionsDefiniera och hantera innehållsscheman (t.ex. “Blog Post”, “FAQ”, “Product Spec”)
FieldsTypade fält inom en collection (hanteras som en underresurs till Collections)
EntriesBläddra bland, skapa, redigera, publicera och ta bort entries inom en collection
LocalesLägg till och hantera språk- och regionlocales för översatt innehåll
ReleasesGruppera entries som ska publiceras (eller avpubliceras) samtidigt; publicera manuellt via releases.publish()
AssetsLadda upp och hantera mediefiler (bilder, videor, PDF:er) som kan refereras från entries

Klicka på en collection i fliken Collections för att hoppa till dess entries. Fliken Entries låter dig skapa, redigera, publicera och ta bort enskilda innehållsobjekt.

Du kan också hantera allt programmatiskt via SDK:t (proyecta.content).

BegreppVad det är
CollectionEtt schema — formen på en innehållstyp (t.ex. “Blog Post”, “FAQ”, “Product Spec”)
FieldEtt typat fält i en collection (t.ex. title: string, body: rich_text, coverImage: asset)
EntryEn enskild instans av en collection (ett blogginlägg, ett FAQ-objekt)
AssetEn uppladdad mediefil som kan refereras från entries
LocaleEtt språk eller en region som innehållet översätts till
ReleaseEn grupp entries som schemaläggs att publiceras (eller avpubliceras) samtidigt
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);

Entries är de faktiska innehållsraderna. Varje entry tillhör en collection och innehåller data som matchar collectionens fält.

// 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);

Uppladdning av assets är en förstklassig funktion — använd dem för att bifoga bilder, videor eller PDF:er till dina entries:

// 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

För chattdrivna filuppladdningar (dra-och-släpp i Builder), se Filer och media.

Innehåll kan översättas till flera locales. Varje locale är en post som hanteras via proyecta.content.locales:

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

När du hämtar entries kan du begära översättningen för en specifik locale. Se Internationalisering för en bredare bild av i18n.

En release är ett paket med entries som publiceras (eller avpubliceras) samtidigt. Det låter dig förbereda en samordnad innehållslansering — en marknadsföringskampanj, en ny produktsida, en FAQ-uppdatering — och låta allt slå igenom atomärt.

Obs: Automatisk tidsstyrd publicering är ännu inte implementerat. Releases med ett scheduled_at-datum får statusen scheduled men måste publiceras manuellt via releases.publish(). Automatisk publicering vid den angivna tidpunkten är på väg.

// 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);
}

För att ändra en releases schema tar du bort den och skapar den på nytt — det finns inget endpoint för uppdatering.

Vanliga mönster (låt AI:n sätta ihop det)

Section titled “Vanliga mönster (låt AI:n sätta ihop det)”
  • "Build a blog using the Proyecta Content API. Collection 'Blog Post' with fields: title, slug, excerpt, body (rich text), coverImage (asset), author. Public route at /blog and /blog/[slug]."
  • "Create an FAQ collection in Proyecta Content. Build an admin page where I can add/edit FAQs and a public /faq page."
  • "Set up a multi-language landing page using Proyecta Content with English and Spanish locales."
  • "Create a release containing three blog posts and publish it manually when ready."

När ska du använda Content jämfört med Database

Section titled “När ska du använda Content jämfört med Database”
AnvändningsfallAnvänd detta
Redaktionellt innehåll (inlägg, FAQs, marknadsföringstext) — behöver publicerings-/utkastlägen, schemaläggning, lokaliseringContent API
Appdata (användare, beställningar, orderrader) — behöver frågeprestanda, transaktioner, realtidDatabase
Statiska resurser i kodKatalogen public/ i ditt projekt
Filer uppladdade av användareFiler och media
  • Rich-text-redigerare för entries — fullständig WYSIWYG-redigering för rich_text-fält i panelen Content
  • Liveförhandsgranskning av innehållsändringar mot din app
  • Innehållsroller — separata redaktörsbehörigheter från utvecklarbehörigheter