Suchbegriffe im Mediawiki markieren

Mediawiki erweitern: Suchbegriffe markieren
Mediawiki erweitern: Suchbegriffe markieren

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.