Panduan ini menjelaskan cara saya membuat Kamus Istilah di lalu.pro memakai fitur Database di Invision Community (sering disingkat IPS): membuat database dan kolomnya, kategori, tiga template tampilan, sampai memasukkan istilah. Hasil akhirnya bisa dilihat di Kamus Istilah.
"Database" di sini bukan database MySQL tempat IPS menyimpan seluruh datanya. Di aplikasi Pages, database adalah kumpulan isi yang bentuknya kamu tentukan sendiri: kamu memilih kolom apa saja yang ada (misalnya Sinonim dan Definisi Singkat), mengelompokkannya dalam kategori, lalu mengatur tampilannya. Kamus istilah cocok jadi contoh karena bentuknya sederhana dan seragam.
Yang akan kamu dapatkan
Halaman depan (
/kamus-istilah/): kotak-kotak kategori beserta jumlah istilahnya.Daftar per kategori: istilah terurut abjad, lengkap dengan sinonim dan definisi singkatnya.
Halaman istilah: judul, sinonim, definisi singkat yang menonjol, penjelasan lengkap, dan istilah terkait.
Sebelum mulai
Versi. Invision Community 5 dengan aplikasi Pages. Panduan ini mengikuti tampilan versi 5.0.19. Nama tab, sintaks template, dan nama property di versi 5 berbeda dari versi 4. Kalau versimu lain, sebagian langkah bisa bergeser, jadi cek dulu sebelum menyalin kode mentah-mentah.
Akses. Kamu perlu masuk ke AdminCP (panel admin situs).
Pengetahuan dasar. HTML dan CSS dasar. Kode di panduan ini tinggal disalin, tetapi kamu perlu bisa membacanya kalau ada yang ingin disesuaikan.
Cadangan. Sebelum mengubah template, salin isi lamanya ke berkas teks. Kalau ada yang rusak, kamu bisa mengembalikannya.
Istilah yang dipakai di panduan ini
AdminCP: panel admin Invision Community.
Record: satu isi di dalam database. Di sini, satu record adalah satu istilah.
Kategori: pengelompokan record di dalam database.
Template: kerangka HTML yang menentukan tampilan satu jenis halaman.
Slug (FURL): bagian alamat URL yang berupa kata, seperti
seo-analytics.Template group: kumpulan template milik satu database.
Isi panduan
Gambaran: bagaimana semuanya tersambung
Fase 1: Menyiapkan database (termasuk izin akses)
Fase 2: Kolom tambahan
Fase 3: Kategori
Fase 4: Template tampilan
Fase 5: Mengisi istilah
Fase 6: Menyambungkan ke situs
Fase 7: Pengujian
Fase 8: Perawatan
Pemecahan masalah
Gambaran: bagaimana semuanya tersambung
Kamus ini punya tiga jenis halaman, dan masing-masing memakai satu template:
/kamus-istilah/ → Landing (grid kategori)
/kamus-istilah/seo-analytics/ → Listing kategori (daftar istilah)
/kamus-istilah/seo-analytics/backlink-rN/ → Detail istilah
Halaman depan memakai template Category List.
Daftar per kategori memakai template Record Listing.
Halaman istilah memakai template Record.
Penting: URL memakai kamus-istilah, mengikuti Page Filename yang dibuat otomatis dari nama database, bukan glossary. Jangan menulis /glossary/ di mana pun. Halaman itu tidak ada dan akan menghasilkan error 404 (1S160/2).
Susunan data
Database: Kamus Istilah (key: glossary)
├── Kategori (5)
│ ├── SEO & Analytics
│ ├── Monetisasi
│ ├── Content & Copywriting
│ ├── Technical & Performance
│ └── Platform & Tools
└── Records (Istilah)
├── Title (field bawaan, dipakai sebagai judul + URL)
├── Content (field bawaan, penjelasan lengkap)
├── Aliases (custom, key: aliases)
└── Definisi Singkat (custom, key: definisi-singkat)
Fase 1: Menyiapkan database
1.1 Membuat database
AdminCP → Pages → Databases → Create New.
Tab yang ada di IPS 5.0.19: Details, Display, Language, Options, Forums, dan SEO. Tidak ada tab "Page" atau "Permissions" terpisah seperti di IPS 4. Pengaturan halaman menyatu di bawah tab Details.
Tab Details:
Field | Value |
|---|---|
Name | Kamus Istilah |
Description | Kamus istilah blogging & webmaster |
Database Key | glossary |
Use categories | Yes, allow records to be stored in different categories |
Di bagian bawah tab Details (bagian Page yang menyatu):
Field | Value |
|---|---|
Page title | Use page title → Kamus Istilah |
Page Filename | kamus-istilah |
Page Folder | No Parent (root) |
IPS otomatis membuat Page bernama kamus-istilah dan menetapkan database ini ke halaman tersebut. Inilah sumber URL final /kamus-istilah/.
1.2 Tab Language
Sesuaikan kata benda konten supaya berbahasa Indonesia. IPS memakai kata-kata ini untuk membentuk label dan tombol, misalnya "Add new istilah".
Field | Value |
|---|---|
Singular Lowercase Noun | istilah |
Plural Lowercase Noun | istilah-istilah |
Singular Capitalized Noun | Istilah |
Plural Capitalized Noun | Istilah-istilah |
Indefinite Article | Biarkan default (a record). Tidak berpengaruh untuk situs berbahasa Indonesia. |
1.3 Tab Options
Setting | Value | Lokasi di form |
|---|---|---|
Allow comments | OFF | Bagian Comments and Reviews |
Allow reviews | OFF | Bagian Comments and Reviews |
Can use tags? | ON | Bagian Tags. Dipakai untuk "Istilah Terkait" |
Enable record image upload | OFF | Bagian Record Image Settings. Kamus ini hanya teks |
Store revisions | ON (default) | - |
Allow searching | ON (default) | - |
Rating dan polls tidak punya tombol sendiri di sini. Rating diatur per kategori, dan polls adalah fitur forum, jadi keduanya otomatis tidak aktif.
1.4 Tab Forums
Setting | Value |
|---|---|
Post topic | OFF. Kamus tidak perlu otomatis diposting ke forum |
1.5 Tab SEO
Setting | Value |
|---|---|
Canonical Tag | All pages should be considered the same (default, sudah tepat untuk kamus) |
1.6 Tab Display
Field | Value | Catatan |
|---|---|---|
Index Page | Category Listing | Halaman depan menampilkan kotak kategori, bukan daftar record |
Category Listing Layout | Custom | Wajib "Custom" agar template group kita bisa dipilih nanti |
Listing Layout | Custom | Sama, agar template Glossarylisting bisa dipilih |
Sort | Title | Urut abjad, bukan Record ID |
Order | Ascending | A-Z |
Records per page | 50 | Supaya satu kategori muat dalam satu halaman |
Catatan: Layout harus diatur ke "Custom" dulu. Baru setelah itu muncul menu pilihan "Template Group" untuk memilih template buatan kita. Kalau Layout dibiarkan "Grid" atau "Rows", template custom tidak akan pernah terpakai dan IPS tetap memakai tampilan bawaan. Template Group diisi di Fase 4, setelah template-nya dibuat.
1.7 Izin akses
Kamus sebaiknya bisa dibaca semua orang, tetapi hanya pengurus yang boleh menambah atau mengubah istilah. Izin diatur di tiga tingkat, dari yang paling atas:
Halaman (Page). Kalau sebuah grup tidak boleh melihat halamannya, database di dalamnya ikut tidak terlihat.
Database. Izin bawaan untuk semua kategori di dalamnya.
Kategori. Bisa menimpa izin database lewat Set Custom Permissions. Di panduan ini opsi itu dimatikan (Fase 3), jadi semua kategori mengikuti izin database.
Menurut dokumentasi Invision, IPS menawarkan pengaturan izin database setelah database disimpan. Atur supaya grup Tamu dan Member biasa hanya bisa melihat dan membaca, sedangkan menambah dan mengubah istilah hanya untuk grup Admin atau staf. Nama dan letak opsinya bisa berbeda antarversi, jadi pastikan hasilnya lewat pengujian di Fase 7.
Fase 2: Kolom tambahan
AdminCP → Pages → Databases → Kamus Istilah → Fields.
Ada dua kolom bawaan yang terkunci: Title dan Content (lencana hijau dengan ikon gembok).
Bug yang ditemukan: mencoba mengedit kolom bawaan Title atau Content yang terkunci memicu error PHP:
Attempt to assign property "options" on null
Solusinya, jangan edit kolom bawaan. Mengganti label hanya kosmetik dan tidak penting, jadi biarkan Title dan Content apa adanya. Kolom baru (Create New) tidak terkena bug ini.
2.1 Kolom Aliases
Create New:
Setting | Value |
|---|---|
Title | Aliases (atau Sinonim / Akronim) |
Description | Pisahkan dengan koma. Contoh: Tautan Balik, Inbound Link |
Type | Text |
Maximum Length | 200 |
Required | No |
Setelah dibuat, catat Template Key dari tab Display options. Hasilnya: aliases.
2.2 Kolom Definisi Singkat
Create New:
Setting | Value |
|---|---|
Title | Definisi Singkat |
Description | Definisi satu kalimat untuk ringkasan di halaman istilah dan daftar kategori. Maksimal 160 karakter. |
Type | Text (Textarea juga boleh) |
Maximum Length | 160 |
Required | Yes (disarankan; template tetap jalan kalau kolom ini kosong) |
Template Key: definisi-singkat.
Catatan: jangan mengandalkan kolom ini sebagai meta description. Template di panduan ini tidak membuat meta tag, dan saya belum menemukan opsi resmi untuk memakai kolom kustom sebagai meta description. Kalau itu penting buatmu, buka sumber halaman sebuah istilah (view-source) dan cari <meta name="description" untuk melihat isinya.
2.3 Matikan lencana bawaan kedua kolom
Aliases dan Definisi Singkat nanti ditampilkan dengan tata letak custom di template. Matikan tampilan lencana otomatisnya supaya tidak muncul dua kali.
Pada kedua kolom, buka tab Display options:
Show in display template: OFF.
Show in listing template: biarkan ON. Kolom ini masih dipakai di recordRow custom, tetapi boleh dimatikan kalau kamu tidak mau.
Supaya lolos validasi "Display View Format REQUIRED", pilih Value saja. Pilihan ini tidak akan terpakai karena tampilan display sudah OFF.
Fase 3: Kategori
AdminCP → Pages → Databases → Kamus Istilah → Categories.
Saat "Use categories" diaktifkan, IPS otomatis membuat satu kategori bawaan bernama "Records". Ganti nama kategori ini jadi kategori pertama, lalu buat sisanya.
Buat lima kategori. FURL Slug wajib diisi manual; jangan biarkan terisi otomatis seperti N_records:
Name | Description | FURL Slug |
|---|---|---|
SEO & Analytics | Istilah SEO, search, dan analytics | seo-analytics |
Monetisasi | AdSense, affiliate, sponsorship, CPM/RPM | monetisasi |
Content & Copywriting | Cornerstone, pillar, evergreen, copy | content-copywriting |
Technical & Performance | Core Web Vitals, hosting, speed, schema | technical-performance |
Platform & Tools | WordPress, Blogspot, plugins, software | platform-tools |
Pengaturan tiap kategori (tab Configuration):
Setting | Value |
|---|---|
Parent | No Parent (top-level) |
Show Records in Listing? | ON |
Enable Star Ratings? | OFF |
Set Custom Permissions | OFF (ikut izin database) |
Allow anonymous content? | OFF |
Listing Layout / Display Template | Use database selected template |
Tab Meta Tags & Title boleh dikosongkan; IPS memakai Name dan Description kategori. Di tab Forum, Override OFF. Di tab Form Fields, centang "All".
Fase 4: Template tampilan
Cara kerja template di IPS 5
Di IPS 5, template database dibuat lewat Templates → Add... → Add database template, dengan isian "Assign to database". Kalau kamu memilih database di situ, IPS otomatis membuat template group khusus untuk database itu. Ini mirip folder "Hosting Review" yang mungkin sudah ada di situsmu. Jangan mengedit template record generik yang dipakai bersama oleh banyak database.
Jenis template yang dipakai:
Template Type (menu pilihan) | Fungsi | Nama yang dipakai |
|---|---|---|
Record (Displays the record and comments) | Halaman istilah | glossarydisplay |
Record Listing (Shown when clicking a category) | Daftar per kategori | glossarylisting |
Category List (Shows all available database categories) | Halaman depan berisi kotak kategori | glossarycategorylist |
Catatan teknis yang menghemat waktu
Hal-hal ini ditemukan lewat coba-coba. Pakai versi yang benar dari awal:
Komentar
{{* ... *}}tidak valid di IPS 5 dan memicu pesan "syntax of tags or HTML logic is badly formatted". Pakai<!-- -->atau hapus komentarnya.contentadalah method, bukan property. Tulis{$record->content()|raw}, bukan{$record->content}.Jumlah tayangan bernama
record_views, bukanviews. Tulis{$record->record_views}.Tautan breadcrumb ke halaman depan sebaiknya ditulis sebagai teks polos
/kamus-istilah/. Pemanggilan dinamis seperti{\IPS\cms\Databases::load(...)->url()}tidak dieksekusi (muncul sebagai teks mentah di URL), sedangkan{$record::database()->url()}dan{expression=...}memicu error fatal ("widgetArea is throwing an error"). Teks statis paling aman.Berkas CSS terpisah tidak dimuat otomatis. Berkas CSS yang dibuat lewat Add CSS file masuk ke grup "Page CSS" dan tidak ikut di halaman record. Solusinya, taruh CSS langsung di blok
<style>di dalam template HTML. Cara ini terbukti bekerja.Nama variabel loop berbeda per template: template record memakai
$record, recordRow memakai$rowsdan$row, categoryRow memakai$category.Tanda
|rawberarti HTML ditampilkan apa adanya, tidak diubah jadi teks. Pakai hanya untuk isi yang ditulis pengurus, seperti isi istilah.Pada
var(--theme-..., #warna), nilai setelah koma adalah warna cadangan yang dipakai kalau temamu tidak punya variabel itu.CSS di bawah memakai font Geist, Instrument Serif, dan Geist Mono. Kalau situsmu tidak memuatnya, browser memakai huruf cadangan (Georgia dan sejenisnya) sehingga tampilan tetap terbaca. Ganti nama font di CSS kalau kamu ingin font lain.
4.1 Template Record (halaman istilah): glossarydisplay
Add database template → Name glossarydisplay, Type Record, Assign to Kamus Istilah. Buka sub-template record, lalu ganti seluruh isinya dengan:
<style>
.lalu-glossary-detail {
max-width: 720px;
margin: 40px auto;
padding: 0 24px;
font-family: 'Geist', -apple-system, sans-serif;
}
.lalu-glossary-breadcrumb {
font-family: 'Geist Mono', monospace;
font-size: 11px;
letter-spacing: 0.05em;
color: var(--theme-accent, #a07855);
margin-bottom: 24px;
}
.lalu-glossary-breadcrumb a { color: var(--theme-accent, #a07855); text-decoration: none; }
.lalu-glossary-breadcrumb a:hover { color: var(--theme-text_dark, #5c3a21); }
.lalu-glossary-breadcrumb .sep { margin: 0 8px; opacity: 0.5; }
.lalu-glossary-breadcrumb .current { color: var(--theme-text_dark, #5c3a21); }
.lalu-glossary-detail-header { margin-bottom: 32px; }
.lalu-glossary-detail-title {
font-family: 'Instrument Serif', Georgia, serif;
font-size: clamp(40px, 7vw, 64px);
line-height: 0.95;
letter-spacing: -0.03em;
font-weight: 400;
color: var(--theme-text_color, #181818);
margin: 0 0 12px;
}
.lalu-glossary-detail-aliases {
font-family: 'Geist Mono', monospace;
font-size: 12px;
letter-spacing: 0.05em;
color: var(--theme-accent, #a07855);
margin: 0;
}
.lalu-glossary-detail-aliases .label { font-weight: 500; margin-right: 8px; text-transform: uppercase; }
.lalu-glossary-pullquote {
background: var(--theme-area_background, #f5efea);
border-left: 3px solid var(--theme-accent, #a07855);
padding: 20px 24px;
margin: 24px 0 32px;
border-radius: 0 6px 6px 0;
font-family: 'Instrument Serif', Georgia, serif;
font-size: 20px;
line-height: 1.4;
color: var(--theme-text_dark, #5c3a21);
font-style: italic;
}
.lalu-glossary-detail-content { font-size: 16px; line-height: 1.7; color: var(--theme-text_color, #181818); }
.lalu-glossary-detail-content p { margin: 0 0 16px; }
.lalu-glossary-related {
margin-top: 40px;
padding-top: 24px;
border-top: 1px dashed var(--theme-border_color, #e2dcd5);
}
.lalu-glossary-related .label {
font-family: 'Geist Mono', monospace;
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--theme-accent, #a07855);
margin: 0 0 12px;
}
.lalu-glossary-tags { display: flex; flex-wrap: wrap; gap: 8px; }
.lalu-glossary-tag {
font-family: 'Instrument Serif', Georgia, serif;
font-style: italic;
font-size: 14px;
padding: 6px 14px;
background: var(--theme-area_background, #f5efea);
color: var(--theme-text_dark, #5c3a21);
border-radius: 20px;
border: 1px solid var(--theme-border_color, #d4c9be);
}
.lalu-glossary-detail-meta {
margin-top: 32px;
padding-top: 16px;
border-top: 1px solid var(--theme-border_color, #e2dcd5);
}
.lalu-glossary-detail-meta p {
font-family: 'Geist Mono', monospace;
font-size: 11px;
letter-spacing: 0.05em;
color: var(--theme-accent, #a07855);
margin: 0;
}
</style>
{{$container = $record->container();}}
{{$aliases = $record->customFieldDisplayByKey('aliases', 'raw');}}
{{$shortDef = $record->customFieldDisplayByKey('definisi-singkat', 'raw');}}
{{$tags = $record->tags();}}
<div class="lalu-glossary-detail">
<div class="lalu-glossary-breadcrumb">
<a href="/kamus-istilah/">Kamus Istilah</a>
<span class="sep">/</span>
{{if $container}}
<a href="{$container->url()}">{$container->_title}</a>
<span class="sep">/</span>
{{endif}}
<span class="current">{$record->_title}</span>
</div>
<header class="lalu-glossary-detail-header">
<h1 class="lalu-glossary-detail-title">{$record->_title}</h1>
{{if $aliases}}
<p class="lalu-glossary-detail-aliases">
<span class="label">Sinonim:</span>
{$aliases}
</p>
{{endif}}
</header>
{{if $shortDef}}
<blockquote class="lalu-glossary-pullquote">
{$shortDef}
</blockquote>
{{endif}}
<div class="lalu-glossary-detail-content ipsType_richText">
{$record->content()|raw}
</div>
{{if $tags and \count($tags)}}
<div class="lalu-glossary-related">
<p class="label">Istilah Terkait</p>
<div class="lalu-glossary-tags">
{{foreach $tags as $tag}}
<span class="lalu-glossary-tag">{$tag}</span>
{{endforeach}}
</div>
</div>
{{endif}}
<footer class="lalu-glossary-detail-meta">
<p>{lang="num_views_with_number" pluralize="$record->record_views"}</p>
</footer>
</div>
Cara membacanya: blok <style> berisi tampilan; empat baris {{$...}} mengambil data (kategori, sinonim, definisi singkat, tag); sisanya HTML halaman: breadcrumb, judul dan sinonim, definisi singkat dalam kutipan, isi lengkap, istilah terkait, lalu jumlah tayangan. Tag tampil sebagai label biasa dan belum bisa diklik.
4.2 Template Record Listing (daftar per kategori): glossarylisting
Add database template → Name glossarylisting, Type Record Listing, Assign to Kamus Istilah.
Keputusan desain: navigasi huruf A–Z yang menempel di layar (sticky) sengaja tidak dibuat. Alasannya: template pembungkus categoryTable di IPS 5 memakai abstraksi class $table penuh (sorting, filtering, pagination, moderasi) dan menyerahkan render baris ke recordRow secara dinamis. Tidak ada akses mudah ke array records untuk dikelompokkan per huruf tanpa risiko merusak fitur bawaan. Karena Sort sudah Title (Fase 1.6), daftar tetap terurut abjad, dan itu cukup untuk sebuah kamus.
Edit sub-template recordRow, lalu ganti seluruh isinya dengan:
<style>
.lalu-glossary-list {
display: flex;
flex-direction: column;
}
.lalu-glossary-record {
display: block;
padding: 20px 0;
border-top: 1px solid var(--theme-border_color, #e2dcd5);
text-decoration: none !important;
color: inherit;
transition: background 0.2s;
}
.lalu-glossary-record:hover {
background: rgba(160, 120, 85, 0.04);
}
.lalu-glossary-record-head {
display: flex;
align-items: baseline;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 6px;
}
.lalu-glossary-record-title {
font-family: 'Instrument Serif', Georgia, serif;
font-size: 22px;
font-weight: 400;
color: var(--theme-text_color, #181818);
margin: 0;
}
.lalu-glossary-record:hover .lalu-glossary-record-title {
color: var(--theme-accent, #a07855);
}
.lalu-glossary-record-alias {
font-family: 'Geist Mono', monospace;
font-size: 11px;
color: var(--theme-accent, #a07855);
background: rgba(160, 120, 85, 0.1);
padding: 2px 8px;
border-radius: 10px;
}
.lalu-glossary-record-def {
font-size: 14px;
line-height: 1.5;
color: var(--theme-text_dark, #5c3a21);
margin: 0;
}
</style>
<div class="lalu-glossary-list">
{{foreach $rows as $row}}
{{$rowAlias = $row->customFieldDisplayByKey('aliases', 'raw');}}
{{$rowDef = $row->customFieldDisplayByKey('definisi-singkat', 'raw');}}
<a href="{$row->url()}" class="lalu-glossary-record">
<div class="lalu-glossary-record-head">
<h3 class="lalu-glossary-record-title">{$row->_title}</h3>
{{if $rowAlias}}
<span class="lalu-glossary-record-alias">{$rowAlias}</span>
{{endif}}
</div>
{{if $rowDef}}
<p class="lalu-glossary-record-def">{$rowDef}</p>
{{endif}}
</a>
{{endforeach}}
</div>
4.3 Template Category List (halaman depan): glossarycategorylist
Add database template → Name glossarycategorylist, Type Category List, Assign to Kamus Istilah. Template group ini punya dua sub-template: index dan categoryRow.
Sub-template index:
<style>
.lalu-glossary-hero {
text-align: center;
padding: 60px 0 40px;
border-bottom: 1px solid var(--theme-border_color, #e2dcd5);
margin-bottom: 40px;
}
.lalu-glossary-title {
font-family: 'Instrument Serif', Georgia, serif;
font-size: clamp(48px, 8vw, 96px);
line-height: 0.95;
letter-spacing: -0.03em;
font-weight: 400;
color: var(--theme-text_color, #181818);
margin: 0 0 16px;
}
.lalu-glossary-desc {
font-size: 16px;
line-height: 1.5;
color: var(--theme-text_dark, #5c3a21);
max-width: 480px;
margin: 0 auto;
}
.lalu-glossary-categories {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
max-width: 900px;
margin: 0 auto;
}
@media (max-width: 700px) {
.lalu-glossary-categories { grid-template-columns: 1fr; }
}
</style>
<div class="lalu-glossary-hero">
<h1 class="lalu-glossary-title">{$database->_title}</h1>
{{if $database->_description}}
<p class="lalu-glossary-desc">{$database->_description}</p>
{{endif}}
</div>
<div class="lalu-glossary-categories">
{{foreach $categories as $category}}
{template="categoryRow" app="cms" location="database" group="glossarycategorylist" params="$category"}
{{endforeach}}
</div>
Sub-template categoryRow:
<style>
.lalu-glossary-cat-card {
background: var(--theme-area_background, #fdfbfa);
border: 1px solid var(--theme-border_color, #d4c9be);
border-radius: 6px;
padding: 24px;
text-decoration: none !important;
color: inherit;
transition: all 0.3s;
display: block;
}
.lalu-glossary-cat-card:hover {
background: var(--theme-area_background_alt, #f5efea);
border-color: var(--theme-accent, #a07855);
}
.lalu-glossary-cat-header {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-bottom: 8px;
}
.lalu-glossary-cat-name {
font-family: 'Instrument Serif', Georgia, serif;
font-size: 24px;
font-weight: 400;
color: var(--theme-text_color, #181818);
margin: 0;
}
.lalu-glossary-cat-count {
font-family: 'Geist Mono', monospace;
font-size: 12px;
color: var(--theme-accent, #a07855);
}
.lalu-glossary-cat-desc {
font-size: 13px;
line-height: 1.5;
color: var(--theme-text_dark, #5c3a21);
margin: 0;
}
</style>
{{$RecordsClass = $category::$contentItemClass;}}
{{$count = $RecordsClass::contentCount( $category, FALSE );}}
<a href="{$category->url()}" class="lalu-glossary-cat-card">
<div class="lalu-glossary-cat-header">
<h2 class="lalu-glossary-cat-name">{$category->_title}</h2>
<span class="lalu-glossary-cat-count">{$count}</span>
</div>
{{if $category->_description}}
<p class="lalu-glossary-cat-desc">{$category->_description|raw}</p>
{{endif}}
</a>
4.4 Pasang template group ke database
Kembali ke Databases → Kamus Istilah → Display. Sekarang template sudah ada, jadi pilih di menu:
Field | Value |
|---|---|
Category Listing Layout | Custom → Category Template Group: Glossarycategorylist |
Listing Layout | Custom → Listing Template Group: Glossarylisting |
Display Template Group | Glossarydisplay |
Simpan. Halaman depan /kamus-istilah/ sekarang menampilkan kotak kategori custom, klik kategori menampilkan daftar istilah custom, dan klik istilah menampilkan halaman detail custom.
Fase 5: Mengisi istilah
5.1 Saran pembagian awal: 40 istilah
Ini target, bukan syarat. Kamu boleh mulai dari 10 sampai 15 istilah yang paling sering kamu pakai, lalu menambah sambil jalan. Kamus yang rapi dengan 15 istilah lebih berguna daripada 40 istilah yang setengah jadi.
Kategori | Target | Contoh |
|---|---|---|
SEO & Analytics | 12 | Backlink, SERP, CTR, Bounce Rate, DA, Anchor Text, Meta Description, Schema, Canonical, Sitemap, robots.txt, Indexing |
Monetisasi | 8 | AdSense, CPM, RPM, eCPM, CPC, Affiliate, Sponsorship, Display Ad |
Content & Copywriting | 7 | Cornerstone, Pillar Page, Evergreen, Listicle, How-to, CTA, Hook |
Technical & Performance | 6 | Core Web Vitals, LCP, CLS, INP, TTFB, Caching |
Platform & Tools | 7 | WordPress, Blogspot, CMS, Plugin, Theme, Hosting, CDN |
5.2 Cara menambah istilah
Lewat halaman situs: buka /kamus-istilah/, klik kategori, lalu klik "Add new istilah". Tombol ini hanya muncul untuk akun yang punya izin menambah (lihat 1.7). Lewat AdminCP: Pages → Databases → Kamus Istilah → Records → Create New.
Isi per record:
Field | Praktik terbaik |
|---|---|
Title | Tulis istilahnya persis (Backlink, bukan "Apa itu Backlink") |
Aliases | Sinonim atau akronim, dipisah koma (Tautan Balik, Inbound Link) |
Definisi Singkat | Satu kalimat, maksimal 160 karakter |
Content | Penjelasan lengkap (lihat struktur di bawah) |
Tags | 3 sampai 5 tag. Tampil sebagai "Istilah Terkait" |
Category | Pilih yang paling sesuai |
5.3 Susunan isi per istilah
<p>{Definisi pembuka — 2-3 kalimat jelas}</p>
<h3>Jenis / Variasi</h3>
<ul>
<li><strong>Tipe 1</strong> — penjelasan</li>
<li><strong>Tipe 2</strong> — penjelasan</li>
</ul>
<h3>Contoh Praktis</h3>
<p>{Contoh dari konteks Indonesia}</p>
<h3>Mengapa Penting</h3>
<p>{Relevansi untuk blogger}</p>
Lewati bagian "Jenis / Variasi" kalau istilahnya memang tidak punya variasi. Lebih baik pendek dan jelas daripada panjang karena memaksakan bagian.
5.4 Bantuan AI untuk draf awal
Prompt yang bisa dipakai (Claude, ChatGPT, atau yang lain):
Tulis definisi istilah blogging berikut dalam bahasa Indonesia untuk
komunitas blogger. Format:
- Definisi singkat (max 160 karakter)
- Penjelasan lengkap (3-5 paragraf)
- Sertakan: jenis/variasi, contoh praktis, mengapa penting
- Bahasa: informal-profesional, pemula s/d menengah
- Hindari jargon yang tidak dijelaskan
Istilah: {ISTILAH}
Kategori: {KATEGORI}
Selalu periksa dulu sebelum menerbitkan:
Akurasi teknis.
Relevansi untuk pembaca Indonesia.
Tidak ada angka atau fakta karangan.
Nada tulisan sama dengan bagian lain di situsmu.
5.5 Hapus record percobaan
Sebelum kamus dibuka untuk umum, hapus record percobaan (misalnya yang isinya teks acak) atau ganti dengan konten asli.
Fase 6: Menyambungkan ke situs
6.1 Tambahkan ke menu utama
AdminCP → System → Settings → Menu Manager. Nama dan letak menu pengaturan ini bisa berbeda di versi lain; carilah pengelola navigasi di versimu. Tambahkan item:
Field | Value |
|---|---|
Type | Link (atau langsung item Pages kalau tersedia) |
Title | Kamus Istilah |
URL | /kamus-istilah/ |
Display in main navigation | Yes |
6.2 Blok "Istilah Acak" di beranda (opsional)
Bagian ini opsional dan belum disertai kode contoh. AdminCP → Pages → Blocks → Add → Plugin → Record Feed:
Field | Value |
|---|---|
Database | Kamus Istilah |
Number to show | 5 |
Sort by | Random |
Untuk mengatur tampilannya, buat template blok custom yang me-loop $records dan menampilkan Title serta customFieldDisplayByKey('definisi-singkat', 'raw') untuk tiap item. Pasang bloknya di beranda lewat editor Page.
6.3 Tautan dari artikel
Saat menulis artikel, tautkan manual ke istilah di kamus:
Gunakan <a href="/kamus-istilah/seo-analytics/backlink-r1/">backlink</a>
berkualitas untuk meningkatkan authority.
Angka di ujung alamat (r1) adalah nomor record. Salin alamat lengkap dari browser, jangan mengetiknya sendiri.
Fase 7: Pengujian
Sebelum menganggap kamus selesai, periksa satu per satu:
Halaman depan (
/kamus-istilah/): kategori tampil sebagai kotak dan jumlah istilahnya benar.Daftar kategori: istilah terurut abjad, sinonim dan definisi singkat tampil.
Halaman istilah: judul, sinonim, definisi singkat, isi, istilah terkait, dan jumlah tayangan tampil. Tautan breadcrumb bisa diklik.
Sebagai tamu: buka di jendela privat tanpa masuk akun. Semua halaman terbuka, dan tidak ada tombol untuk menambah atau mengubah istilah.
Di ponsel: buka di ponsel atau perkecil jendela browser sampai di bawah 700 piksel. Kotak kategori harus menjadi satu kolom.
Pencarian: cari satu istilah lewat kolom pencarian situs. Istilah itu harus muncul di hasil.
Menu: item Kamus Istilah mengarah ke
/kamus-istilah/.Alamat salah:
/glossary/menghasilkan 404. Itu normal; pastikan tidak ada tautan yang mengarah ke sana.Record percobaan: tidak ada lagi record dengan teks acak.
Fase 8: Perawatan
Menambah istilah. Ikuti 5.2. Kalau kategori hampir penuh atau terasa campur aduk, tambahkan kategori baru lewat Fase 3 dan isi slug-nya manual.
Mengubah template. Salin dulu isi lama ke berkas teks. Setelah menyimpan, kalau tampilan tidak berubah, kosongkan cache situs (misalnya Redis, kalau dipakai) dan muat ulang halaman tanpa cache (Ctrl+F5).
Jangan mengubah Page Filename atau slug kategori setelah ada tautan yang masuk, termasuk tautan dari artikelmu sendiri. Alamat lama akan menghasilkan 404.
Setelah memperbarui IPS. Buka kembali tiga jenis halaman dan ulangi Fase 7. Template custom bisa terpengaruh perubahan di versi baru.
Cadangan. Simpan salinan ketiga template (glossarydisplay, glossarylisting, glossarycategorylist) di tempat yang aman.
Pemecahan masalah
Masalah | Penyebab | Solusi |
|---|---|---|
"widgetArea is throwing an error" | Sintaks PHP dinamis di template (misalnya | Ganti dengan teks statis, sederhanakan kode, dan uji bagian demi bagian |
"syntax of tags or HTML logic is badly formatted" | Komentar | Pakai |
Kolom kosong padahal ada data | Nama property salah | Content adalah |
URL breadcrumb berisi kode mentah | Pemanggilan class tidak dieksekusi sebagai PHP | Tulis |
Halaman | Page bernama | Pakai URL atau Page Filename yang benar |
CSS tidak diterapkan | Berkas CSS terpisah tidak dimuat otomatis | Taruh CSS di blok |
"Attempt to assign property options on null" | Mengedit kolom bawaan yang terkunci (Title atau Content) | Jangan edit kolom bawaan |
Halaman depan menampilkan record, bukan kategori | Index Page masih "All Content" | Atur Index Page ke "Category Listing" |
Template custom tidak terpakai | Layout masih "Grid" atau "Rows" | Atur Layout ke "Custom", lalu pilih Template Group |
Error required saat mematikan tampilan kolom | Display View Format wajib diisi | Pilih "Value" walau tidak dipakai |
Tombol "Add new istilah" tidak muncul | Akun yang dipakai belum punya izin menambah record | Periksa izin database (1.7) dan izin kategori (Fase 3), lalu masuk dengan akun admin |
Huruf tidak sama dengan contoh | Font Geist, Instrument Serif, atau Geist Mono tidak dimuat oleh temamu | Muat font itu lewat tema, atau ganti nama font di CSS |
Bacaan lanjutan
Invision Community: Databases, Part II. Membahas izin di tingkat halaman, database, dan kategori. Ditulis untuk versi 4, jadi sebagian langkah bisa berbeda di versi 5.
Invision Community: Case study, building a recipe section. Contoh lain membuat database dengan kolom dan kategori.
Catatan teknis
Kode template di Fase 4 sudah dijalankan di Invision Community 5.0.19 pada situs ini. Langkah di Fase 6 bisa berbeda di versi lain, dan bagian izin (1.7) mengikuti dokumentasi Invision, jadi pastikan lewat Fase 7. Dibuat untuk lalu.pro.
Bagaimana pendapat Anda mengenai topik ini? Mari bagikan perspektif Anda di bawah!
Recommended Comments