Quer-Verweis

suchen

Suchen nach Inhalten in den Pages der openEngine-Datenbank in Kombination mit Suchen nach Inhalten auf einer angezeigten (aktuellen) Seite.

Voraussetzungen:

  • openEngine 1.6 im Verzeichnis /htdocs

Ziel: Erweiterung der Suchfunktionalitäten.

Schritt 1: Änderung der Such-Query in der Datei /htdocs/system/generator/admin.php in der Funktion: function get_searchresult

 $query = "SELECT * FROM ".$db_praefix."page WHERE ($field_name like '%$searchstring%') OR (page_text1 like '%$searchstring%') ORDER BY page_headline";

Erläuterungen:

Mit der zusätzlichen OR - Eintragung wird auch das Feld page_text1 - da stehen ja die Seiteninhalte - mit dem Suchbegriff abgesucht.

Anmerkung:

Es ist zwar kein schöner Eingriff in die Abfrage, aber ich hoffe, dass sich das Problem in einer der nächsten openEngine-Versionen sowieso anders löst. Des Zweck heiligt die Mittel und mit dieser Abfrage kommt man in den Genuß, auch nach den Inhalten der Seiten zu suchen.

Schritt 2: Änderung der Sucheingabe in der Datei /htdocs/templates/nav_generic.php:

<form name="searchform" method="get" action="website.php">
<input type="hidden" name="id" value="/search.htm">
<input type="text" name="searchstring" id="searchstring" class="button" style="font:10px;width:110"
value="<? if ($_GET["searchstring"] <> "") echo $_GET["searchstring"]; else echo "Suchbegriff eingeben" ?>"
onfocus="document.searchform.searchstring.value='';" title="RETURN = suchen in der Website">
<img src="img/search.png"
onClick="if (window.navigator.product == 'Gecko') searchform.submit(); else suchen();"
alt="suchen (aktuelle Seite)">

</form>

Erläuterungen:

Die Eingabe in das input-Feld searchstring mit anschließendem RETURN führt bereits zur Auslösung der action im Formular (die Info habe ich nochmal im title-Attribut vermerkt, so dass der Anwender es beim Positionieren des Cursors lesen kann). Zusätzlich erhält das Feld das id-Attribut (damit ist der DOM-Zugriff einfacher). Die Sucharbeit in der Datenbank wird ansonsten nicht weiter berührt, d. h. wir brauchen eine search.htm-Seite.

Hinter dem img/search.png verbirgt sich eine Suchlupe (darf gerne benutzt werden), die je nach Browser die aktuelle Seitensuche anstößt. Das Durchsuchen der aktellen Seite funktioniert zur Zeit nur im Internet Explorer.

Schritt 3: Javascript-Funktion suchen() für den Internet Explorer (kann in nav_generic.php stehen bzw. in die /htdocs/templates/_javascript/javascript.js eingetragen werden - dort allerdings ohne <script>-Tags):

<script>
var v;var s;var b;
function suchen() {
if (v)
  if (v.findText(document.searchform.searchstring.value) == false){
v.moveToBookmark(b);
alert("Das Dokument wurde durchsucht");
}else{
v.select();
v.scrollIntoView();
v.collapse(false);
}
else {
v=document.body.createTextRange();
b=v.getBookmark();
}
}
</script>

Erläuterungen:

Auf den msdn-Seiten bei MS gibt es zum Durchsuchen ein Skriptbeispiel, das hier angepaßt verwendet wurde.

Zum Durchsuchen wird eine TextRange auf den document.body definiert. Es kann sein, das es etwas ähnliches auch für Gecko-Browser gibt...

Um am Ende der Sucherei wieder von Vorne beginnen zu können, wird zusätzlich eine Bookmark definiert.

Wenn die TextRange exisitiert, kann sie mit findText durchsucht werden; der Suchbegriff wird aus dem Formular-Feld searchstring(.value) gelesen. Das ist praktisch, da man damit beide Sucharten verbinden kann, ohne etwas neu eingeben zu müssen.

Wird was gefunden, dann positioniert select() in Verbindung mit scrollIntoView() darauf; collapse(false) setzt den Positionsmarker ans Ende des gefundenen Textes, so dass die weitere Suche von dort aus starten kann.

Wird nichts mehr gefunden, dann wird wieder per moveToBookmark an den Anfang der TextRange positioniert und ein alert informiert den Benutzer.

© 2005 cptc | Impressum | powered by OpenEngine 1.6