Inhalt hinzufuegen

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

Achtung: Diese Funktion ist mittlerweile veraltet. Seit MediaWiki 1.5 gibt es MediaWiki:Sidebar

Inhaltsverzeichnis für die PUG

Das MediaWiki wurde als Wissensdatenbank entwicket und ist dafür echt Klasse. Nun wird es auch gerne für Hompages insbesondere von Usergroups verwendet. Dafür ist die Navigation noch nicht so vollständig, wie ich mir es persönlich vorstelle.

Ich hab mir deshalb MediaWiki zuhause installiert und hier (http://meta.wikimedia.org/wiki/Help:Anpassen) ein Dokument gefunden, welches die nötigen Tipps für die Anpassung gibt.


Das folgende ist ein daraus entstandenes Kochrezept für die PUG:


Folgende Änderungen sind nötig:

Datei LocalSettings.php

$wgCustomLinks = array (
    array( 'text'=>'Thema_1', 	'href'=>'Thema_1-url'),
    array( 'text'=>'Thema_2', 	'href'=>'Thema_2-url'),
);

So könnte man es einfach irgendwo in die 'LocalSettings.php' einfügen, frühestens kurz vor '$wgSitename'.

Da ich diese Vorgehensweise nervig finde, weil man immer in den Quellcode reinmuß, wird '$wgCustomLinks' nun automatisch erzeugt. Dazu mehr im nächsten Absschnitt SkinTemplate.php.


Datei includes/SkinTemplate.php

Etwa zeile 355 innerhalb von 'function outputPage()'

		$tpl->set( 'navigation_urls', $this->buildNavigationUrls() );
		$tpl->set( 'nav_urls', $this->buildNavUrls() );

		// das hier einfügen:------------------------------------------------
		$tpl->set( 'custom_urls', $this->buildCustomUrls() );
		// Ernst ------------------------------------------------------------

		// execute template


Bei Zeile 670 befindet sich die 'function buildNavigationUrls ()' Diese Funktion wird kopiert und etwas verändert. Zusätzlich habe ich ein bischen Code zur Erzeugung von '$wgCustomLinks' hinzugefügt.

Das sieht dann so aus:

	function buildCustomUrls () {
		$fname = 'SkinTemplate::buildNavigationUrls';
		wfProfileIn( $fname );



// ----- Hier wird $wgCustomLinks automatisch erzeugt: -------
		// global $wgCustomLinks;
		$wgCustomLinks = array ();

		global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBprefix;
		$db = new Database($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname);

		$res = $db->query( "SELECT cur_title, cur_text FROM cur WHERE cur_title like 'Inhalt' LIMIT 1" );
		$row = $db->fetchRow( $res );
		$linkarray = explode('[[', $row['cur_text']);
		foreach ( $linkarray as $lb )
		{
			$link = ereg_replace(']].*', '', $lb);
			// echo "+++" . $link . ' <br>';

			if ( $link != '' )
				$wgCustomLinks[] = array( 'text'=>"$link", 'href'=>"$link-url");
		}
// -------- Ende ------------

		$result = array();
		foreach ( $wgCustomLinks as $link ) {
			$text = wfMsg( $link['text'] );
			wfProfileIn( "$fname-{$link['text']}" );
			if ($text != '-') {
				$dest = wfMsgForContent( $link['href'] );
				wfProfileIn( "$fname-{$link['text']}2" );
			    $result[] = array(
								  'text' => $text,
								  'href' => $this->makeInternalOrExternalUrl( $dest ),
								  'id' => 'n-'.$link['text']
								  );
				wfProfileOut( "$fname-{$link['text']}2" );
			}
			wfProfileOut( "$fname-{$link['text']}" );
		}
		wfProfileOut( $fname );
		return $result;
	}

Einfach in der Datei 'includes/SkinTemplate.php' unter der Funktion 'buildNavigationUrls ()' einfügen.




Datei skins/MonoBook.php

Das ist die Skin-Template Datei. Da muß natürlich was rein, damit unser Abschitt auch angezeigt wird.

	<div class="portlet" id="p-nav">
	  <h5><?php $this->msg('customlinks') ?></h5>
	  <div class="pBody">
	    <ul>
	      <?php foreach($this->data['custom_urls'] as $navlink) { ?>
	      <li id="<?php echo htmlspecialchars($navlink['id'])
	        ?>"><a href="<?php echo htmlspecialchars($navlink['href']) ?>"><?php
	        echo htmlspecialchars($navlink['text']) ?></a></li><?php } ?>
	    </ul>
	  </div>
	</div>

Auch hier gibt es wieder mal ein Abschnitt, der Kopiert und verändert wurde. Also den Abschitt mit dem 'id="p-nav"' suchen und den Codeschnipsel darüber/darunter einfügen.


Was soll das?

Das Original (http://meta.wikimedia.org/wiki/Help:Anpassen) ist eigentlich schon sehr gut geschrieben. Ich hofffe nur, dass die Änderungen nun supereinfach gehen.

Ja, und viel wichtiger: der Abschnitt für die LocalSettings.php ist noch nicht fertig. Bei jeder Veränderung des Inhaltsverzeichnisses müßte jemand da rein. Da will ich mir noch was passendes dazu ausdenken :-)

So. Nun ist SkinTemplate.php fertig! Die Links lassen sich jetzt ohne den Quellcode jedesmal zu verändern setzen.



Die Bedienung:

1. "PUG:Inhalt" anlegen. Und folgendermaßen füllen:

[[Inhalt]]
[[FAQ]]
[[Benutzer]]
[[Workshops]]
...

Das mit den eckigen Klammern sollte ich vielleicht weglassen.


2. Zu jedem Keyword zwei Links anlegen wie zum Beispiel: MediaWiki:FAQ mit dem Inhalt:

 FAQ

um das Navigationsfeld zu beschriften und


eine Datei MediaWiki:FAQ-url mit dem Inhalt

 Faq

als Link.


Den Titel der "customlinks" setzt man in languages/Language.php:

 'customlinks' => 'PUG - Links',


Ernst.