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.