Sari la conținut

Gestionarea Conținutului

CMS-ul Proyecta este stratul principal de date al aplicației tale — nu doar articole de blog și texte de marketing, ci înregistrările reale pe care se construiește aplicația ta. Colecțiile sunt configurate și populate cu conținut de exemplu real înainte ca interfața să existe, astfel încât aplicația ta este livrată conectată la date editabile încă din prima versiune.

Majoritatea aplicațiilor Proyecta își stochează datele în CMS-ul integrat. Când descrii aplicația ta, Proyecta proiectează un model de date, creează colecțiile necesare și le populează cu conținut de exemplu realist — totul înainte ca o singură pagină să fie construită. Paginile tale citesc apoi acel conținut real, editabil de proprietar, prin hook-uri tipizate pe care AI-ul le configurează pentru tine. Pentru imaginea de ansamblu a modului în care toate acestea se îmbină, consultă Cum funcționează datele aplicației tale.

Nu trebuie să te gândești la nimic din toate acestea pentru a începe — se întâmplă automat. Această pagină explică ce se află dedesubt, astfel încât să poți modela lucrurile.

Conținutul este organizat în colecții și singleton-uri:

Tip Ce este Exemple
Colecție Un tip de conținut cu multe intrări — o schemă, multe rânduri. posts, services, testimonials, catalogItems
Singleton Un tip de conținut cu exact o intrare — conținut global, unic. businessInfo, seoSettings

O colecție este o formă; fiecare intrare este un element de acea formă (un articol de blog, un serviciu, un FAQ). Un singleton conține o singură înregistrare editabilă — identitatea afacerii tale sau textele pentru hero/secțiunile unei pagini.

Proyecta vine cu design-uri de colecții gata pregătite — câmpuri bine gândite, indicii pentru admin și conținut de start — pentru tipurile de înregistrări pe care le păstrează afacerile reale: articole de blog, servicii, un catalog de produse, un meniu alimentar, testimoniale și recenzii, membri ai echipei, o galerie foto, întrebări frecvente, evenimente, locații, resurse descărcabile, oferte de angajare, cursuri, tururi și listări de cazare, printre altele.

Nu alegi dintr-un meniu. Când descrii aplicația ta, Proyecta le alege pe cele pe care le cere brieful tău — tipul afacerii, funcționalitățile solicitate, limba ta — și le creează, pre-populate cu conținut de exemplu realist. Dacă aplicația ta are nevoie de ceva ce niciunul dintre ele nu acoperă, Proyecta proiectează o colecție personalizată cu propriile câmpuri.

Din acest motiv, panoul tău de administrare afișează colecțiile aplicației tale — nu o listă fixă. Se construiește singur pe baza modelului de conținut live al aplicației tale, astfel că tot ceea ce Proyecta a creat pentru tine, integrat sau personalizat, este exact ceea ce vezi și editezi. Două aplicații Proyecta rareori au același set, și asta este intenționat.

Fiecare colecție este alcătuită din câmpuri tipizate. Tipurile de câmpuri sunt aplicate de la un capăt la altul — panoul de administrare redă editorul potrivit, iar paginile tale primesc valori corect tipizate.

Tip câmp Folosit pentru
string Valori scurte pe o singură linie — titluri, nume, adrese.
text Un paragraf de text simplu.
markdown Text îmbogățit de lungime mare — corpul articolelor, texte “despre noi”.
slug Identificator URL, derivat automat dintr-un alt câmp (ex. titlul).
number Cantități, evaluări, durate.
money Un preț sau o sumă în valută — afișat și editat ca valoare monetară.
boolean Indicatoare on/off.
date Date calendaristice.
datetime Marcaje temporale — date de publicare, ore de start ale evenimentelor.
weeklyHours Program de deschidere pentru fiecare zi a săptămânii.
asset O imagine, un video sau un PDF (stocat ca URL public).
reference Un link către o intrare dintr-o altă colecție.
enum O valoare dintr-o listă fixă de opțiuni.
array O listă de șiruri — etichete, numere de telefon, zone.
blocks Blocuri de conținut suprapuse — o pagină construită din secțiuni tipizate.
json Date structurate care nu se potrivesc niciunuia dintre tipurile de mai sus.

O intrare este un element dintr-o colecție. Fiecare intrare are un status:

  • Draft — un lucru în curs de elaborare; niciodată afișat pe site-ul tău live.
  • Published — live și vizibil pentru vizitatori.
  • Archived — retras, păstrat departe.

Paginile tale publice văd doar intrările published — cele în stare Draft și cele arhivate sunt ascunse automat, astfel că poți pregăti conținut în siguranță înainte de a-l publica.

Există două moduri de a adăuga și edita conținut — niciunul nu necesită cod:

  1. Cere AI-ului în chat. Descrie pur și simplu modificarea și acesta editează conținutul potrivit pentru tine:
    • "Add a testimonial from María González: 'Best service in town', 5 stars."
    • "Change the tagline in Business Info to 'Café de especialidad en la Roma'."
    • "Mark the last five contact-form submissions as read."
  2. Panoul de administrare al aplicației tale. Fiecare aplicație publicată primește un panou de administrare integrat, protejat prin autentificare, unde tu (și personalul căruia îi acorzi acces) gestionezi conținutul și trimiterile de formulare direct — un editor în stil foaie de calcul per colecție, plus inbox-ul pentru trimiteri. Se configurează singur pe baza modelului de conținut live al aplicației tale, astfel că noile colecții apar acolo automat. Vezi Admin Panel.

