Cara Menambah Custom Field di EmDash CMS

Menambahkan custom field ke collection yang sudah punya konten adalah salah satu tugas hari-kedua EmDash yang lebih umum — toggle "featured" baru, field override SEO, rating. Ini mencakup tiga cara buat melakukannya dan apa yang sesungguhnya terjadi di baliknya.
Daftar Isi
- Apa Sesungguhnya yang Terjadi Saat Kamu Menambah Field
- Opsi 1: Admin UI
- Opsi 2: CLI
- Opsi 3: REST API Langsung
- Memilih Tipe Field yang Tepat
- Slug Field yang Dicadangkan yang Tidak Bisa Kamu Pakai
- Menghapus Field (Dan Kenapa Itu Tidak Bisa Dibatalkan)
- Pertanyaan yang Sering Diajukan
- Bisakah saya mengubah tipe field setelah konten sudah ada?
- Apakah editor non-teknis bisa tidak sengaja merusak schema?
- Apakah menambah field membutuhkan redeploy?
- Bagaimana cara saya melihat field apa yang sudah dimiliki collection sebelum menambah lagi?
- Kesimpulan
Apa Sesungguhnya yang Terjadi Saat Kamu Menambah Field
Menambahkan field lewat admin UI menjalankan tiga langkah: memasukkan record ke _emdash_fields, menjalankan ALTER TABLE ec_<collection> ADD COLUMN <name> <TYPE>, dan meregenerasi schema Zod yang dipakai buat validasi.
Itu perubahan schema nyata dan live ke kolom database sesungguhnya — bukan JSON blob yang mendapat key baru. Itu juga kenapa tipe field terpetakan ke tipe kolom SQLite spesifik (TEXT, REAL, INTEGER, JSON), dan kenapa operasinya instan: SQLite mendukung penambahan kolom saat runtime tanpa downtime migrasi, dan baris yang sudah ada sederhananya mendapat `NULL` (atau `defaultValue` field itu) buat kolom baru.
Opsi 1: Admin UI
- Buka Content Types (schema builder) di admin panel.
- Buka collection yang ingin kamu tambahkan field.
- Tambah field, pilih tipenya, dan set validasi/opsi sesuai kebutuhan.
- Simpan — field-nya live segera, dan editor konten yang sudah ada akan melihatnya di kunjungan berikutnya ke collection itu.
Opsi 2: CLI
npx emdash schema add-field posts featured --type boolean --required
npx emdash schema add-field posts subtitle --type string --label "Subtitle"
npx emdash schema add-field posts body --type portableText --label "Body Content"Berguna buat men-scripting setup yang bisa diulang, atau buat mengubah schema situs yang sudah di-deploy dari mesinmu tanpa membuka admin UI — perintah `schema` di CLI berbicara ke REST API yang sama yang diekspos instance yang berjalan, jadi mereka bekerja identik terhadap dev lokal atau deployment live (kirim `--url` buat menargetkan situs yang di-deploy).
Opsi 3: REST API Langsung
POST /_emdash/api/schema/collections/posts/fields
Content-Type: application/json
{
"slug": "rating",
"label": "Rating",
"type": "number",
"required": false,
"validation": { "min": 1, "max": 5 }
}Kumpulan lengkap endpoint field-management, buat referensi:
GET /_emdash/api/schema/collections/:slug/fields
POST /_emdash/api/schema/collections/:slug/fields
PUT /_emdash/api/schema/collections/:collectionSlug/fields/:fieldSlug
DELETE /_emdash/api/schema/collections/:collectionSlug/fields/:fieldSlug
POST /_emdash/api/schema/collections/:slug/fields/reorderEndpoint reorder menerima array terurut penuh dari slug field — berguna buat membersihkan layout admin editor collection setelah beberapa field ditempelkan seiring waktu dalam urutan yang kurang ideal:
{ "fieldSlugs": ["title", "content", "author", "publishedAt"] }Memilih Tipe Field yang Tepat
Panduan keputusan cepat buat pertanyaan "tipe mana yang sesungguhnya saya inginkan" yang paling umum:
- Label atau nama pendek → string, bukan text.
- Paragraf deskripsi polos → text.
- Konten berformat kaya dengan heading/link/gambar → portableText.
- Toggle ya/tidak → boolean, bukan select dengan dua opsi.
- Kumpulan pilihan tetap, pilih satu → select.
- Kumpulan pilihan tetap, pilih beberapa → multiSelect.
- Menghubungkan ke entry collection lain → reference (tambahkan allowMultiple: true di opsi buat relasi many).
- Data yang sungguh-sungguh tak terstruktur dan dinamis → json, dipakai secukupnya karena tidak punya validasi.
Slug Field yang Dicadangkan yang Tidak Bisa Kamu Pakai
Error spesifik yang mudah tersandung: slug tertentu dicadangkan oleh kolom sistem EmDash sendiri dan akan ditolak kalau kamu mencoba menambah field dengan nama persis itu:
- 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 memindahkan field dari platform lain yang kebetulan memakai salah satu nama ini (custom field WordPress yang secara literal bernama "status", misalnya), ganti namanya — `content_status` atau serupa — alih-alih melawan collision-nya.
Menghapus Field (Dan Kenapa Itu Tidak Bisa Dibatalkan)
npx emdash schema remove-field posts legacy_fieldMenghapus field menghapus kolom dan datanya. Uji perubahan schema terhadap environment preview sebelum menjalankannya terhadap produksi.
Tidak ada undo — kolom dan setiap nilai yang dikandungnya hilang. Kalau ada kemungkinan kamu ingin data itu kembali, ekspor backup (`npx emdash export-seed --with-content posts`) sebelum menghapus field, bukan sesudahnya.
Pertanyaan yang Sering Diajukan
Bisakah saya mengubah tipe field setelah konten sudah ada?
Ya, meski EmDash membangun ulang tabel yang mendasarinya buat melakukannya (buat tabel baru, salin baris, hapus yang lama, ganti nama) karena SQLite tidak mendukung mengubah tipe kolom di tempat. Tinjau nilai yang sudah ada dulu — perubahan tipe yang tidak bisa mengonversi data yang sudah ada dengan bersih (teks bebas jadi daftar `select` yang ketat, misalnya) bisa menghasilkan konflik validasi.
Apakah editor non-teknis bisa tidak sengaja merusak schema?
Cuma pengguna dengan role Admin yang bisa membuat, mengubah, atau menghapus collection dan field — Editor ke bawah bisa memakai field yang sudah ada tapi tidak bisa mengubah schema itu sendiri, jadi editor konten dengan role lebih rendah secara literal tidak bisa melakukan operasi ini secara tidak sengaja.
Apakah menambah field membutuhkan redeploy?
Tidak — itu perubahan database live, efektif segera di admin panel dan di query mana pun yang membaca collection. Tidak ada rebuild atau redeploy yang dibutuhkan, properti "instan" yang sama yang berlaku buat edit konten.
Bagaimana cara saya melihat field apa yang sudah dimiliki collection sebelum menambah lagi?
`npx emdash schema get posts`, atau `GET /_emdash/api/schema/collections/posts?includeFields=true` — keduanya mengembalikan daftar field saat ini dan live alih-alih bergantung pada ingatan atau dokumentasi yang basi.
Kesimpulan
Menambahkan field ke collection EmDash yang sudah ada adalah perubahan schema nyata dan instan yang live — tiga cara setara buat melakukannya (admin UI, CLI, REST API) tergantung apakah kamu ingin form, script, atau kontrol programatik. Perhatikan daftar slug-yang-dicadangkan, dan backup sebelum menghapus field, karena operasi spesifik itu tidak ada undo-nya. Lihat panduan kami yang lebih luas soal mengustomisasi model konten buat membangun collection baru sepenuhnya dari nol.








Komentar