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.
Panoul Content
Section titled “Panoul Content”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 |
|---|---|
| Collections | Definește și gestionează schemele de conținut (ex.: „Blog Post”, „FAQ”, „Product Spec”) |
| Fields | Câmpuri tipizate în cadrul unei colecții (gestionate ca sub-resursă a colecțiilor) |
| Entries | Navighează, creează, editează, publică și șterge intrări dintr-o colecție |
| Locales | Adaugă și gestionează locale de limbă/regiune pentru conținut tradus |
| Releases | Grupează 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).
Concepte
Section titled “Concepte”| Concept | Ce reprezintă |
|---|---|
| Collection | O schemă — structura unui tip de conținut (ex.: „Blog Post”, „FAQ”, „Product Spec”) |
| Field | Un câmp tipizat într-o colecție (ex.: title: string, body: rich_text, coverImage: asset) |
| Entry | O instanță individuală a unei colecții (un articol de blog, un item FAQ) |
| Asset | Un fișier media încărcat, referențiabil din intrări |
| Locale | O limbă/regiune în care conținutul este tradus |
| Release | Un grup de intrări programate să fie publicate (sau retrase) în același timp |
Quickstart
Section titled “Quickstart”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });Colecții
Section titled “Colecții”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);Intrări
Section titled “Intrări”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 entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);Assets
Section titled “Assets”Î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 assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deletePentru încărcarea fișierelor prin chat (drag-and-drop în builder), vezi Files & Media.
Localizare
Section titled “Localizare”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.
Lansări
Section titled “Lansări”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_atintră în statusulscheduled, dar trebuie publicate manual prinreleases.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 readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor 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 utilizare | Folosește |
|---|---|
| Conținut editorial (articole, FAQ-uri, texte de marketing) — necesită stări de publicare/draft, programare, localizare | Content API |
| Date ale aplicației (utilizatori, comenzi, linii de comandă) — necesită viteză de interogare, tranzacții, timp real | Database |
| Assets statice în cod | Directorul public/ din proiectul tău |
| Fișiere încărcate de utilizatori | Files & Media |
În curând
Section titled “În curând”- 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