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.

Ähnliche Artikel:

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>