İçeriğe geç

İçerik Yönetimi

Proyecta’nın CMS’i, uygulamanızın birincil veri katmanıdır — yalnızca blog yazıları ve pazarlama metinleri değil, uygulamanızın üzerine inşa edildiği gerçek kayıtlardır. Koleksiyonlar hazırlanır ve gerçekçi örnek içerikle doldurulur; UI daha oluşturulmadan önce. Böylece uygulamanız ilk build’den itibaren düzenlenebilir veriye bağlı olarak çıkar.

Proyecta uygulamalarının büyük çoğunluğu verilerini yerleşik CMS’de saklar. Uygulamanızı tanımladığınızda Proyecta bir veri modeli tasarlar, ihtiyaç duyulan koleksiyonları oluşturur ve bunları gerçekçi örnek içerikle doldurur — tek bir sayfa oluşturulmadan önce. Sayfalarınız daha sonra bu gerçek, sahip tarafından düzenlenebilir içeriği, yapay zekanın sizin için kurduğu tiplendirilmiş hook’lar aracılığıyla okur. Bunun genel bütünle nasıl örtüştüğünü görmek için Uygulamanızın verileri nasıl çalışır sayfasına bakın.

Başlamak için bunların hiçbirini düşünmenize gerek yok — her şey otomatik gerçekleşir. Bu sayfa, şekillendirmeniz için altındakileri açıklar.

İçerik, koleksiyonlar ve tekil öğeler (singletons) olarak düzenlenir:

Tür Nedir Örnekler
Koleksiyon Birden fazla girdiye sahip bir içerik türü — tek şema, çok satır. posts, services, testimonials, catalogItems
Tekil öğe Tam olarak bir girdiye sahip içerik türü — global, tek seferlik içerik. businessInfo, seoSettings

Bir koleksiyon bir şekildir; her girdi o şeklin bir öğesidir (bir blog yazısı, bir hizmet, bir SSS). Tekil öğe ise tek bir düzenlenebilir kaydı tutar — işletme kimliğiniz veya bir sayfanın hero/bölüm metni.

Proyecta, gerçek işletmelerin tuttuğu kayıt türleri için hazır koleksiyon tasarımlarıyla gelir — mantıklı alanlar, yönetici ipuçları ve başlangıç içeriği: blog yazıları ve makaleler, hizmetler, ürün kataloğu, yemek menüsü, referanslar ve yorumlar, ekip üyeleri, fotoğraf galerisi, SSS, etkinlikler, konumlar, indirilebilir kaynaklar, iş ilanları, kurslar, turlar ve konaklama listeleri ve daha fazlası.

Hiçbir listeden seçim yapmazsınız. Uygulamanızı tanımladığınızda Proyecta, briefinizin gerektirdiklerini seçer — işletme türünüz, istediğiniz özellikler, diliniz — ve bunları gerçekçi örnek içerikle önceden doldurarak oluşturur. Uygulamanız hiçbirinin karşılamadığı bir şeye ihtiyaç duyarsa Proyecta, kendi alanlarıyla birlikte özel bir koleksiyon tasarlar.

Bu nedenle yönetici paneliniz sabit bir liste yerine uygulamanızın koleksiyonlarını gösterir. Panel, uygulamanızın canlı içerik modelinden kendini oluşturur; dolayısıyla Proyecta’nın sizin için oluşturduğu şey — yerleşik ya da özel — tam olarak gördüğünüz ve düzenlediğiniz şeydir. İki Proyecta uygulaması nadiren aynı koleksiyon setine sahiptir ve bu tasarım gereğidir.

Her koleksiyon, tiplendirilmiş alanlardan oluşur. Alan türleri uçtan uca uygulanır — yönetici paneli doğru düzenleyiciyi gösterir ve sayfalarınız doğru tiplendirilmiş değerleri alır.

