Sari la conținut

Gestionarea conținutului

Un CMS headless cu colecții, intrări, locale și lansări. Gestionează conținutul din panoul Content sau prin SDK.

Proyecta dispune de un CMS headless complet. Este bazat pe schemă: definești colecții (tipuri de conținut structurat), apoi creezi intrări care respectă câmpurile fiecărei colecții. Intrările pot fi localizate și grupate în lansări.

Conținutul poate fi gestionat prin SDK sau cerând ajutorul AI-ului. API-ul de conținut are șase tipuri de resurse:

Tab / ResursăLa ce folosește
CollectionsDefinește și gestionează schemele de conținut (ex.: „Blog Post”, „FAQ”, „Product Spec”)
FieldsCâmpuri tipizate în cadrul unei colecții (gestionate ca sub-resursă a colecțiilor)
EntriesNavighează, creează, editează, publică și șterge intrări dintr-o colecție
LocalesAdaugă și gestionează locale de limbă/regiune pentru conținut tradus
ReleasesGrupează intrările pentru a fi publicate (sau retrase) împreună; publică manual prin releases.publish()
AssetsÎncarcă și gestionează fișiere media (imagini, videoclipuri, PDF-uri) referențiabile din intrări

Apasă pe o colecție în tab-ul Collections pentru a sări la intrările sale. Tab-ul Entries îți permite să creezi, editezi, publici și ștergi elemente de conținut individuale.

Poți gestiona totul și programatic prin SDK (proyecta.content).

ConceptCe reprezintă
CollectionO schemă — structura unui tip de conținut (ex.: „Blog Post”, „FAQ”, „Product Spec”)
FieldUn câmp tipizat într-o colecție (ex.: title: string, body: rich_text, coverImage: asset)
EntryO instanță individuală a unei colecții (un articol de blog, un item FAQ)
AssetUn fișier media încărcat, referențiabil din intrări
LocaleO limbă/regiune în care conținutul este tradus
ReleaseUn grup de intrări programate să fie publicate (sau retrase) în același timp
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);

Intrările sunt rândurile efective de conținut. Fiecare intrare aparține unei colecții și conține date care corespund câmpurilor acelei colecții.

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

Încărcarea de assets este o funcție de prim rang — folosește-o pentru a atașa imagini, videoclipuri sau PDF-uri la intrările tale:

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

Pentru încărcarea fișierelor prin chat (drag-and-drop în builder), vezi Files & Media.

Conținutul poate fi tradus în mai multe locale. Fiecare locale este un înregistrare gestionată prin proyecta.content.locales:

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

Când accesezi intrările, poți solicita traducerea pentru un anumit locale. Vezi Internationalization pentru imaginea de ansamblu a i18n.

O lansare este un pachet de intrări care intră în vigoare (sau sunt retrase) în același timp. Îți permite să pregătești o publicare coordonată de conținut — o lansare de marketing, o pagină nouă de produs, o actualizare a FAQ-ului — și ca totul să se activeze atomic.

Notă: Publicarea automată la o oră programată nu este încă implementată. Lansările cu o dată scheduled_at intră în statusul scheduled, dar trebuie publicate manual prin releases.publish(). Publicarea automată la ora specificată va fi disponibilă în curând.

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

Pentru a modifica programarea unei lansări, șterge-o și recreaz-o — nu există un endpoint de actualizare.

Tipare frecvente (lasă AI-ul să le configureze)

Section titled “Tipare frecvente (lasă AI-ul să le configureze)”
  • "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."

Când să folosești Content față de Database

Section titled “Când să folosești Content față de Database”
Caz de utilizareFolosește
Conținut editorial (articole, FAQ-uri, texte de marketing) — necesită stări de publicare/draft, programare, localizareContent API
Date ale aplicației (utilizatori, comenzi, linii de comandă) — necesită viteză de interogare, tranzacții, timp realDatabase
Assets statice în codDirectorul public/ din proiectul tău
Fișiere încărcate de utilizatoriFiles & Media
  • Editor de intrări rich-text — editare WYSIWYG completă pentru câmpurile rich_text în panoul Content
  • Previzualizare live a modificărilor de conținut față de aplicația ta
  • Roluri pentru conținut — permisiuni separate pentru editori față de permisiunile pentru dezvoltatori