Hacka MediaWiki

Jag har skrivit en rätt användbar extension till MediaWiki med benägen hjälp av David Öhlin. Det programtillägget kan ändra vilka tabbar som visas för en användare som kommer till din wiki:

Att skriva extensions till MediaWiki är både enkelt och kul. MediaWiki är skriven i PHP, så det är en förutsättning att du kan det språket för att kunna hacka MediaWiki. Jag tänkte här gå igenom ett enkelt exempel på hur man kan göra för att skriva en egen extension. Här blir exemplet en extension som låter dig byta logo direkt på wikin (om du nu skulle vara som google och vill byta logo ofta 8) ).

En enkel extension för MediaWiki består av tre delar, varav två är obligatoriska för funktionen. Först måste du få MediaWiki att köra din extension. Det kan du göra på två sätt, antingen via arrayen $wgExtensionFunctions, eller via en av MediaWikis hooks. Jag kommer inte gå igenom hooks här, men du kan kolla själv på mediawiki.org:

I stället kommer jag använda den första metoden. Jag börjar med att bestämma vad min funktion skall heta, i det här fallet bir det "setLogo". Jag lägger sedan till den i ExtensionFunctions arrayen:

$wgExtensionFunctions[]='setLogo'; //Register function

Nästa steg blir att tala om för MediaWiki att du har skrivit en extension och få wikin att visa information om den på specialsidan "Special:Version". Det görs med arrayen $wgExtensionCredits:

$wgExtensionCredits['other'][] = array(
    'name' => 'SetLogo',
    'version' => 0.1,
    'author' => 'Micke Nordin',
    'url' => 'http://mickenordin.se/',
    ‘description’ => 'Easy interface for changing logo',
);

Ovanstående är väl rätt självförklarande, man beskriver helt enkelt sin extension.

Slutligen måste du skriva din funktion:

function setLogo()
{
    $logoURL = Article::newFromId(Title::newFromText("Mediawiki:LogoURL")->getArticleId());
    if(isset($logoURL)) //If that worked
    {
        global $wgLogo;
        $wgLogo = $logoURL->getRawText(); //Set $wgLogo to the URL on that page
       
    }
   
    return true;
}

Jag har bestämt att jag vill lagra URL till min logo på en sida i MediaWiki-namnrymnden kallad "MediaWiki:LogoURL". Jag använder metoden Article::newFromId för att skapa ett objekt av typen Article som jag lagrar som $logoURL. newFromId tar ett idnummer för en artikel som argument och jag använder metoden getArticleId() på ett nytt objekt av typen Title som jag skapar med metoden newFromText där parametern är namnet på sidan jag vill läsa in. Kanske finns det ett enklare sätt att skapa ett objekt av typen Article, jag vet inte. Sedan kollar jag om objektet har skapats korrekt. Om det inte gjort det kan det t.ex. bero på att sidan vi vill hämta url:en från inte är skapad ännu. Därefter ändrar jag värdet på den globala varibeln $wgLogo som innehåller sökvägen till logon. Det gör jag med den nya metoden getRawText(). Metoden är så ny, att den bara funkar med utvecklingsversionen av MediaWiki och inte den sensste stabila utgåvan som i dagsläget är 1.14.0. Slutligen är det viktigt att komma ihåg att ens extension alltid bör returnera true. Klart! Nu kan man lägga in den fullständiga sökvägen till en bild man vill ha som logo på wikisidan MediaWiki:logoURL och sedan kommer MediaWiki att visa den bilden som logo i de skins som har en sådan. Allt som allt ser koden ut så här:

<?php

$wgExtensionFunctions[]='setLogo'; //Register function

$wgExtensionCredits['other'][] = array(
    'name' => 'SetLogo',
    'version' => 0.1,
    'author' => 'Micke Nordin',
    'url' => 'http://mickenordin.se/',
    ‘description’ => 'Easy interface for changing logo',
);

function setLogo()
{
    $logoURL = Article::newFromId(Title::newFromText("Mediawiki:LogoURL")->getArticleId());
    if(isset($logoURL)) //If that worked
    {
        global $wgLogo;
        $wgLogo = $logoURL->getRawText(); //Set $wgLogo to the URL on that page
       
    }
   
    return true;
}

Du installerar programtillägget som vanligt genoma att placera koden i extensionsmappen på servern och lägga sedan använda require_once för att inkludera filen i LocalSettings.php. I det här fallet blir det:

 require_once "$IP/extensions/setLogo/setLogo.php";

om du lagt filen i en mapp kallad "setLogo" i din extensionskatalog och sdan döpt filen till "setLogo.php".

Se även:

Läs även andra bloggar om , ,

Leave a Comment

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*

Switch to our mobile site

Page optimized by WP Minify WordPress Plugin