Alan türü Ne için kullanılır
string Kısa tek satırlık değerler — başlıklar, isimler, adresler.
text Düz metin paragrafı.
markdown Uzun biçimli zengin metin — makale içerikleri, “hakkımızda” metinleri.
slug URL tanımlayıcısı, başka bir alandan (örn. başlık) otomatik türetilir.
number Sayımlar, puanlar, süreler.
money Fiyat veya para birimi tutarı — para olarak gösterilir ve düzenlenir.
boolean Açık/kapalı bayraklar.
date Takvim tarihleri.
datetime Zaman damgaları — yayın tarihleri, etkinlik başlangıç saatleri.
weeklyHours Haftanın her günü için çalışma saatleri.
asset Bir resim, video veya PDF (genel URL olarak saklanır).
reference Başka bir koleksiyondaki girdiye bağlantı.
enum Sabit seçenekler listesinden bir değer.
array Dizeler listesi — etiketler, telefon numaraları, bölgeler.
blocks Yığılabilir içerik blokları — tiplendirilmiş bölümlerden oluşan bir sayfa.
json Yukarıdaki türlerin hiçbirine uymayan yapılandırılmış veriler.

Girdi, bir koleksiyondaki tek bir öğedir. Her girdinin bir durumu vardır:

  • Taslak — devam eden çalışma; canlı sitenizde hiçbir zaman gösterilmez.
  • Yayınlandı — canlı ve ziyaretçilere görünür.
  • Arşivlendi — kullanımdan kaldırıldı, kenara alındı.

Genel sayfalarınız yalnızca yayınlanmış girdileri görür — taslaklar ve arşivlenmiş öğeler otomatik olarak gizlenir; böylece içeriği yayına girmeden önce güvenle hazırlayabilirsiniz.

İçerik eklemenin ve düzenlemenin iki yolu vardır — hiçbiri kod dokunmayı gerektirmez:

  1. Sohbette yapay zekaya sorun. Değişikliği açıklamanız yeterli, yapay zeka doğru içeriği sizin için düzenler:
    • "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. Uygulamanızın yönetici paneli. Yayınlanan her uygulama, içerik ve form gönderimlerini doğrudan yönetebileceğiniz yerleşik, oturum açma korumalı bir yönetici paneline sahiptir — koleksiyon başına elektronik tablo tarzı düzenleyici ve gönderimler gelen kutusu. Panel, uygulamanızın canlı içerik modelinden kendini yapılandırır; yeni koleksiyonlar orada otomatik olarak görünür. Bkz. Yönetici Paneli.

CMS içeriğinizi uygulamanızın yönetici paneli veya yapay zeka aracılığıyla yönetin — builder içi içerik düzenleyici yol haritasında yer almaktadır (bkz. Yakında geliyor). Canlı güncellenen uygulamalar için gerçek zamanlı kayıt tarayıcısı yakında geliyor.

Sayfalarınız, içeriği @/hooks/useContent içindeki tiplendirilmiş hook’lar aracılığıyla okur — ve yapay zeka bu bağlantıyı sizin için yazar. Sayfayı tarif edersiniz; Proyecta, bu hook’ları gerçek koleksiyonlarınıza karşı çağıran bileşenleri oluşturur. Bunlara kendiniz nadiren dokunursunuz, ama işte ne yaptıkları:

Hook Ne yapar
useCollection('posts') Bir koleksiyonun yayınlanmış girdilerini listeler (isteğe bağlı filtre/sıralama/limit ile).
useEntry('posts', slug) Slug’a göre yayınlanmış tek bir girdiyi getirir (detay sayfaları).
useSingleton('businessInfo') Bir tekil öğeyi okur (işletme bilgisi, sayfa içeriği).
useFormSubmit('contactForm') Bir form gönderir ve doğrulama hatalarını raporlar.
// 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} />);
}

