Ajaxsuche in Mediawiki aktivieren

Mediawiki´s unterstützen von Haus aus einige Ajaxfunktionen, die sehr nützlich sein können, aber meist bei einer frischen Installation deaktiviert sind. Ein schönes Beispiel dafür ist die Ajaxsuche, die ich persönlich sehr Hilfreich finde.

Geben Sie bei aktivierter Ajaxsuche etwas in das Suchfeld ein, werden nach dem dritten Buchstaben (wenn Artikel mit diesen Buchstaben vorhanden sind) bereits Artikelvorschläge und Zwischensuchergebnisse angezeigt.

Aktivieren der Ajaxssuche

Die Ajaxsuche aktiviert man, indem man folgende Änderungen in der LocalSettings.php vornimmt:


$wgUseAjax = true;
//Folgende Zeile legt fest, dass bei jedem User die Ajaxsuche Standardmäßig aktiviert ist
$wgDefaultUserOptions['ajaxsearch'] = 1;
$wgAjaxExportList[] = "wfSajaxSearch";
$wgAjaxExportList[] = "wfAjaxWatch";
$wgAjaxSearch = true;

Mit dieser Konfiguration sollte nun auch unter Einstellungen im Reiter Suche ein Punkt Benutze AJAX-unterstützte Suche erscheinen. Hier kann jeder Benutzer diese Suche dann aktivieren oder deaktivieren.

Wiki: Suchen in mehreren Namespaces

Bei der erweiterten Suche hat man die Möglichkeit spezielle Namespaces wie z.B. „Bild“ zu durchsuchen. Um aber generell in einem weiteren Namespace wie z.B. „Bild“ über die normale Suche in der Navigation zu suchen muss man Änderungen am Code vornehmen.

Dazu muss die Datei wiki/include/SpecialSearch.php editiert werden.In der Zeile 249 finden Sie eine Funktion Namens userNamesspaces. Diese müssen Sie so abändern, dass Sie wie folgende Funktion aussieht:


249         function userNamespaces( &$user ) {
250                 $arr = array();
251                 foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
252                         if( $user->getOption( 'searchNs' . $ns ) ) {
253                                 $arr[] = $ns;
254                         }
255                         //Die Bedingung ermoeglicht es im Namespace Bild zu suchen!
256                         if($ns == 6 ) {
257                                $arr[] = $ns;
258                         }
259                 }
260                 return $arr;
261         }

Damit wird dem Wiki vorgegaukelt, dass der angemeldete User in seinen Einstellungen die Suche in Bildern eingestellt hat.

Damit nun auch in der Spezialsuche das Suchen in dem Namepsace Bild durchgeführt wird, muss die Funktion powerSearchBox wie folgt aussehen:


398         function powerSearchBox( $term ) {
399                 $namespaces = '';
400                 foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
401                         $checked = in_array( $ns, $this->namespaces )
402                                 ? ' checked="checked"'
403                                 : '';
404                         $name = str_replace( '_', ' ', $name );
405                         if( '' == $name ) {
406                                 $name = wfMsg( 'blanknamespace' );
407                         }
408                         $encName = htmlspecialchars( $name );
409                         if($ns == "6" ) {
410                           $namespaces .= " <label><input type='checkbox' checked=\"checked\"
value=\"1\" name=\"" .
411                             "ns{$ns}\"  />{$encName}</label>\n";
412                         }else {
413                           $namespaces .= " <label><input type='checkbox' value=\"1\"
name=\"" . "ns{$ns}\"{$checked} />{$encName}</label>\n";
415                         }
416                 }
417
418                 $checked = $this->searchRedirects
419                         ? ' checked="checked"'
420                         : '';
421                 $redirect = "<input type='checkbox' value='1' name=\"redirs\"{$checked} />\n";
422
423                 $searchField = '<input type="text" id="powerSearchText" name="search"
value="' .
424                         htmlspecialchars( $term ) ."\" size=\"16\" />\n";
425
426                 $searchButton = '<input type="submit" name="searchx" value="' .
427                   htmlspecialchars( wfMsg('powersearch') ) . "\" />\n";
428
429                 $ret = wfMsg( 'powersearchtext',
430                         $namespaces, $redirect, $searchField,
431                         '', '', '', '', '', # Dummy placeholders
432                         $searchButton );
433
434                 $title = SpecialPage::getTitleFor( 'Search' );
435                 $action = $title->escapeLocalURL();
436                 return "<br /><br />\n<form id=\"powersearch\" method=\"get\" " .
437                   "action=\"$action\">\n{$ret}\n</form>\n";
438         }

Die Variable $ns enthält hierbei den Präfix des Namensraums, der entweder aus der Datenbank oder der LocalSettings.php entnommen werden kann. Auf der „erweiterten Suchen“ Seite kann man aus dem Quelltext (Erreichbar über Quelltext anzeigen im Browser) den Präfix aus der jeweiligen Checkbox ablesen. Soll mehr als ein Namensraum in die „standard Suche“ implementiert werden, muss demnach die Bedingung weiter verschachtelt werden.

Wichtig ist aber, dass der „else“ Teil immer an dieser Stelle bleibt und nicht geändert wird, ansonsten werden die Personalisierten Namespaces von den Users nicht ausgewertet.