Search As You Type – Mit PHP und Vue.js

Search As You Type, sprich, Suchen während man den Suchbegriff am eingeben ist, gehört heute zu jeder guten Anwendung dazu. Dies kann extrem praktisch sein, wenn man z.B. eine Kontaktlisten durchsucht. So muss man oftmals nicht den Suchbegriff vollständig eingeben, sondern in vielen Fällen taucht der gewünschte Eintrag nach ein paar Buchstaben bereits auf.

Mit PHP  alleine lässt sich dies leider nicht realisieren. Mit Hilfe von Vue.js ist dies aber schnell und einfach umgesetzt. Dieser Artikel zeigt auch ein minimales Beispiel, wie so eine Search As You Type Suche mit PHP und Vue.js realisiert werden kann.

Die fertige Anwendung sieht dann Live wie folgt aus:

Was ist Vue.js?

Vue.js ist ein JavaScript-Framework, welches das Erstellen moderner Webanwendungen ermöglicht. Es ist gerade bei Einsteigern sehr beliebt, da es vergleichsweise einfach zu verwenden ist und man schnell, erste Erfolge hat.

Mit Vue.js lassen sich sowohl komplette Web-Anwendungen, so genannte Single-Page-Webanwendungen,  erstellen, als auch nur einzelne Komponenten. Dies macht Vue.js besonders beliebt für die Integration in bestehende Web-Anwendungen. So kann man einzelne Komponenten einer großen Anwendung, wie z.B. für eine Trading-Platform wie bitcoin code, interaktiv gestalten. Beispielsweise tauscht man das alte Suchfeld in einer großen Anwendung durch ein interaktives, search as you type, Suchfeld aus.

Eine allgemeine Einführung in Vue.js findet ihr in der Dokumentation: Vue.js - Getting started.

Architektur

Unsere Beispiel-Anwendung besteht aus drei Komponenten:

  1. Eine MySQL-Tabelle, die Daten hinterlegt hat. In unserem Beispiel verwenden wir eine Tabelle mit Film-Titeln.
  2. Backend: Damit die MySQL-Tabelle durchsucht wird, definieren wir mit PHP ein einfaches Such-Backend. Dieses nimmt einen Suchbegriff entgegen und liefert die passenden Ergebnisse zurück.
  3. Frontend: Das Frontend erstellen wir mit Vue.js, damit es direkt im Browser vom Besucher ausgeführt werden kann.

MySQL-Datenbank

Zuerst erstellen wir eine einfache MySQL-Tabelle, die wir durchsuchen wollen. In diesem Beispiel nehmen wir eine Filme-Tabelle, die bloß die Spalten id und titel hat:

In diese Tabelle fügen wir nun einige Filmtitel ein:

Komplexere Tabellen sind natürlich ebenfalls problemlos möglich. Wie ihr die Tabelle erstellen könnt, ist im Artikel phpMyAdmin genauer erklärt.

PHP Backend

Der Browser / Vue.js kann nicht direkt auf die Datenbank zugreifen. Stattdessen brauchen wir ein Backend, dass eine Verbindung zur Datenbank aufbauen kann und die gewünschten Ergebnisse zurück liefert. Hierzu verwenden wir PHP.

Unsere backend.php sieht wie folgt aus:

 

Zuerst definieren wir mit header() , dass das Script Daten im JSON zurück gibt. Anschließend wird die Datenbank durchsucht nach Titeln die den Suchbegriff $query enthalten.

Die gesammelten Daten kodieren wir dann in PHP mittels json_encode()  und geben diese aus. Das Backend könnt ihr direkt im Browser aufrufen, z.B. in dem ihr backend.php?query=Star als URL aufruft.

Vue.js Frontend

Folgende HTML-Datei verwenden wir für die interaktive Suche:

Zuerst laden wir die Vue.js-JavaScript-Datei. Damit wir in JavaScript einen HTTP-Aufruf an unser PHP-Backend senden können, laden wir ebenfalls noch axios.

 

Unser HTML sieht dann entsprechend einfach aus:

Das Input-Feld binden wir mittels Form Input Bindings an die Vue-Variable query. Für  die Anzeige der Suchergebnisse nutzen wir eine Vue-for-Schleife.

 

Der dazu gehörige JavaScript-Code ist der folgende:

Hier definieren wir zuerst eine neue Vue-Anwendung. Als Daten-Elemente haben wir unseren query und ein results-Array.

Wir verwenden einen Data watcher der reagiert, sobald sich der Wert von query verändert. In dem fall wird mittels axios ein HTTP-Aufruf an unser PHP-Backend gesendet und der Rückgabewert wird in dem results-Array gespeichert.

 

Das war auch schon alles. Sobald ihr mit dem Tippen beginnt, wird gesucht und die Ergebnisse werden dargestellt.

 

Autor:
Zurück zur Übersicht aller Beiträge