NAME
Quiq::Web::Navigation - Webseiten-Navigation
BASE CLASS
DESCRIPTION
Die Klasse erstellt eine Seitenhistorie auf Basis des HTTP-Headers Referer:
und speichert diese in einer Navigationsdatenbank. Dadurch wird eine Navigation zwischen Webseiten möglich, insbesondere eine Zurücknavigation zu einer zuvor festgelegten Rückkehrseite.
Navigationsdatenbank
Die Navigationssdatenbanken aller Sitzungen werden in einem ausgezeichneten Verzeichnis DIR gespeichert. In jedem Unterverzeichnis SID befindet sich die Navigationsdatenbank zu einer Sitzung. DIR und SID werden beim Konstruktoraufruf angegeben.
DIR/SID/ Verzeichnis zu einer Sitzung
DIR/SID/rid aktuelle Request-Id
DIR/SID/referer.db Request-Ids zu URLs der Sitzung
DIR/SID/call.db Seitenaufrufe der Sitzung
DIR/nosession.log Log der sitzungslosen Zugriffe
Folgende Datenbankdateien werden von der Klasse sitzungsbezogen geschrieben und gelesen. Alle Dateien werden von der Klasse automatisch angelegt, wenn sie benötigt werden.
- rid
-
Datei mit einer einzigen Zeile, die die aktuelle Request-Id enthält. Die Datei stellt den Request-Zähler für die Sitzung dar. Die Zählung beginnt mit 1. Ferner findet über dieser Datei die Synchronisation von parallel verlaufenden Schreib- und Leseoperationen statt. Sie wird vor Schreiboperationen auf einer oder mehreren Datenbankdateien mit einem Exklusiv-Lock belegt und bei Leseoperationen mit einem Shared-Lock.
- referer.db
-
Hash-Datei, die Request-Ids zu Referer-URLs speichert. Über diese Zuordnung stellt die Klasse ohne weitere Information von außen die Aufrufreihenfolge her. Schlüssel der Datei ist der URL des Aufrufs.
referer | rid referer : Referer-URL des Aufrufs ------- rid : Request-Id des jüngsten Aufrufs des betreffenden URL
- call.db
-
Hash-Datei, in der die Aufrufe protokolliert werden. Schlüssel ist die Request-Id des Aufrufs.
rid | url \0 rrid \0 brid rid : Request-Id des aktuellen Aufrufs ------- url : URL des Aufrufs in Querystring-Kodierung rrid : Request-Id der rufenden Seite brid : Request-Id der Rückkehrseite
Die Request-Id der Rückkehrseite wird automatisch von Request zu Request weiter gereicht.
Direktiven
Die Klasse reserviert folgende Parameternamen, die vom Konstruktor als Direktiven zur Verwaltung der Sitzungsdaten interpretiert werden. Diese werden bei einem Seitenübergang dem URL der Zielseite optional hinzugefügt.
-
Teilt dem Navigation-Konstruktor der Folgeseite die Vorgängerseite mit. Diese Angabe ist normalerweise nicht nötig, da die Vorgängerseite automatisch durch Auswertung Referer-Headers ermittelt wird. Es gibt aber exotische Situtionen, in denen dies nicht oder nicht portabel funktioniert. Dies ist evtl. beim Übergang von einer Seite zu einem Popup-Menü und beim Übergang vom Popup-Menü zur Folgeseite der Fall.
-
Teilt dem Navigation-Konstruktor der Folgeseite mit, dass die Seite mit der Request-Id rid als Rückkehrseite gespeichert werden soll. Die Request-Id der Rückkehrseite wird von der Klasse automatisch von Aufruf zu Aufruf weitergereicht, bis sie durch eine neue Setzung überschrieben wird. Anstelle einer numerischen Request-Id können folgende symbolischen Werte angegeben werden:
-
Übermittelt an die Folgeseite (die typischerweise eine Rückkehrseite ist) einen Text. Dieser Parameter wird wie alle nav*-Parameter automatisch aus dem URL, der in Navigationshistorie (call.db) gespeichert wird entfernt, so dass dieser bei der erneuten Rückkehr nicht noch einmal verwendet wird.
METHODS
Konstruktor
new() - Instantiiere Navigationsobjekt
Synopsis
$nav = $class->new($dir,$sid,$obj);
Arguments
- $dir
-
Verzeichnis, in dem die Daten zur Session-Id $sid gespeichert werden.
- $sid
-
Id für der Session.
- $obj
-
Objekt mit Informationen zum aktuellen Aufruf. Im Falle von Mojolicious übergeben wir das Controller-Objekt.
Description
Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück.
Attribute
backUrl() - URL der Rückkehrseite
Synopsis
$url = $nav->backUrl;
$url = $nav->backUrl($defaultUrl);
Arguments
Returns
(String) URL
Description
Liefere den URL der Rückkehrseite als Zeichenkette. Ist keine Rückkehrseite definiert, liefere undef.
backUrlObj() - URL-Objekt der Rückkehrseite
Synopsis
$urlObj = $nav->backUrlObj;
$urlObj = $nav->backUrlObj($defaultUrl);
Arguments
Returns
(Object) URL-Objekt (siehe Quiq::UrlObj)
Description
Liefere den URL der Rückkehrseite als Objekt.
backWithParameters() - URL der Rückkehrseite mit zusätzlichen Parametern
Synopsis
$url = $nav->backWithParameters(@keyVal);
Returns
(String) URL-String
Description
Liefere den URL der Rückkehrseite mit den zusätzlichen Parametern @keyVal.
Example
my $backUrl = $nav->backWithParameters(
navMsg => 'FEHLER: Keine Datei hochgeladen',
);
$self->redirect_to($backUrl);
prevUrl() - URL der Vorgängerseite
Synopsis
$url = $nav->prevUrl;
$url = $nav->prevUrl($defaultUrl);
Arguments
Returns
(String) URL
Description
Liefere den URL der Vorgängerseite als Zeichenkette. Ist keine Vorgängerseite definiert, liefere undef.
prevUrlObj() - URL-Objekt der Vorgängerseite
Synopsis
$urlObj = $nav->prevUrlObj;
$urlObj = $nav->prevUrlObj($defaultUrl);
Arguments
Returns
(Object) URL-Objekt (siehe Quiq::UrlObj)
Description
Liefere den URL der Vorgängerseite als Objekt.
prevWithParameters() - URL der Vorgängerseite mit zusätzlichen Parametern
Synopsis
$url = $nav->prevWithParameters(@keyVal);
Returns
(String) URL-String
Description
Liefere den URL der Vorgängerseite mit den zusätzlichen Parametern @keyVal.
Example
my $prevUrl = $nav->prevWithParameters(
navMsg => 'FEHLER: Datum ist Pflichtfeld',
);
$self->redirect_to($prevUrl);
VERSION
1.222
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2024 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.