Przejdź do głównej zawartości

Zarządzanie treścią

CMS Proyecta to główna warstwa danych Twojej aplikacji — nie tylko wpisy na blogu i teksty marketingowe, ale prawdziwe rekordy, na których opiera się cała aplikacja. Kolekcje są tworzone i wypełniane realistyczną przykładową treścią jeszcze przed powstaniem interfejsu, dzięki czemu od pierwszego buildu aplikacja korzysta z edytowalnych danych.

Większość aplikacji Proyecta przechowuje dane we wbudowanym CMS-ie. Gdy opisujesz swoją aplikację, Proyecta projektuje model danych, tworzy potrzebne kolekcje i wypełnia je realistyczną przykładową treścią — zanim zostanie zbudowana choćby jedna strona. Twoje strony odczytują tę prawdziwą, edytowalną przez właściciela treść za pomocą typowanych hooków, które AI okablowuje za Ciebie. Aby zobaczyć pełny obraz tego, jak to wszystko się łączy, zajrzyj do Jak działają dane Twojej aplikacji.

Nie musisz o tym myśleć, żeby zacząć — wszystko dzieje się automatycznie. Ta strona wyjaśnia, co kryje się pod spodem, abyś mógł to kształtować.

Treść jest zorganizowana w kolekcje i singletony:

Typ Czym jest Przykłady
Kolekcja Typ treści z wieloma wpisami — jeden schemat, wiele rekordów. posts, services, testimonials, catalogItems
Singleton Typ treści z dokładnie jednym wpisem — globalna, jednorazowa treść. businessInfo, seoSettings

Kolekcja to kształt; każdy wpis to jeden element o tym kształcie (jeden post na blogu, jedna usługa, jedno FAQ). Singleton przechowuje pojedynczy edytowalny rekord — tożsamość Twojej firmy albo treść sekcji hero na stronie.

Proyecta dostarcza gotowe projekty kolekcji — przemyślane pola, wskazówki dla panelu admina i przykładową treść startową — dla typów rekordów, jakich używają prawdziwe firmy: posty i artykuły na blogu, usługi, katalog produktów, menu restauracji, opinie i recenzje, członkowie zespołu, galeria zdjęć, FAQ, wydarzenia, lokalizacje, zasoby do pobrania, oferty pracy, kursy, wycieczki i oferty noclegowe, a także wiele innych.

Nie wybierasz z żadnej listy. Gdy opisujesz swoją aplikację, Proyecta sam dobiera odpowiednie kolekcje — biorąc pod uwagę rodzaj Twojej działalności, żądane funkcje i język — i tworzy je, wstępnie wypełnione realistyczną przykładową treścią. Jeśli Twoja aplikacja potrzebuje czegoś, czego żadna gotowa kolekcja nie obejmuje, Proyecta projektuje niestandardową kolekcję z własnymi polami.

Dlatego Twój panel admina pokazuje kolekcje Twojej aplikacji — nie ustaloną z góry listę. Buduje się sam na podstawie aktualnego modelu treści Twojej aplikacji, więc cokolwiek Proyecta dla Ciebie stworzył — wbudowane czy niestandardowe — dokładnie to widzisz i edytujesz. Dwie aplikacje Proyecta rzadko mają ten sam zestaw kolekcji i tak właśnie powinno być.

Każda kolekcja składa się z typowanych pól. Typy pól są egzekwowane na każdym poziomie — panel admina renderuje odpowiedni edytor, a Twoje strony otrzymują poprawnie typowane wartości.

Typ pola Do czego służy
string Krótkie wartości jednolinijkowe — tytuły, nazwy, adresy.
text Akapit zwykłego tekstu.
markdown Długi tekst sformatowany — treść artykułów, sekcja „o nas“.
slug Identyfikator URL, automatycznie generowany z innego pola (np. tytułu).
number Liczniki, oceny, czasy trwania.
money Cena lub kwota w walucie — wyświetlana i edytowana jako wartość pieniężna.
boolean Flagi włącz/wyłącz.
date Daty kalendarzowe.
datetime Znaczniki czasu — daty publikacji, godziny rozpoczęcia wydarzeń.
weeklyHours Godziny otwarcia dla każdego dnia tygodnia.
asset Obraz, wideo lub PDF (przechowywany jako publiczny URL).
reference Odniesienie do wpisu w innej kolekcji.
enum Wartość z ustalonej listy możliwości.
array Lista ciągów tekstowych — tagi, numery telefonów, strefy.
blocks Układalne bloki treści — strona zbudowana z typowanych sekcji.
json Dane strukturalne, które nie pasują do żadnego z powyższych typów.

Wpis to jeden element w kolekcji. Każdy wpis ma status:

  • Draft — praca w toku; nigdy nie jest wyświetlana na Twojej działającej stronie.
  • Published — aktywna i widoczna dla odwiedzających.
  • Archived — wycofana, przechowywana na uboczu.

Twoje publiczne strony widzą wyłącznie wpisy ze statusem Published — wersje robocze i zarchiwizowane elementy są ukrywane automatycznie, więc możesz bezpiecznie przygotowywać treść przed jej opublikowaniem.

