NAME

Quiq::Web::Navigation - Webseiten-Navigation

BASE CLASS

Quiq::Hash

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.

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:

-1

Als Rückkehrseite wird die Vorgängerseite, also die rufende Seite, eingetragen. Diese Direktive wird in den abgehenden Links der Seite angegeben, wenn die aktuelle Seite für die Folgeseite(n) die Rückkehrseite darstellt.

x

Der Eintrag für die Rückkehrseite wird gelöscht.

Ü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

(String) $defaultUrl

URL, der geliefert wird, wenn kein Rückkehr-URL definiert ist.

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

(String) $defaultUrl

URL, der genutzt wird, wenn kein Rückkehr-URL definiert ist.

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

(String) $defaultUrl

URL, der geliefert wird, wenn kein Vorgänger-URL definiert ist.

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

(String) $defaultUrl

URL, der genutzt wird, wenn kein Vorgänger-URL definiert ist.

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.