Nachdem ich mit meinem Blog auf Jekyllumgestiegen bin, habe ich zunächst auf eine Suchfunktion verzichtet. Da Jekyll statische HTML-Seiten erzeugt, werden für die Suche oft externe Dienste wie die Googles Custom Search, Tapir oder indexthank empfohlen. Letzterer Anbieter hat sein Angebot mittlerweile bereits eingestellt und verweist auf der Homepage auf Alternativen. Die Abhängigkeit von einem solchen Dienst hat mich daher eher abgeschreckt. Gerade weil eine Suchfunktion meist keine ressourcenschonende Sache ist, ist eine lange Lebensdauer dieser Suchdienste keine Selbstverständlichkeit. Auch erschien es mir für ein paar zig HTML-Seiten ein ziemlicher Overkill zu sein. ;)
Jetzt besitzt das Blog eine kleine Javascript/jQuery-getriebene Suche (oben rechts!) - reicht meiner Meinung nach völlig und ist mit einem einfachen Ajax-Request / dem Filtern des RSS-Feeds mit wenig Code einsatzbereit.
Eigene Suchfunktion mit jQuery
Um mich nicht mit fremden Federn zu schmücken: Die Idee für die jQuery-Suchfunktion stammt von hier. Ich habe den Code leicht angepasst, die wesentliche Funktionsweise bleibt aber die selbe: Der RSS-Feed (der eine einfache XML-Datei ist), wird mit einem $ajax-Call geladen und mit Query und javascript in einem Array gespeichert. Dessen Einträge werden dann mit einem einfachen Regex auf die Suchbegriffe geprüft und bei Treffern in ein anderes Array gelegt. Das Treffer-Array kann dann als HTML-Code ausgegeben werden. Damit auch Suchadressen direkt in den Browser eingegeben werden können, wird jQuery BBQ verwendet, die einfache Benutzung von “Hash-Adressen” (z.B. ganz-sicher.net/blog/#search=test) ermöglicht.
HTML-Code
Da die Suche nur mit JavaScript nutzbar ist, wird Suchfeld sowie Ergebnisbereich (#searchresults) per Default nicht angezeigt und erst mit JavaScript sichtbar gemacht.
CSS-Code
search.js Code
Die search.js enthält den die wichtigsten Funktionen für die Suche, im Einzelnen sind das:
* ein jQuery-Eventhandler, der beim Abschicken (Eingabetaste) einer Suchanfrage die Browseradresse ändert
* eine jQuery .bind()-Funktion, die daraufhin aufgerufen wird, den Feed (und die Einträge) lädt und dann findEntries() aufruft
* eine findEntries()-Funktion, die Treffer in ein Array legt und den Ergebnis-HTML-Code erzeugt
* eine (optionale) simpleDate()-Funktion, die das Jekyll-Datum in ein lesbares Datum umwandelt
jQuery-Eventhandler für das Suchfeld
Die findEntries()-Funktion
jQuery .bind()-Funktion
Demo
Wie bereits geschrieben, kann diese Suchfunktion nach Herzenslust oben rechts getestet werden. Wenn ihr die Suche bei eurem eigenen XML-Feed ausprobieren möchtet, solltet ihr darauf achten, dass Sonderzeichen richtig escaped werden (z.B. & statt &), der ajax-Request schlägt sonst z.B. beim Chrome fehl.
Falls ihr weitere Fragen dazu habt, antworte ich gerne im Kommentarbereich, auch für Verbesserungsvorschläge bin ich immer offen. ;)