Gestionează conținutul CMS prin panoul de administrare al aplicației sau prin AI — un editor de conținut în builder este pe roadmap (vezi În curând). Un browser de înregistrări în timp real pentru aplicații cu actualizări live vine în curând.

Paginile tale citesc conținut printr-un set de hook-uri tipizate în @/hooks/useContent — iar AI-ul scrie acea configurare pentru tine. Descrii pagina; Proyecta generează componentele care apelează aceste hook-uri pe colecțiile tale reale. Rareori le atingi tu însuți, dar iată ce fac:

Hook Ce face
useCollection('posts') Listează intrările published ale unei colecții (cu filter/sort/limit opțional).
useEntry('posts', slug) Preia o intrare published după slug (pagini de detaliu).
useSingleton('businessInfo') Citește un singleton (informații despre afacere, conținut de pagină).
useFormSubmit('contactForm') Trimite un formular și raportează erorile de validare.
// A blog index — exactly the kind of code the AI generates for you
import { useCollection } from '@/hooks/useContent';
function BlogList() {
const { data: posts, isLoading } = useCollection('posts', { sort: 'published_at:desc' });
if (isLoading) return <Spinner />;
return posts?.map((post) => <PostCard key={post._id} post={post} />);
}

Când Proyecta generează interfețe tipizate pentru colecțiile tale, hook-urile devin complet tipizate (useCollection<Post>('posts')), astfel că editorul tău autocompletează fiecare câmp. Citirile sunt hidratate la prima randare dintr-un snapshot pre-generat — paginile se randează instant și SEO-friendly, apoi se actualizează live în fundal.

Formularele sunt o capabilitate de prim rang, nu ceva construit manual de AI. Adaugă un bloc de formular și acesta redă câmpurile, validează input-ul, trimite și afișează o stare de succes:

<FormBlock form="contactForm" />

Formularele vin gata pregătite — un formular de contact, o cerere de ofertă, un formular de rezervare, un formular de comandă, un formular de înregistrare — și Proyecta conectează pe cel potrivit în paginile tale. Trimiterile ajung în inbox-ul panoului de administrare al aplicației, iar proprietarul primește un email când sosește una nouă. Vezi Forms pentru imaginea completă.

Conținutul poate fi tradus în mai multe locale. Câmpurile marcate ca localizate stochează o valoare per limbă, iar hook-urile de citire le rezolvă printr-un lanț de fallback (limba solicitată → fallback-uri configurate → implicit) când transmiți locala activă a vizitatorului:

const { data: posts } = useCollection('posts', { locale: 'es' });

Aplicațiile cu o singură limbă ignoră complet locale-urile — nu este nimic de configurat. Pentru povestea mai largă a traducerilor, vezi Internaționalizare.

Un release grupează mai multe intrări astfel încât să devină live (sau să fie nepublicate) împreună — pregătește o lansare coordonată de conținut (un launch, o pagină nouă de produs, o actualizare a FAQ-urilor) și comută totul dintr-o dată.

Notă: Publicarea automată programată nu este implementată încă. Un release cu o dată scheduled_at intră în statusul scheduled, dar trebuie publicat manual. Publicarea automată la ora programată vine în curând.

Rareori scrii asta manual — descrie ce vrei și Proyecta construiește pe baza colecțiilor reale:

  • "Build a blog. Each post has a title, cover image, rich-text body, category, and tags. Public routes at /blog and /blog/[slug], newest first."
  • "Add an FAQ section the owner can edit, grouped by category."
  • "Add a bookable services list with a request-a-quote form."
  • "Make the site bilingual — English and Spanish — with a language switcher."
  • "Seed the testimonials with five realistic reviews for a coffee shop."

CMS-ul este locul implicit pentru conținut durabil și înregistrări. Câteva tipuri de date locuiesc în sisteme dedicate:

Tip de date Unde locuiesc
Conținut și înregistrări (articole, servicii, listări, FAQ-uri, catalog, rezervări) Proyecta CMS (această pagină) — implicit
Stare realtime / comportament (chat live, feed-uri, prezență, stare joc) Realtime storevine în curând
Conturi de utilizator și autentificare Auth
Produse, comenzi, abonamente, plăți Commerce
Fișiere încărcate și media Files & Media
Active statice integrate în build directorul public/ din proiectul tău

CMS-ul este implicit. Un realtime store pentru comportament cu adevărat în timp real vine în curând; chiar și atunci, conținutul durabil și catalogul de comerț vor rămâne în CMS.

  • Editor de conținut în builder — parcurge și editează colecțiile CMS direct din dashboard-ul builder-ului (astăzi: gestionează conținutul prin panoul de administrare sau prin AI).
  • Editor WYSIWYG pentru text îmbogățit — editare vizuală pentru câmpurile markdown (astăzi sunt editate ca markdown).
  • Auto-publicare programată — release-uri care devin live automat la ora programată.
  • Previzualizare live a modificărilor de conținut în aplicația ta.
  • Roluri de conținut — permisiuni separate pentru editori față de permisiunile pentru dezvoltatori.