Proyecta koleksiyonlarınız için tiplendirilmiş arayüzler oluşturduğunda, hook’lar tam olarak tiplendirilir (useCollection<Post>('posts')); böylece editörünüz her alanı otomatik tamamlar. Okumalar, önceden hazırlanmış bir anlık görüntüden ilk paint’te yüklenir — sayfalar anında ve SEO dostu şekilde render edilir, ardından arka planda canlı olarak güncellenir.

Formlar, yapay zekanın elle oluşturduğu bir şey değil, birinci sınıf bir yetenektir. Bir form bloğu ekleyin; alanları render eder, girişi doğrular, gönderir ve başarı durumunu gösterir:

<FormBlock form="contactForm" />

Formlar da hazır gelir — iletişim formu, teklif talebi, rezervasyon formu, sipariş formu, kayıt formu — ve Proyecta doğru olanı sayfalarınıza bağlar. Gönderimler uygulamanızın yönetici paneli gelen kutusuna düşer ve yeni bir tane geldiğinde sahibine e-posta gönderilir. Tam resim için bkz. Formlar.

İçerik birden fazla yerel ayara (locale) çevrilebilir. Yerelleştirilmiş olarak işaretlenen alanlar dil başına bir değer saklar; okuma hook’ları, ziyaretçinin aktif yerel ayarını geçtiğinizde bunları bir yedek zinciri aracılığıyla çözer (istenen dil → yapılandırılmış yedekler → varsayılan):

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

Tek dilli uygulamalar yerel ayarları tamamen yok sayar — yapılandırılacak bir şey yoktur. Daha geniş çeviri hikayesi için bkz. Uluslararasılaştırma.

Bir sürüm, birden fazla girdiyi bir araya getirir; böylece hepsi aynı anda yayına girer (veya yayından kaldırılır) — koordineli bir içerik yayınını (bir lansman, yeni bir ürün sayfası, SSS yenilemesi) hazırlayın ve hepsini bir anda açın.

Not: Otomatik zamanlanmış yayınlama henüz uygulanmamıştır. scheduled_at tarihi olan bir sürüm scheduled durumuna girer ancak manuel olarak yayınlanması gerekir. Zamanlanmış saatte otomatik yayınlama yakında geliyor.

Bunu nadiren elle yazarsınız — ne istediğinizi tarif edin, Proyecta gerçek koleksiyonlara karşı oluşturur:

  • "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, kalıcı içerik ve kayıtlar için varsayılan yerdir. Birkaç tür veri bunun yerine amaca özel sistemlerde yaşar:

Veri türü Nerede yaşar
İçerik ve kayıtlar (yazılar, hizmetler, listeler, SSS, katalog, rezervasyonlar) Proyecta CMS (bu sayfa) — varsayılan
Gerçek zamanlı / davranış durumu (canlı sohbet, akışlar, varlık, oyun durumu) Gerçek zamanlı depoyakında geliyor
Kullanıcı hesapları ve oturum açma Auth
Ürünler, siparişler, abonelikler, ödemeler Commerce
Yüklenen dosyalar ve medya Dosyalar ve Medya
Build’e dahil edilen statik varlıklar projenizde public/ dizini

CMS varsayılandır. Gerçekten gerçek zamanlı davranış için gerçek zamanlı bir depo yakında geliyor; yine de kalıcı içerik ve ticaret kataloğu CMS’de kalmaya devam edecek.

  • Builder içi içerik düzenleyici — CMS koleksiyonlarınıza doğrudan builder panosundan göz atın ve düzenleyin (bugün: içeriği yönetici paneli veya yapay zeka aracılığıyla yönetin).
  • Zengin metin WYSIWYG düzenleyicimarkdown alanlar için görsel düzenleme (bugün bunlar markdown olarak düzenleniyor).
  • Zamanlanmış otomatik yayınlama — zamanlanmış saatte otomatik olarak yayına giren sürümler.
  • İçerik değişikliklerinin uygulamanıza karşı canlı önizlemesi.
  • İçerik rolleri — düzenleyici izinlerini geliştirici izinlerinden ayırma.