Zum Benutzen der Feature-Suche wird die index.php des Modulverzeichnisses aufgerufen. Dort wird das Formular und nach absenden einer Suchanfrage auch die Ergebnisse gezeigt. Aussehen und Funktion des Formulares und der Ergebnisliste wird durch das Template in den Moduleinstellungen bestimmt.
Das Formular kann frei gestaltet werden, muß aber bestimmte Elemente enthalten.
besteht aus aus normalen HTML-Elementen zur Erstellung von Formularen, die lediglich bestimmte Namen haben müssen sowie durch Modul-Platzhalter ergänzt werden. Daher kann die Gestalten bequem mit einem beliebigen HTML-Editor erfolgen.
Die Formulardaten können mittels GET oder POST übergeben werden. Erstes erzeugt URLs mit vielen Parameterangaben, die auch als Favoriten oder Links in Webseiten benutzt werden können. Diese können dann auch in Templates dynamisch erzeugt werden, so daß man zu Artikelinhalten spezifische Suchen realisieren kann.
Ein Beispiel für ein einfaches Formular-Template, mit dem in einer Adressenliste nach Nachname und Ort gesucht werden kann:
Geben Sie bitte die gewünschten Suchbegriffe ein:<br />
<!-- START_MOD_SEARCH -->
<form method="get" action="index.php" style="display: ### SEARCH_FORM ###;">
<input type="hidden" name="action" value="feature_search" />
<input type="hidden" name="rubric" value="### SEARCH_NAV ###" />
<input type="hidden" name="results" value="AND" />
<table border="0" cellspacing="5" cellpadding="0">
<tr>
<td><label for="p1">Nachname </label></td>
<td>
<input type="text" name="p1" id="p1" value="### SEARCH_PHRASE_2 ###" />
<input type="hidden" name="sf1" value="Nachname" />
</td>
</tr>
<tr>
<td><label for="p2">Ort </label></td>
<td>
<input type="text" name="p2" id="p2" value="### SEARCH_PHRASE_3 ###" />
<input type="hidden" name="sf2" value="Ort" />
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Suche"></td>
</tr>
</table>
</form>
### SEARCH_MESSAGE ###
### SEARCH_MATCHES ###
<!-- START_SEARCH_MATCH -->
<div>### SEARCH_NUM ###.) <a href="../### SEARCH_RUBRIC_DIR ###/detail.php?nr=### SEARCH_ARTICLE_ID ###&rubric=### SEARCH_RUBRIC ###">### SEARCH_TITLE ###</a></div>
<div>### SEARCH_Vorname ### ### SEARCH_Nachname ###<br />
### SEARCH_PLZ ### ### SEARCH_Ort ###
<hr />
<!-- ENDE_SEARCH_MATCH -->
### SEARCH_PAGES ###
<!-- ENDE_MOD_SEARCH -->
Hierbei wird in einer Rubrik gesucht, die Adressen listet, die im Template mindestens folgende Platzhalter enthält: Vorname, Nachname, PLZ und Ort. Selbstverständlich können auch weitere Felder existieren, es muß ja nicht nach allem gesucht werden. Ziel ist wie bei einer normalen Suche einen Link zur "echten" Seite mit dem Treffer zu erhalten, es kann aber auch die Ergebnisliste ensprechend aufbereitet werden. Im Gegensatz zum ConPresso-Parser kann keine bedingte Ausgabe (ifSet/ifNotSet) in der Ergebnisliste benutzt werden.
Innerhalb des Templates gibt es Bereichsgrenzen, die als HTML-Kommentare ausgeführt sind (<!-- Text -->) und Platzhalter, die von ### eingefasst sind.
<!-- START_MOD_SEARCH --> und <!-- ENDE_MOD_SEARCH --> |
Definieren Anfang und Ende des Bereiches, in dem die Modul-Platzhalter verwendet werden können. Alles außerhalb dieses Bereiches wird unverändert ausgegeben. |
<!-- START_SEARCH_MATCH --> und <!-- ENDE_SEARCH_MATCH --> |
Definieren Anfang und Ende des Bereiches, in dem ein einzelnes Suchergebnis ausgegeben wird. Dieser Bereich wird solange wiederholt bis alle Ergebnisse ausgegeben wurden oder die eingestellte Anzahl an Suchergebnissen erreicht wurde. |
a.) Platzhalter außerhalb des Bereiches für einzelne Suchergebnisse (START/ENDE_SEARCH_MATCH) | |
### SEARCH_MESSAGE ### | An dieser Stelle werden die Modulmeldungen ausgegeben |
### SEARCH_MATCHES ### | Hier wird die Meldung über die Anzahl der Suchergebnisse ausgegeben |
### SEARCH_PAGES ### | Bei mehrseitige Suchergebnissen wird eine Pagination ausgegeben |
### SEARCH_NAV ### | Hier erscheint die in der URL mittels rubric= übergebene Rubrik. Dient z.B. zum Hervorheben der aktuellen Rubrik in der Navigation, da dies natürlich auch durch das Formular als Parameter weitergegeben wird. Dies kann natürlich auch durch einen festen Wert ersetzt werden. |
### SEARCH_FORM ### | Hier erscheint der in der URL mittels form= übergebene Wert. Damit kann das Formular bei den Suchergebnissen ausgeblendet werden (s.u.) |
### SEARCH_PHRASE_n ### | Hier erscheint der bei der Suche eingegebene Wert des n-ten Suchfeldes |
b.) Platzhalter innerhalb des Bereiches für einzelne Suchergebnisse (START/ENDE_SEARCH_MATCH) | |
### SEARCH_Feldname ### | Hier wird der Wert des angegebenen Feldes Feldname in den Suchergebnissen ausgegeben. Dabei muß dies nicht ein Suchfeld gewesen sein sondern es können alle zum Artikel gehörenden Felder (Platzhalter) benutzt werden. Ausgegeben wird in den Suchergebnissen bei HTML- und Text-Feldern deren Inhalt, bei URL-Feldern die URL, bei File- und Image-Feldern der Dateiname. |
### SEARCH_TITLE ### | Hier erscheint der Titel des Artikels im Suchergebnis |
### SEARCH_AUTHOR ### | Hier erscheint der Autor des Artikels im Suchergebnis |
### SEARCH_PUB_DATE ### | Hier erscheint das Publikationsdatum des Artikels im Suchergebnis (formatiert gemäß den Moduleinstellungen) |
### SEARCH_NUM ### | Eine fortlaufende Nummerierung der Suchergebnisse |
### SEARCH_ARTICLE_ID ### | Hier erscheint der Nummer des Artikels im Suchergebnis |
### SEARCH_RUBRIC ### | Hier erscheint der Name der Rubrik im Suchergebnis |
### SEARCH_RUBRIC_ID ### | Hier erscheint die ID der Rubrik im Suchergebnis |
### SEARCH_RUBRIC_DIR ### | Hier erscheint das Rubrikverzeichnis im Suchergebnis |
Zu jedem Suchfeld gehören bis zu 3 Elemente. Diese werden über Formularfelder an die Such übergeben. Dabei können die Arten der Suchfelder nach Belieben verwendet werden, also die Typen "text", "hidden", "select", "radio", "checkbox" und bei Bedarf auch ein textarea-Tag.
Gesucht wird in HTML-, Text- und URL-Feldern.
Ausgegeben wird in den Suchergebnissen bei HTML- und Text-Feldern deren Inhalt, bei URL-Feldern die URL, bei File- und Image-Feldern der Dateiname.
Wichtig: Da mehrere Suchfelder möglich sind, müssen die unterscheidbar sein. Dazu werden sie durchnummeriert. Hierbei ist notwendig, daß die Zählung der Felder bei 1 beginnt und nicht unterbrochen wird! Bei 4 Suchfelden müssen dies also die Nummern 1 bis 4 tragen (allerdings nicht notwendigerweise in dieser Reihenfolge im Formular vorkommen).
Folgende Parameter können übergeben werden:
pn der Suchbegriff ("phrase")
sfn das Text- oder HTML-Feld in dem gesucht wird ("search field")
svn das Artikel-Metadaten-Feld in dem gesucht wird ("search value")
smn die Suchmaske, mit der gesucht wird ("search mask") (optional)
wobei n für die fortlaufende Nummerierung steht und bei den zusammengehörigen Felder identisch sein muß.
Damit nach der Suche der Suchbegriff erneut als Wert im Suchfeld erscheint, kann dort der Platzhalter ### SEARCH_PHRASE_n ### eingesetzt werden.
Wird das Suchfeld als Select-Feld ausgeführt, kann der bei der Suche eingestellte Begriff als "selected" angezeigt werden, wenn man den Option-Tags jeweils den Platzhalter ### Sn_Wert ### hinzufügt, wobei "n" die durchgehende Nummerierung ist und "Wert" dem Wert der gewälten Option entspricht.
Wird gleichzeitig der Wert für sfn als '' (leer) definiert, dann wird hier der gewählte Wert (pn) als zu durchsuchendes Feld benutzt. Dies ist insbesondere in Verbindung mit den Wahlmöglichkeiten von mod_text interessant und erlaubt kategorisierte Suchen.
Die Suchmaske kann entweder weggelassen werden oder auf eines der 5 Muster aus den Moduleinstellungen gesetzt werden. Ohne Angabe eines Musters wird das Standard-Muster benutzt.
Beispiel 1: Es soll in einem Feld "Beschreibung" nach einem Begriff gesucht werden. Dieser Begriff kann irgendwo im Feld "Beschreibung" vorkommen (Volltextsuche):
<input type="text" name="p1" value="### SEARCH_PHRASE_1 ###" />
<input type="hidden" name="sf1" value="Beschreibung" />
Beispiel 2: Es soll in einem Feld "Preis" ein Maximalwert gesucht werden.:
<input type="text" name="p1" value="### SEARCH_PHRASE_1 ###" />
<input type="hidden" name="sf1" value="Preis" />
<input type="hidden" name="sm1" value="e" />
Beispiel 3: Es soll in einem Feld "Anrede" nach vorgegebenen Werten (Herr/Frau/Firma) gesucht werden.:
<select name="p1">
<option value=''>-- Bitte wählen --</option>
<option value='Herr' ### S1_Herr ###>Herr</option>
<option value='Frau' ### S1_Frau ###>Frau</option>
<option value='Firma' ### S1_Firma ###>Firma</option>
</select>
<input type="hidden" name="sf1" value="Anrede" />
<input type="hidden" name="sm1" value="a" />
Das Verhalten der Such wird durch weitere durch das Formular versendete Parameter bestimmt:
Für die Ermittlung der Suchergebnisse kann angegeben werden, ob alle Suchbegriffe oder nur einer davon gefunden werden muß. Hierzu wird der Suche der Parameter "results" mit den Werten "AND" oder "OR" übergeben. Wird nichts angegeben dann gilt standardmäßig "OR".
Die Übergabe der Parameter kann mit einem Input-Feld des Typs hidden vorgenommen werden, also z.B.
<input type="hidden" name="results" value="AND" />
Es kann aber auch jede andere Art von Formularfeld benutzt werden, z.B. als Radiobutton, um dem User die Auswahl des Parameters zu erlauben, z.B.
<input type="radio" name="results" value="AND" /> Alle Suchbegriffe finden
<input type="radio" name="results" value="OR" /> Einen der Suchbegriffe finden
Durch Angabe des Parameters "form" kann entschieden werden, ob das Formular zusammen mit den Suchergebnissen gezeigt wird. Dafür wird der Einfachheit halber der CSS-Style "display" benutzt.
Dazu wird das Form-Tag durch den CSS-Style ergänzt und in der Style-Definition der Platzhalter ### SEARCH_FORM ### eingesetzt:
<form method="get" action="index.php" style="display: ### SEARCH_FORM ###;">
Wird nun im Formular
<input type="hidden" name="form" value="none" />
eingesetzt, dann wird der Platzhalter durch "none" ersetzt und erzeugt folgenden Code
<form method="get" action="index.php" style="display: none;">
der das Formular unsichtbar macht. Wird "form" nicht gesetzt, dann hat der Platzhalter den Wert "inline" und das Formular wird gezeigt. Dann kann man aber auch gleich die gesamte Definition weglassen.
Durch diesen Parameter eignet sich Feature-Suche besser zur Vordefinition einer Suche über einen einfachen Link.