İçeriğe geç

İçerik Yönetimi

Koleksiyonlar, girişler, yerel ayarlar ve sürümler içeren headless bir CMS. İçeriği Content panelinden veya SDK aracılığıyla yönetin.

Proyecta, tam özellikli bir headless CMS sunar. Şema-öncelikli bir yapıya sahiptir: önce koleksiyonlar (yapılandırılmış içerik türleri) tanımlarsın, ardından her koleksiyonun alanlarına uyan girişler oluşturursun. Girişler yerelleştirilebilir ve sürümler halinde gruplandırılabilir.

İçerik, SDK aracılığıyla veya AI’ya sorarak yönetilebilir. Content API’nin altı kaynak türü vardır:

Sekme / KaynakNe işe yarar
Collectionsİçerik şemalarını tanımla ve yönet (örn. “Blog Yazısı”, “SSS”, “Ürün Spesifikasyonu”)
FieldsBir koleksiyon içindeki türlendirilmiş alanlar (Collections’ın alt kaynağı olarak yönetilir)
EntriesBir koleksiyon içindeki girişleri görüntüle, oluştur, düzenle, yayınla ve sil
LocalesÇevrilmiş içerik için dil/bölge yerel ayarları ekle ve yönet
ReleasesBirlikte yayına girecek (veya yayından kaldırılacak) girişleri gruplandır; releases.publish() ile manuel olarak yayınla
AssetsMedya dosyalarını (görseller, videolar, PDF’ler) yükle ve yönet; girişlerden referans alınabilir

Collections sekmesinde bir koleksiyona tıklayarak o koleksiyonun girişlerine geçebilirsin. Entries sekmesi, tekil içerik öğelerini oluşturmana, düzenlemene, yayınlamanı ve silmene olanak tanır.

Her şeyi SDK (proyecta.content) aracılığıyla programatik olarak da yönetebilirsin.

KavramNe anlama gelir
CollectionBir şema — belirli bir içerik türünün yapısı (örn. “Blog Yazısı”, “SSS”, “Ürün Spesifikasyonu”)
FieldBir koleksiyondaki türlendirilmiş alan (örn. title: string, body: rich_text, coverImage: asset)
EntryBir koleksiyonun tek bir örneği (tek bir blog yazısı, tek bir SSS maddesi)
AssetGirişlerden referans alınabilen, yüklenmiş bir medya dosyası
Localeİçeriğin çevrildiği bir dil/bölge
ReleaseAynı anda yayına girecek (veya yayından kaldırılacak) girişler grubu
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);

Girişler, gerçek içerik satırlarıdır. Her giriş bir koleksiyona aittir ve o koleksiyonun alanlarıyla eşleşen verileri taşır.

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

Varlık yüklemeleri birinci sınıf bir özelliktir — girişlerine görsel, video veya PDF eklemek için kullanabilirsin:

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

Sohbet odaklı dosya yüklemeleri (builder’a sürükle-bırak) için bkz. Dosyalar ve Medya.

İçerik birden fazla yerel ayara çevrilebilir. Her yerel ayar, proyecta.content.locales aracılığıyla yönetilen bir kayıttır:

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

Girişleri getirirken belirli bir yerel ayarın çevirisini talep edebilirsin. Daha geniş i18n tablosu için bkz. Uluslararasılaştırma.

Bir sürüm, aynı anda yayına giren (veya yayından kaldırılan) girişler paketidir. Bu sayede koordineli bir içerik lansmanını — bir pazarlama duyurusu, yeni bir ürün sayfası, bir SSS güncellemesi — hazırlayıp her şeyin atomik olarak devreye girmesini sağlayabilirsin.

Not: Otomatik zamanlı yayınlama henüz uygulanmamıştır. scheduled_at tarihi belirlenmiş sürümler scheduled durumuna geçer ancak releases.publish() aracılığıyla manuel olarak yayınlanması gerekir. Belirtilen zamanda otomatik yayınlama yakında geliyor.

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

Bir sürümün zamanlamasını değiştirmek için mevcut sürümü silip yeniden oluşturman gerekir — güncelleme endpoint’i yoktur.

Yaygın kalıplar (AI’a bağlamasını bırak)

Section titled “Yaygın kalıplar (AI’a bağlamasını bırak)”
  • "Proyecta Content API kullanarak bir blog oluştur. 'Blog Post' koleksiyonu şu alanlarla: title, slug, excerpt, body (rich text), coverImage (asset), author. /blog ve /blog/[slug] adreslerinde herkese açık rotalar."
  • "Proyecta Content'te bir SSS koleksiyonu oluştur. SSS ekleyip düzenleyebileceğim bir yönetim sayfası ve herkese açık bir /faq sayfası yap."
  • "Proyecta Content kullanarak İngilizce ve İspanyolca yerel ayarlarıyla çok dilli bir açılış sayfası kur."
  • "Üç blog yazısı içeren bir sürüm oluştur ve hazır olduğunda manuel olarak yayınla."
Kullanım senaryosuBunu kullan
Editoryal içerik (yazılar, SSS’ler, pazarlama metinleri) — yayınlama/taslak durumları, zamanlama ve yerelleştirme gerektirirContent API
Uygulama verisi (kullanıcılar, siparişler, satır kalemleri) — sorgu hızı, işlemler ve gerçek zamanlılık gerektirirDatabase
Koddaki statik varlıklarProjendeki public/ dizini
Kullanıcı tarafından yüklenen dosyalarDosyalar ve Medya
  • Zengin metin giriş editörü — Content panelinde rich_text alanları için tam WYSIWYG düzenleme
  • İçerik değişikliklerinin uygulamana karşı canlı önizlemesi
  • İçerik rolleri — editör izinlerini geliştirici izinlerinden ayırma