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.

Interlanguage Links in MediaWiki

Da es mittlerweile Wiki´s in verschiedenen Sprachen gibt wäre es Sinnvoll die Artikel die in mehreren Sprachen zur Verfügung stehen direkt erreichbar zu machen. Dafür werden sogenannte Interlanguage Links (Interwiki Links mit Verweis auf andere Sprachen) erstellt. Fügt man Interlanguage Link am Ende eines Artikels hinzu, so wird die linke Menüleiste um den Unterpunkt „andere Sprachen“ erweitert. (siehe Bild)

Interlanguage Links benutzen

Interlanguage Links werden generell am Ende eines Artikel in Alphabetischer Reihenfolge hinzugefügt. Damit ein Interlanguage Link unter „andere Sprachen“ Menübaum anzeigen zu lassen, müssen zu dem Partnerwiki „Interwiki Links“ in die Datenbank gespeichert werden. (siehe nächsten Punkt)

Interlanguage Links werden nach folgendem Schema in einen Artikel eingefügt:

[Sprachkürzel nach ISO:Name des Artikels]

Beispiel:

[en:Interlanguage Link]

Interlanguage Link in Datenbank hinzufügen

Um Interlanguage Links im Wiki benuzen können, müssen wie oben beschrieben „Interwiki Links“ zum Partnerwiki (Wiki in einer anderen Sprache) bestehen. Diese müssen Sie direkt und Manuell in die Datenbank einpflegen. Das einpflegen kann über MySQL Query oder per Oberflächen wie Heidi SQL oder PHPMyAdmin erfolgen. Die Interwiki Links müssen in die Tabelle Interwiki eingefügt werden. Die Tabelle ist nach folgendem Muster aufgebaut:

* iw_prefix: Sprach-Prefix (z.B. „en“ für Englisch). Die Präfixe sind in der Names.php Datei
gelistet
* iw_url: URL zu dem Partnerwiki(Wiki in anderer Sprache) (z.B. http://ihre-domain.de/wiki
/index.php/$1) Die $1 Variable ist hierbei Platzhalter für den Wiki Artikel
* iw_local: Hier muss 1 gesetzt werden, wenn das Wiki sich im Firmennetz befindet.
* iw_trans: Hier eine 0 eintragen.
Beispiel Query:

INSERT INTO
`interwiki`
(`iw_prefix`,`iw_url`,`iw_local`,`iw_trans`)
VALUES
(‘en’,‘http://en.ihre-domain.de/index.php/$1′,1,0)

Nach dem Eintragen in die Datenbank, kann man die Interwiki Links frei nach belieben in jedem Artikel wie oben beschrieben einfügen.