Cara Mengustomisasi Model Konten di EmDash CMS

Model konten EmDash adalah bagian platform yang paling dekat dengan model mental WordPress — collection bekerja seperti post type, field bekerja seperti custom field — tapi implementasinya sepenuhnya typed dan bisa diubah saat runtime tanpa kode dibutuhkan buat schema itu sendiri. Begini cara sesungguhnya mendefinisikan dan mengevolusinya.
Daftar Isi
- Ide Inti: Ubah Kapan Saja, Type-Safe Sepanjang Jalan
- Membuat Collection
- 16 Tipe Field
- Mendefinisikan Field: Bentuk Umumnya
- Field Reference buat Konten Relasional
- Slug Field yang Dicadangkan
- Portable Text: Field Konten Kaya
- Mengekspor Model-mu sebagai Seed yang Bisa Dipakai Ulang
- Pertanyaan yang Sering Diajukan
- Bisakah non-developer membuat collection baru dengan aman?
- Apa yang terjadi pada konten yang sudah ada kalau saya mengubah tipe field?
- Haruskah saya memakai json atau repeater buat data terstruktur dan berulang?
- Apakah type TypeScript yang dihasilkan diperbarui otomatis saat saya mengubah field?
- Kesimpulan
Ide Inti: Ubah Kapan Saja, Type-Safe Sepanjang Jalan
Kamu mendefinisikan collection dan field — di admin panel atau dengan CLI — dan EmDash menyimpan konten terhadapnya. Tambah, ganti nama, hapus, atau ubah tipe collection dan field kapan pun kamu butuh; perubahan berlaku segera. Hasilkan type TypeScript dari model saat ini buat autocomplete dari query hingga template.
Kombinasi itu — perubahan schema tanpa-kode plus type yang dihasilkan — adalah hal spesifik buat dipahami soal model konten EmDash. Editor konten tanpa latar belakang development bisa merancang seluruh collection lewat admin UI, dan begitu mereka melakukannya, template Astro-mu mendapat autocomplete buat field yang baru saja mereka buat.
Membuat Collection
- Di admin panel, navigasi ke Visual Schema Builder.
- Buat collection baru dan beri slug (misalnya `testimonials`).
- Tambah field satu per satu, pilih tipe buat masing-masing.
- Simpan — collection dan field-nya live segera, tanpa redeploy dibutuhkan.
Hal yang sama di-script lewat CLI, berguna buat setup yang bisa direproduksi atau CI:
npx emdash schema list
npx emdash schema get posts16 Tipe Field
Setiap field terpetakan ke tipe kolom SQLite spesifik di baliknya, yang layak diketahui saat kamu memutuskan di antara opsi yang terlihat serupa:
- string — teks satu-baris pendek (TEXT). Judul, nama, nilai pendek.
- text — teks polos multi-baris (TEXT). Deskripsi, excerpt.
- slug — identifier aman-URL (TEXT), otomatis disanitasi: dihuruf-kecilkan, spasi jadi hyphen, karakter khusus dihilangkan.
- number — nilai desimal (REAL). Harga, rating, pengukuran.
- integer — bilangan bulat (INTEGER). Kuantitas, hitungan.
- boolean — true/false (INTEGER 0/1). Toggle dan flag.
- datetime — tanggal dan waktu ISO 8601 (TEXT).
- select — satu pilihan dari daftar opsi tetap (TEXT).
- multiSelect — beberapa pilihan dari daftar opsi tetap (array JSON).
- portableText — rich text editor, konten terstruktur berbasis-block (JSON).
- image — referensi ke gambar yang diunggah lewat media library (TEXT/JSON, mencakup dimensi dan alt text).
- file — referensi ke dokumen atau file lain yang diunggah (TEXT/JSON).
- reference — link ke entry collection lain, tunggal atau dengan allowMultiple (TEXT atau array).
- json — JSON sembarang dan tak tervalidasi buat data yang sungguh-sungguh dinamis.
- repeater — grup sub-field yang berulang (JSON).
Mendefinisikan Field: Bentuk Umumnya
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}Setiap tipe field menerima properti dasar yang sama: `slug` (key yang disimpan, wajib), `label` (nama tampilan admin), `type`, `required`, `unique`, `defaultValue`, `validation` (aturan khusus-tipe), `widget` (override input UI default), `options` (konfigurasi widget), dan `sortOrder` (urutan tampilan admin).
Field Reference buat Konten Relasional
Field `reference` adalah bagaimana EmDash memodelkan relasi — author yang terhubung ke post, kategori yang terhubung ke produk:
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}Set `allowMultiple: true` di `options` buat relasi many (post dengan beberapa kontributor, misalnya) — nilainya kemudian disimpan sebagai array ID entry alih-alih satu tunggal.
Slug Field yang Dicadangkan
Gotcha spesifik yang mudah tersandung: slug tertentu dicadangkan oleh schema inti EmDash dan tidak bisa dipakai ulang buat field kustom. Kalau kamu menamai field salah satu dari ini, schema builder akan menolaknya:
- id, slug, status, author_id, primary_byline_id
- created_at, updated_at, published_at, scheduled_at, deleted_at
- version, live_revision_id, draft_revision_id
- terms, bylines, byline
Kalau kamu memigrasikan custom field WordPress yang bernama salah satu dari ini, ganti namanya selama langkah field-mapping import alih-alih melawan nama yang dicadangkan.
Portable Text: Field Konten Kaya
Tipe field `portableText` adalah yang memberi EmDash konten kaya terstruktur (bukan HTML mentah) — heading, list, link, gambar, code block, dan tipe block khusus-plugin, disimpan sebagai array JSON dari block typed alih-alih string HTML:
[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]Struktur itu persis yang membuat konten EmDash portable dan bisa di-query dengan cara yang tidak dimiliki field HTML mentah — kamu bisa secara programatik menemukan setiap post yang mereferensikan link spesifik, atau mentransformasi tipe block secara massal, tanpa parsing HTML.
Mengekspor Model-mu sebagai Seed yang Bisa Dipakai Ulang
Begitu kamu sudah membangun model konten yang kamu suka, ekspor sebagai file seed JSON yang portable — berguna buat version control, atau bootstrap proyek kedua dari struktur awal yang sama:
npx emdash export-seed --with-content posts,pages > seed.jsonSeed-nya menangkap collection, field, taksonomi, menu, widget area, dan setting, plus konten kalau kamu memintanya — dan situs EmDash baru membacanya secara otomatis saat boot pertama kalau ditaruh di `.emdash/seed.json`.
Pertanyaan yang Sering Diajukan
Bisakah non-developer membuat collection baru dengan aman?
Ya — itu tujuan desain yang disengaja. Visual Schema Builder cuma-admin-panel, tanpa kode dibutuhkan, dan editor konten bisa merancang seluruh struktur collection sendiri.
Apa yang terjadi pada konten yang sudah ada kalau saya mengubah tipe field?
Mengubah tipe field didukung, tapi konversi nilai yang tidak kompatibel (misalnya, mengubah teks bebas jadi `select` ketat dengan daftar opsi tetap) bisa memunculkan konflik yang akan ditandai admin UI — tinjau data yang sudah ada sebelum perubahan tipe pada field dengan konten sesungguhnya di dalamnya.
Haruskah saya memakai json atau repeater buat data terstruktur dan berulang?
Pilih `repeater` saat bentuknya diketahui dan konsisten (daftar pasangan pertanyaan/jawaban FAQ, misalnya) karena itu memberimu sub-field yang didefinisikan dan admin UI. Cadangkan `json` buat data yang sungguh-sungguh freeform atau integrasi-pihak-ketiga tanpa struktur tetap.
Apakah type TypeScript yang dihasilkan diperbarui otomatis saat saya mengubah field?
Type diregenerasi dari schema-mu saat ini — jalankan langkah generasi-type (lewat flag `--types` CLI di `emdash dev`, atau alur yang dikonfigurasi proyekmu) setelah perubahan schema buat mendapat autocomplete yang diperbarui di editor-mu.
Kesimpulan
Model konten EmDash sungguh-sungguh tanpa-kode buat dirancang dan sepenuhnya typed buat dikonsumsi — 16 tipe field mencakup sebagian besar kebutuhan konten terstruktur, field reference menangani relasi, dan Portable Text menjaga konten kaya tetap bisa di-query alih-alih HTML yang opak. Begitu kamu sudah memodelkan sesuatu yang kamu suka, ekspor sebagai seed dan pakai ulang. Lihat panduan kami soal meng-query konten itu dari Astro begitu schema-mu sudah terpasang.








Komentar