Bei mehrsprachigen Seiten kann es sinnvoll sein bei der Suche nur Ergebnisse aus der einen oder anderen Sprache anzeigen zu lassen. Um dies zu erreichen kann ab WB 2.7 die Suche auf bestimmte Seiten eingegrenzt werden. Diese Eingrenzung erfolgt anhand des Links einer Seite (genauer gesagt anhand der Datenbankspalte 'link' in der Tabelle 'pages').
Beachten Sie dabei den besonderen Aufbau dieses Wertes:
| Seite | link |
|---|---|
| http://www.example.org/pages/intro.php | /intro |
| http://www.example.org/pages/en/intro.php | /en/intro |
| http://www.example.org/pages/de/hilfe/anleitung.php | /de/hilfe/anleitung |
| http://www.example.org/pages/maschinen/vario-pop-2000.php | /maschinen/vario-pop-2000 |
Voraussetzung für dieses Verfahren ist, daß eindeutige, unterschiedliche Link-Abschnitte vorhanden sind, z.B. /en/, /de/.
/de/into /inhalt /seite1 /en/intro /content /page1
Wenn stattdessen z.B. die Sprache über die Option Seitensprache gesteuert wird, ist das hier beschriebene Verfahren nicht anwendbar. Siehe aber Begrenzen der Suche auf bestimmte Sprache.
Die Umsetzung ist sehr einfach. Alles was Sie tun müssen, ist Ihrem Such-Formular ein weiteres Feld hinzuzufügen.
Dem Such-Formular (gemeint ist hier das Formular im Template oder ein auf einer Seite selbst hinzugefügtes Formular) muß zuerst ein Feld mit Namen search_path hinzugefügt werden. Dazu gibt es mehrere Möglichkeiten, je nachdem, was Sie genau erreichen wollen.
Wenn Sie die Suchmöglichkeiten mit einem Dropdown- oder Radio-Button vorgeben wollen (entweder /de/ oder /en/, oder auch entweder /maschinen/ oder /anlagen/) bauen Sie das Such-Formular so auf:
<form name="search_sidebar" action="<?php echo WB_URL.'/search/index'.PAGE_EXTENSION; ?>" method="post"> <h2><?php echo $TEXT['SEARCH']; ?></h2> <select name="search_path"> <option value="/en/">English</option> <option value="/de/">Deutsch</option> </select> <input type="text" name="string" /><br /><br /> <input type="submit" name="submit" value="<?php if(isset($TEXT['SUBMIT'])) { echo $TEXT['SEARCH']; } else { echo 'Search'; } ?>" /> </form>
Um den Wert für search_path von der aktuellen Seite zu ermitteln, benötigen Sie etwas PHP im Template:
Determine value for search_path
<?php if(SHOW_SEARCH) { $search_path = FALSE; global $wb; if($link = $wb->page['link']) { // --start---- make your changes here ----- if(strpos($link, '/de/')!==FALSE)) { $search_path = '/de/'; } elseif(strpos($link, '/en/')!==FALSE)) { $search_path = '/en/'; } // --end----- ---- ---- ------- ---- ----- } if(!$search_path) { if(isset($_REQUEST['search_path'])) { $search_path = htmlspecialchars($wb->strip_slashes($_REQUEST['search_path']), ENT_QUOTES); } else { $search_path = '/en/'; // default if nothing match } } ?> /* * The form goes here */ <?php } ?>
Im Formular müssen Sie nun wiederum lediglich das Feld search_path, diesmal aber als hidden-field, einfügen:
<form name="search_sidebar" action="<?php echo WB_URL.'/search/index'.PAGE_EXTENSION; ?>" method="post"> <h2><?php echo $TEXT['SEARCH']; ?></h2> <input type="hidden" name="search_path" value="<?php echo $search_path ?>"> <input type="text" name="string" /><br /><br /> <input type="submit" name="submit" value="<?php if(isset($TEXT['SUBMIT'])) { echo $TEXT['SEARCH']; } else { echo 'Search'; } ?>" /> </form>
Sie haben oben gesehen, daß search_path einen Teil der Spalte 'link' in der Tabelle 'pages' widerspiegeln muß. Aber was passiert da genau?
Der Wert von search_path wird innerhalb einer SQL-Abfrage mit der Spalte 'link' verglichen.
... AND `link` LIKE 'search_path%'
Das '%'-Zeichen ist ein Wildcard-Zeichen, und bedeutet, daß an dieser Stelle noch beliebiger Text folgen kann. Der Vergleich beginnt also immer am Anfang von 'link'.
| search_path | Treffer | kein Treffer |
|---|---|---|
| /en/ | /en/info | /people/en/mario |
| /en | /endotherm ←Achtung | |
| en | /end oder /en/attention oder … ←Achtung | |
| /en/info | /en/information/contact | /de/information/contact |
| /info/ | /info/contact | /info ←fehlendes '/' |
| /maschinen/verkauf | /maschinen/verkaufen-oder-leasen | /de/maschinen/verkauf/info |
Damit auch Treffer in der Mitte (oder am Ende) von 'link' möglich werden, kann man search_path ein % voranstellen,
$search_path = '%/en/';
was zu einer SQL-Abfrage führt, wie sie unter Website Baker 2.7 benutzt wurde.
... AND `link` LIKE '%search_path%'
| search_path | Treffer | kein Treffer |
|---|---|---|
| /en/ | /info/en/contact | /info/en |
Beachten Sie, daß bei Website Baker 2.7 standardmäßig die Abfrage so ausgeführt wird. Eine Eingrenzung auf den Anfang ist bei WB 2.7 daher nicht möglich.
Wollen Sie die Suche nicht nur auf einen Bereich beschränken ('/en/') sondern auf Mehrere (z.B. '/maschinen/' und '/anlagen/'), können Sie mehrere Einträge mit Komma getrennt benutzen:
$search_path = '/maschinen/,/anlagen/';
Ebenso können Sie einen oder mehrere Bereiche ausschließen durch voranstellen eines Minus-Zeichens '-'. Das folgende Beispiel sucht überall, nur nicht in /maschinen/ oder /anlagen/:
$search_path = '-/maschinen/,/anlagen/';
'/en/' aber nicht in '/en/info':$searchpath = '/en/,-/en/info'| Begrenzen der Suche auf bestimmte Seiten | 0 Comments |