Likes und die Like-Datenbank


Warum Likes?

In den bisherigen Darstellungen werden Bilddateien erst nach einer Anforderung des Surferin geladen (mit Ausnahme der Kalenderansicht). In der Pinwand-Ansicht werden dagegen sofort alle Bilddateien geladen. Ich kann anhand der Bilder-Anforderungen nicht erkennen, welche Bilddateien oder welche Bilderabschnitte beliebt sind.

Mit der Einführung der Pinwand-Darstellung verliert die bisherige Auswertung der Bilder-Anforderungen ihre Aussagekraft. Die Websurferin kann explizit sagen: „Das gefällt mir”, indem sie einen „Knopf” drückt. Der Knopf ruft ein CGI-Skript (like.cgs (Quelltext)) auf, das ihren „Like” in eine Datenbank einträgt. Sie kann einstellen, dass sie zur Bestätigung ein Klangsignal bekommt.

Die Datenbank einrichten

Es gibt eine Like-Datenbank bei meinem Web-Hoster und eine Like-Datenbank in meiner lokalen Umgebung auf einer „externen” Festplatte, die alle Daten im Zusammenhang mit meiner Kleider-Website enthält und die ich ohne großen Aufwand an verschiedenen Rechnern nutzen kann.

Der Web-Hoster gibt den Datenbank-Namen und den Login-Namen vor, das Kennwort kann ich frei wählen. Ich richte in der lokalen Umgebung eine Datenbank mit demselben Namen und denselben Zugangsdaten ein.

Lokal kann ich SQL-Skripte ausführen. Auf der Web-Seite ist es dagegen einfacher, die Datenbank mit Perl-DBI-Skripten zu bearbeiten.

Das Skript like_db.sql legt die lokale Datenbank auf der externen Festplatte an. Das Skript like_user.sql legt den Zugang zur Datenbank an. Dieses Skript nutze ich auf jedem Rechner, an dem ich die externe Festplatte nutze. Die SQL-Skripte enthalten Platzhalter für vertrauliche Daten.

Die Datenbank-Tabellen lege ich mit dem Perl-CGI-Skript like_tables.cgs (Quelltext) an, das ich sowohl lokal als auch auf der Web-Seite nutzen kann. Dem entspricht das SQL-Skript like_tables.sql.

Geschütztes Verzeichnis

Das Skript, das die Datenbank-Tabellen anlegt, darf nicht frei zugänglich sein. Der Zugriff auf dieses Skript muss geschützt werden. Ich lege das Skript in das Verzeichnis DOCROOT/bin-cgi/private. Wie kann ich den Zugriff auf dieses Verzeichnis schützen?

Zur Apache-Distribution gehört ein „Howto” unter dem Pfad DOCUMENT_ROOT/manual/en/howto/auth.html. Ich kann einen Login-Namen und ein Kennwort frei wählen. Das Programm htpasswd der Apache-Distribution erstellt die nötige Kennwort-Datei DOCROOT/cgi-bin/private/.htpasswd

Die Kennwort-Datei sollte zwar nicht im DOCROOT-Verzeichnis liegen, aber es entspricht den Möglichkeiten, die mein Web-Hoster bietet.

Den Zugriff auf die Verzeichnisse DOCROOT/admin und DOCROOT/cgi-bin/private schränke ich durch .htaccess-Dateien (admin.htaccess und cgi.htaccess) ein, s. pinw_setup (Quelltext).

Präsentation der Daten

CGI-Skripte liefern die Ergebnisse einer Datenbankabfrage in einem XML-Format, das den Namensraum http://herbaer.de/xmlns/20200528/d (d.rng) verwendet. Ergänzend dazu enthält der Namensraum http://herbaer.de/xmlns/20200620/ph (ph.rng) Elemente und Attribute, die Platzhalter für die Daten definieren. Die Transformation values.xslt ersetzt die Platzhalter durch die Werte.

Die Datei ph.example.xhtml ist ein Beispiel für die Verwendung der Platzhalter. Dazu passen die Daten aus dem Dokument d.example.xml.

Das Beispiel-Dokument like_count.xhtml enthält Platzhalter, deren Werte das Skript like_count.cgs (Quelltext) liefert.