Zarządzanie treścią
Headless CMS z kolekcjami, wpisami, lokalizacjami i wydaniami. Zarządzaj treścią z poziomu panelu Content lub SDK.
Proyecta posiada pełnoprawny headless CMS. Opiera się on na schemacie: definiujesz kolekcje (ustrukturyzowane typy treści), a następnie tworzysz wpisy zgodne z polami każdej kolekcji. Wpisy mogą być lokalizowane i grupowane w wydania.
Panel Content
Dział zatytułowany „Panel Content”Treścią można zarządzać za pomocą SDK lub przez rozmowę z AI. Content API udostępnia sześć typów zasobów:
| Zakładka / Zasób | Do czego służy |
|---|---|
| Collections | Definiowanie i zarządzanie schematami treści (np. „Blog Post”, „FAQ”, „Product Spec”) |
| Fields | Typowane pola w kolekcji (zarządzane jako podzasób kolekcji) |
| Entries | Przeglądanie, tworzenie, edytowanie, publikowanie i usuwanie wpisów w kolekcji |
| Locales | Dodawanie i zarządzanie lokalizacjami językowymi/regionalnymi dla przetłumaczonej treści |
| Releases | Grupowanie wpisów, które mają zostać opublikowane (lub wycofane) razem; ręczna publikacja przez releases.publish() |
| Assets | Przesyłanie i zarządzanie plikami multimedialnymi (obrazy, filmy, PDF-y) dostępnymi z poziomu wpisów |
Kliknij kolekcję w zakładce Collections, aby przejść do jej wpisów. Zakładka Entries umożliwia tworzenie, edytowanie, publikowanie i usuwanie pojedynczych elementów treści.
Wszystkim można też zarządzać programowo za pomocą SDK (proyecta.content).
Pojęcia
Dział zatytułowany „Pojęcia”| Pojęcie | Opis |
|---|---|
| Collection | Schemat — struktura jednego typu treści (np. „Blog Post”, „FAQ”, „Product Spec”) |
| Field | Typowane pole w kolekcji (np. title: string, body: rich_text, coverImage: asset) |
| Entry | Pojedyncza instancja kolekcji (jeden wpis na blogu, jeden element FAQ) |
| Asset | Przesłany plik multimedialny dostępny z poziomu wpisów |
| Locale | Język/region, na który treść jest tłumaczona |
| Release | Grupa wpisów zaplanowanych do równoczesnego opublikowania (lub wycofania) |
Szybki start
Dział zatytułowany „Szybki start”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 });Kolekcje
Dział zatytułowany „Kolekcje”// 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);Wpisy to właściwe wiersze treści. Każdy wpis należy do kolekcji i przechowuje dane zgodne z polami tej kolekcji.
// 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);Zasoby (Assets)
Dział zatytułowany „Zasoby (Assets)”Przesyłanie plików jest traktowane priorytetowo — użyj assetów, aby dołączyć obrazy, filmy lub PDF-y do swoich wpisów:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteInformacje o przesyłaniu plików przez czat (przeciąganie do buildera) znajdziesz w sekcji Pliki i media.
Lokalizacja
Dział zatytułowany „Lokalizacja”Treść może być tłumaczona na wiele lokalizacji. Każda lokalizacja to rekord zarządzany przez proyecta.content.locales:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}Podczas pobierania wpisów możesz zażądać tłumaczenia dla konkretnej lokalizacji. Szerszy obraz internacjonalizacji znajdziesz w sekcji Internacjonalizacja.
Wydania (Releases)
Dział zatytułowany „Wydania (Releases)”Wydanie to paczka wpisów, które mają zostać opublikowane (lub wycofane) w tym samym momencie. Pozwala to przygotować skoordynowaną aktualizację treści — launch marketingowy, nową stronę produktu, odświeżenie FAQ — i opublikować wszystko atomowo.
Uwaga: Automatyczna publikacja o określonej godzinie nie jest jeszcze zaimplementowana. Wydania z ustawioną datą
scheduled_atotrzymują statusscheduled, ale muszą być opublikowane ręcznie przezreleases.publish(). Autopublikacja o wskazanym czasie jest w planach.
// 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);}Aby zmienić harmonogram wydania, usuń je i utwórz ponownie — endpoint do aktualizacji nie istnieje.
Typowe wzorce (pozwól AI to skonfigurować)
Dział zatytułowany „Typowe wzorce (pozwól AI to skonfigurować)”"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."
Kiedy używać Content, a kiedy Database
Dział zatytułowany „Kiedy używać Content, a kiedy Database”| Przypadek użycia | Użyj tego |
|---|---|
| Treści redakcyjne (wpisy, FAQ, teksty marketingowe) — wymagają stanów publikacji/szkicu, harmonogramowania, lokalizacji | Content API |
| Dane aplikacji (użytkownicy, zamówienia, pozycje) — wymagają szybkich zapytań, transakcji, czasu rzeczywistego | Database |
| Zasoby statyczne w kodzie | katalog public/ w projekcie |
| Pliki przesyłane przez użytkowników | Pliki i media |
Wkrótce
Dział zatytułowany „Wkrótce”- Edytor treści rich-text — pełny edytor WYSIWYG dla pól
rich_textw panelu Content - Podgląd na żywo zmian treści w kontekście aplikacji
- Role w Content — oddzielenie uprawnień redaktora od uprawnień dewelopera