Panduan Kustomisasi Namespace MediaWiki: Studi Kasus Konfigurasi Rodovid

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

idcasesubpagescanonicalnamespaceprotectiondefaultcontentmodel*
-2first-letterMediaMedia
-1first-letterSpecialSpecial
0first-letter
1first-letterTalkTalk
2first-letterUserUser
3first-letterUser talkUser talk
4first-letterProjectRodovid EN
5first-letterProject talkRodovid EN talk
6first-letterFileFile
7first-letterFile talkFile talk
8first-letterMediaWikieditinterfaceMediaWiki
9first-letterMediaWiki talkMediaWiki talk
10first-letterTemplateTemplate
11first-letterTemplate talkTemplate talk
12first-letterHelpHelp
13first-letterHelp talkHelp talk
14first-letterCategoryCategory
15first-letterCategory talkCategory talk
1000first-letterPersonpersonPerson
1001first-letterPerson talkPerson talk
1002first-letterFamilyfamilyFamily
1003first-letterFamily talkFamily talk
1004first-letterLineageLineage
1005first-letterLineage talkLineage talk
1006first-letterSourceSource
1007first-letterSource talkSource talk
1008first-letterPlacePlace
1009first-letterPlace talkPlace 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"
            }
        }
    }
}