Cara Menambahkan Namespace Kustom pada MediaWiki
Secara standar, MediaWiki menyediakan namespace dasar seperti Main, Talk, dan Template. Namun, untuk kebutuhan khusus seperti basis data silsilah (Rodovid), kita perlu menambahkan namespace kustom. Berdasarkan data query API yang kita miliki, berikut adalah cara mengintegrasikannya.
1. Menentukan ID Namespace
Penting untuk diingat bahwa MediaWiki memesan ID tertentu:
- ID Negatif (-2, -1): Namespace khusus sistem (Media, Special).
- ID 0 s.d 15: Namespace standar MediaWiki.
- ID 100 s.d 199: Dicadangkan untuk ekstensi (seperti Wikibase).
- ID Kustom: Disarankan dimulai dari 1000 ke atas untuk menghindari konflik dengan pembaruan sistem di masa depan.
2. Modifikasi LocalSettings.php
Untuk menambahkan namespace seperti Person, Family, dan lainnya, Anda harus menambahkan kode berikut ke dalam file LocalSettings.php di server Anda:
// Definisikan ID Namespace baru
define("NS_PERSON", 1000);
define("NS_PERSON_TALK", 1001);
define("NS_FAMILY", 1002);
define("NS_FAMILY_TALK", 1003);
define("NS_LINEAGE", 1004);
define("NS_LINEAGE_TALK", 1005);
define("NS_SOURCE", 1006);
define("NS_SOURCE_TALK", 1007);
define("NS_PLACE", 1008);
define("NS_PLACE_TALK", 1009);
// Daftarkan ke dalam array $wgExtraNamespaces
$wgExtraNamespaces[NS_PERSON] = "Person";
$wgExtraNamespaces[NS_PERSON_TALK] = "Person_talk";
$wgExtraNamespaces[NS_FAMILY] = "Family";
$wgExtraNamespaces[NS_FAMILY_TALK] = "Family_talk";
$wgExtraNamespaces[NS_LINEAGE] = "Lineage";
$wgExtraNamespaces[NS_LINEAGE_TALK] = "Lineage_talk";
$wgExtraNamespaces[NS_SOURCE] = "Source";
$wgExtraNamespaces[NS_SOURCE_TALK] = "Source_talk";
$wgExtraNamespaces[NS_PLACE] = "Place";
$wgExtraNamespaces[NS_PLACE_TALK] = "Place_talk";
// Opsional: Aktifkan fitur subhalaman untuk namespace tertentu
$wgNamespacesWithSubpages[NS_PERSON] = true;
$wgNamespacesWithSubpages[NS_FAMILY] = true;
Ketentuan dan Batasan Namespace
Sebelum Anda menambahkan banyak namespace, pahami aturan main berikut agar tidak terjadi kerusakan database:
A. Aturan Berpasangan (Talk Pages)
Setiap namespace konten (ID Genap) harus memiliki pasangan namespace diskusi (ID Ganjil). Jika Anda membuat Person di ID 1000, maka Person talk wajib berada di ID 1001. Jika aturan ini dilanggar, fitur diskusi pada halaman tersebut tidak akan berfungsi.
B. Larangan Mengubah ID
Sekali ID ditetapkan dan halaman dibuat, jangan pernah mengubah nomor ID tersebut. Mengubah ID di LocalSettings.php setelah database berisi data akan menyebabkan halaman-halaman lama “menghilang” dari pencarian karena sistem mencari ID yang sudah berganti.
C. Case Sensitivity
Secara bawaan, MediaWiki menggunakan first-letter (huruf pertama kapital). Pastikan penulisan nama namespace konsisten. Jangan gunakan spasi pada kunci array di kode PHP, gunakan garis bawah (_) sebagai pengganti spasi (contoh: "User_talk").
D. Batasan Konten (Content Model)
Pada data Rodovid, namespace Person dan Family memiliki defaultcontentmodel khusus. Artinya, halaman di sana tidak hanya berisi teks wiki biasa, tetapi diproses oleh mesin silsilah. Menambahkan namespace saja tanpa memiliki ekstensi pengolah datanya hanya akan membuat halaman tersebut berfungsi seperti artikel biasa.
Data Tambahan
| id | case | subpages | canonical | namespaceprotection | defaultcontentmodel | * |
|---|---|---|---|---|---|---|
| -2 | first-letter | Media | Media | |||
| -1 | first-letter | Special | Special | |||
| 0 | first-letter | |||||
| 1 | first-letter | Talk | Talk | |||
| 2 | first-letter | User | User | |||
| 3 | first-letter | User talk | User talk | |||
| 4 | first-letter | Project | Rodovid EN | |||
| 5 | first-letter | Project talk | Rodovid EN talk | |||
| 6 | first-letter | File | File | |||
| 7 | first-letter | File talk | File talk | |||
| 8 | first-letter | MediaWiki | editinterface | MediaWiki | ||
| 9 | first-letter | MediaWiki talk | MediaWiki talk | |||
| 10 | first-letter | Template | Template | |||
| 11 | first-letter | Template talk | Template talk | |||
| 12 | first-letter | Help | Help | |||
| 13 | first-letter | Help talk | Help talk | |||
| 14 | first-letter | Category | Category | |||
| 15 | first-letter | Category talk | Category talk | |||
| 1000 | first-letter | Person | person | Person | ||
| 1001 | first-letter | Person talk | Person talk | |||
| 1002 | first-letter | Family | family | Family | ||
| 1003 | first-letter | Family talk | Family talk | |||
| 1004 | first-letter | Lineage | Lineage | |||
| 1005 | first-letter | Lineage talk | Lineage talk | |||
| 1006 | first-letter | Source | Source | |||
| 1007 | first-letter | Source talk | Source talk | |||
| 1008 | first-letter | Place | Place | |||
| 1009 | first-letter | Place talk | Place talk |
{
"batchcomplete": "",
"query": {
"namespaces": {
"-2": {
"id": -2,
"case": "first-letter",
"canonical": "Media",
"*": "Media"
},
"-1": {
"id": -1,
"case": "first-letter",
"canonical": "Special",
"*": "Special"
},
"0": {
"id": 0,
"case": "first-letter",
"content": "",
"*": ""
},
"1": {
"id": 1,
"case": "first-letter",
"subpages": "",
"canonical": "Talk",
"*": "Talk"
},
"2": {
"id": 2,
"case": "first-letter",
"subpages": "",
"canonical": "User",
"*": "User"
},
"3": {
"id": 3,
"case": "first-letter",
"subpages": "",
"canonical": "User talk",
"*": "User talk"
},
"4": {
"id": 4,
"case": "first-letter",
"subpages": "",
"canonical": "Project",
"*": "Rodovid EN"
},
"5": {
"id": 5,
"case": "first-letter",
"subpages": "",
"canonical": "Project talk",
"*": "Rodovid EN talk"
},
"6": {
"id": 6,
"case": "first-letter",
"canonical": "File",
"*": "File"
},
"7": {
"id": 7,
"case": "first-letter",
"subpages": "",
"canonical": "File talk",
"*": "File talk"
},
"8": {
"id": 8,
"case": "first-letter",
"subpages": "",
"canonical": "MediaWiki",
"namespaceprotection": "editinterface",
"*": "MediaWiki"
},
"9": {
"id": 9,
"case": "first-letter",
"subpages": "",
"canonical": "MediaWiki talk",
"*": "MediaWiki talk"
},
"10": {
"id": 10,
"case": "first-letter",
"subpages": "",
"canonical": "Template",
"*": "Template"
},
"11": {
"id": 11,
"case": "first-letter",
"subpages": "",
"canonical": "Template talk",
"*": "Template talk"
},
"12": {
"id": 12,
"case": "first-letter",
"subpages": "",
"canonical": "Help",
"*": "Help"
},
"13": {
"id": 13,
"case": "first-letter",
"subpages": "",
"canonical": "Help talk",
"*": "Help talk"
},
"14": {
"id": 14,
"case": "first-letter",
"canonical": "Category",
"*": "Category"
},
"15": {
"id": 15,
"case": "first-letter",
"subpages": "",
"canonical": "Category talk",
"*": "Category talk"
},
"1000": {
"id": 1000,
"case": "first-letter",
"canonical": "Person",
"defaultcontentmodel": "person",
"*": "Person"
},
"1001": {
"id": 1001,
"case": "first-letter",
"canonical": "Person talk",
"*": "Person talk"
},
"1002": {
"id": 1002,
"case": "first-letter",
"canonical": "Family",
"defaultcontentmodel": "family",
"*": "Family"
},
"1003": {
"id": 1003,
"case": "first-letter",
"canonical": "Family talk",
"*": "Family talk"
},
"1004": {
"id": 1004,
"case": "first-letter",
"canonical": "Lineage",
"content": "",
"*": "Lineage"
},
"1005": {
"id": 1005,
"case": "first-letter",
"canonical": "Lineage talk",
"*": "Lineage talk"
},
"1006": {
"id": 1006,
"case": "first-letter",
"canonical": "Source",
"content": "",
"*": "Source"
},
"1007": {
"id": 1007,
"case": "first-letter",
"canonical": "Source talk",
"*": "Source talk"
},
"1008": {
"id": 1008,
"case": "first-letter",
"canonical": "Place",
"content": "",
"*": "Place"
},
"1009": {
"id": 1009,
"case": "first-letter",
"canonical": "Place talk",
"*": "Place talk"
}
}
}
}