![Mediawiki erweitern: Suchbegriffe markieren](https://blogs.urz.uni-halle.de/llz/files/2013/10/Suchbegriffe-300x300.png)
Unter den zahlreichen Wikisystemen zählt Mediawiki zu den Beliebtesten. Seine Bekanntheit resultiert nicht zuletzt aus der Nähe zur Wikipedia als deren technisches Gerüst. In den Hochschulen werden Wikis insbesondere wegen der Möglichkeit zum kollaborativen Arbeiten und auch der Verknüpfung des E-Learning mit dem Wissensmanagement eingesetzt. Mit der Benutzerfreundlichkeit des Mediawiki war es nicht immer zum Besten bestellt. In den letzten Jahren wurden durch die Usability Initiative bereits die Benutzbarkeit des Texteditors verbessert und Anpassungen des Standardthemas umgesetzt. Der gerade im Betastadium befindliche Visual Editor verspricht hinsichtlich der Beitragserstellung durch Einsteiger nochmals deutliche Erleichterungen. Nichtsdestotrotz: wichtige Funktionen wie die Suche sind weiterhin optimierungswürdig. Mit der folgenden Erweiterung kann die Benutzerfreundlichkeit durch die farbige Markierung der Suchbegriffe sowohl auf der Suchergebnisseite als auch den dort verlinkten Inhaltsseiten verbessert werden.
Formatierung der Hervorhebungen Die farbige Markierung der Suchbegriffe auf der Suchergebnisseite erfordert lediglich eine Anpassung des Stylesheets. Auf der Seite Mediawiki:Common.css
wird die Formatierung der bereits für die Auszeichnung der Suchbegriffe verwendeten Klasse .searchmatch
angepasst. Dem Stylesheet wird die Klasse .marker
hinzugefügt, damit die Suchbegriffe auf den verlinkten Inhaltsseiten einheitlich markiert werden. Damit sind alle Änderungen an den Formatdefinitionen vorgenommen.
/* Suchbegriffe markieren */
.searchmatch, .marker {
background-color: #ffff84;
padding: 2px;
font-weight: normal;
}
Übergabe der Suchbegriffe Damit die Suchbegriffe auch auf den verlinkten Seiten farbig markiert werden können, müssen sie von der Suchergebnisseite übergeben werden. Hierfür lässt sich die Erweiterbarkeit des Mediawiki durch sogenannte Hooks nutzen. Hooks erlauben die Ausführung eigenen Quellcodes zu einem bestimmten Ereignis. Die Konfigurationsdatei LocalSettings.php
im Quellverzeichnis der Installation wird um eine benutzerdefinierte Erweiterung für den Hook LinkEnd
ergänzt. Die Ausführung erfolgt bei der Erstellung von Links und ermöglicht es, die Suchbegriffe im Query String mit dem Parameter marker
zu übergeben.
/* Suchbegriffe übergeben */
$wgHooks['LinkEnd'][] = 'addSearchTerm';
function addSearchTerm ( $skin, Title $target, array $options, &$text, array &$attribs, &$ret) {
if ( isset ( $_GET['search'] ) ) {
(strpos($attribs['href'],'?') !== false) ? $attribs['href'] .= '&' : $attribs['href'] .= '?';
$attribs['href'] .= 'marker=' . urlencode ( $_GET['search'] );
}
return true;
}
Markierung der Suchbegriffe Der letzte Schritt besteht darin, auf allen Seiten die Adresszeile auszulesen und auf die Übergabe des Parameters marker
hin zu überprüfen. Wurde dieser Parameter von der Suchergebnisseite übergeben, werden alle gleichlautenden Begriffe auf der Seite durch <span class=“marker“> … </span>
umschlossen und somit über die oben vorgenommene Formatzuweisung im Stylesheet farbig markiert. Zur Vereinfachung wird auf zwei externe Skripte zurückgegriffen: Zum einen auf das Purl Plugin von Mark Perkins, das die Internetadresse parst und deren Bestandteile zurückgibt. Zum anderen auf das Highlight Plugin von Bartek Szopka, das übereinstimmende Zeichenketten mit dem genannten Tag umschließt. Beide Skripte können auf einer Unterseite abgelegt werden und über die Funktion importScript()
in die Seite Mediawiki:Common.js
importiert werden oder direkt aus den Repositories eingebunden werden. Die erforderliche Javascript Bibliothek jQuery ist im Mediawiki standardmäßig integriert. Die Seite Mediawiki:Common.js
enthält wenige Zeilen Javascript, um beide beschriebenen Funktionen nach dem Laden der Seite auszuführen.
// Skripte importieren
importScript('MediaWiki:Common.js/Purl.js');
importScript('MediaWiki:Common.js/Highlight.js');
$(document).ready(function() {
// Parameter auslesen
var marker = $.url(window.location).param('marker');
if (typeof(marker) !== 'undefined') {
var marker = marker.split(' ');
// Suchbegriffe markieren
$('div#bodyContent').highlight(marker, {element: 'span', className: 'marker'});
}
});
Mit der beschriebenen Erweiterung lassen sich die Suchbegriffe auch auf verlinkten Inhaltsseiten visuell hervorheben. Die Übergabe der Suchbegriffe erlaubt in einem weiteren Schritt, eingeklappte Textboxen oder Tabellen im Falle enthaltener Suchwörter automatisch sichtbar zu machen.