Skip to content
Lihat di aplikasi

Cara yang lebih baik untuk menjelajah. Pelajari lebih lanjut.

Lalu Pro

Aplikasi layar penuh di layar beranda Anda dengan pemberitahuan, lencana, dan banyak lagi.

Untuk menginstal aplikasi ini di iOS dan iPadOS
  1. Ketuk ikon Berbagi di Safari
  2. Gulir menu dan ketuk Tambahkan ke Layar Utama.
  3. Ketuk Tambah di sudut kanan atas.
Untuk menginstal aplikasi ini di Android
  1. Ketuk menu 3 titik (⋮) di sudut kanan atas browser.
  2. Ketuk Tambahkan ke Layar Beranda atau Instal aplikasi.
  3. Konfirmasikan dengan mengetuk Instal.

Membuat Sistem Glossary di Invision Community 5

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.

  • content adalah method, bukan property. Tulis {$record->content()|raw}, bukan {$record->content}.

  • Jumlah tayangan bernama record_views, bukan views. 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 $rows dan $row, categoryRow memakai $category.

  • Tanda |raw berarti 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 {$record::database()->url()} atau {expression=...}) gagal dirender

Ganti dengan teks statis, sederhanakan kode, dan uji bagian demi bagian

"syntax of tags or HTML logic is badly formatted"

Komentar {{* *}} tidak valid

Pakai <!-- --> atau hapus

Kolom kosong padahal ada data

Nama property salah

Content adalah content() (method); jumlah tayangan adalah record_views

URL breadcrumb berisi kode mentah

Pemanggilan class tidak dieksekusi sebagai PHP

Tulis /kamus-istilah/ sebagai teks polos

Halaman /glossary/ error 404

Page bernama kamus-istilah, bukan glossary

Pakai URL atau Page Filename yang benar

CSS tidak diterapkan

Berkas CSS terpisah tidak dimuat otomatis

Taruh CSS di blok <style> di dalam template HTML

"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

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.


Panduan lengkap membuat sistem Glossary dengan kategori-based navigation dan A-Z grouping.

Bagaimana pendapat Anda mengenai topik ini? Mari bagikan perspektif Anda di bawah!

User Feedback

Recommended Comments

Tidak ada komentar untuk ditampilkan.

Account

Navigation

Cari

Cari

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.