Treść możesz dodawać i edytować na dwa sposoby — żaden nie wymaga dotykania kodu:

  1. Poproś AI w czacie. Opisz zmianę, a AI edytuje właściwą treść za Ciebie:
    • "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. Panel admina Twojej aplikacji. Każda opublikowana aplikacja ma wbudowany, chroniony logowaniem panel admina, w którym Ty (i pracownicy, którym udzielisz dostępu) możecie bezpośrednio zarządzać treścią i formularzami kontaktowymi — edytor w stylu arkusza kalkulacyjnego dla każdej kolekcji oraz skrzynka odbiorcza zgłoszeń. Panel konfiguruje się sam na podstawie aktualnego modelu treści Twojej aplikacji, więc nowe kolekcje pojawiają się tam automatycznie. Zobacz Panel admina.

Zarządzaj treścią CMS-a przez panel admina swojej aplikacji lub przez AI — edytor treści bezpośrednio w builderze jest w planach (zob. Wkrótce). Przeglądarka rekordów w czasie rzeczywistym dla aplikacji z live updates pojawi się wkrótce.

Twoje strony odczytują treść za pomocą zestawu typowanych hooków z @/hooks/useContent — a AI pisze to okablowanie za Ciebie. Opisujesz stronę; Proyecta generuje komponenty, które wywołują te hooki na Twoich prawdziwych kolekcjach. Rzadko będziesz je dotykać samodzielnie, ale oto co robią:

Hook Co robi
useCollection('posts') Wyświetla opublikowane wpisy kolekcji (z opcjonalnym filtrem/sortowaniem/limitem).
useEntry('posts', slug) Pobiera jeden opublikowany wpis po slugu (strony szczegółowe).
useSingleton('businessInfo') Odczytuje singleton (dane firmy, treść strony).
useFormSubmit('contactForm') Wysyła formularz i zgłasza błędy walidacji.
// 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} />);
}

Gdy Proyecta generuje typowane interfejsy dla Twoich kolekcji, hooki stają się w pełni typowane (useCollection<Post>('posts')), dzięki czemu edytor podpowiada każde pole z autouzupełnianiem. Odczyty są hydratowane przy pierwszym renderowaniu z zapisanego snapshotuj — strony renderują się natychmiast i z myślą o SEO, a następnie odświeżają się na żywo w tle.

Formularze to pierwszorzędna funkcjonalność, a nie coś, co AI buduje ręcznie. Dodaj blok formularza, a on sam wyrenderuje pola, zwaliduje dane, wyśle formularz i pokaże stan sukcesu:

<FormBlock form="contactForm" />

Formularze też są gotowe — formularz kontaktowy, zapytanie ofertowe, formularz rezerwacji, formularz zamówienia, formularz rejestracyjny — i Proyecta podłącza odpowiedni do Twoich stron. Zgłoszenia trafiają do skrzynki odbiorczej panelu admina Twojej aplikacji, a właściciel otrzymuje e-mail po każdym nowym zgłoszeniu. Zobacz Formularze, aby poznać pełny obraz.

Treść może być tłumaczona na wiele języków. Pola oznaczone jako zlokalizowane przechowują wartość dla każdego języka, a hooki odczytujące rozwiązują je według łańcucha awaryjnego (żądany język → skonfigurowane języki zapasowe → domyślny), gdy przekażesz aktywny język odwiedzającego:

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

Aplikacje jednojęzyczne ignorują lokale całkowicie — nie ma nic do konfigurowania. Aby poznać szerszy kontekst tłumaczeń, zajrzyj do Internacjonalizacja.

Wydanie grupuje kilka wpisów, aby trafiły online (lub zostały cofnięte) razem — przygotuj skoordynowane opublikowanie treści (premiera, nowa strona produktu, odświeżenie FAQ) i wdróż wszystko jednocześnie.

Uwaga: Automatyczne publikowanie według harmonogramu nie zostało jeszcze zaimplementowane. Wydanie z datą scheduled_at przechodzi w status scheduled, ale musi zostać opublikowane ręcznie. Automatyczne publikowanie o zaplanowanej godzinie pojawi się wkrótce.

Rzadko piszesz to ręcznie — opisz, czego chcesz, a Proyecta zbuduje to na prawdziwych kolekcjach:

  • "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 to domyślne miejsce dla trwałej treści i rekordów. Niektóre rodzaje danych trafiają do dedykowanych systemów:

Rodzaj danych Gdzie mieszka
Treść i rekordy (posty, usługi, oferty, FAQ, katalog, rezerwacje) Proyecta CMS (ta strona) — domyślny wybór
Stan czasu rzeczywistego / behawioralny (live chat, feedy, obecność, stan gry) Magazyn czasu rzeczywistegowkrótce
Konta użytkowników i logowanie Auth
Produkty, zamówienia, subskrypcje, płatności Commerce
Przesłane pliki i media Files & Media
Statyczne zasoby dołączone do buildu katalog public/ w Twoim projekcie

CMS jest wyborem domyślnym. Magazyn czasu rzeczywistego dla prawdziwie real-time’owych zachowań pojawi się wkrótce; nawet wtedy trwała treść i katalog commerce nadal będą mieszkać w CMS-ie.

  • Edytor treści bezpośrednio w builderze — przeglądanie i edycja kolekcji CMS bezpośrednio z dashboardu buildera (dziś: zarządzaj treścią przez panel admina lub AI).
  • Wizualny edytor WYSIWYG dla tekstu sformatowanego — edycja wizualna dla pól markdown (dziś są edytowane jako markdown).
  • Automatyczne publikowanie według harmonogramu — wydania, które trafiają online automatycznie o zaplanowanej godzinie.
  • Podgląd na żywo zmian treści w Twojej aplikacji.
  • Role treści — odrębne uprawnienia dla edytorów i deweloperów.