Zum Hauptinhalt springen
Jedes Formular, mit dem ein Besucher etwas an den Shop schickt, braucht ein Ziel. Dieses Ziel liefern die FORM-Tags. Für jede Funktion des Shopsystems gibt es genau ein Tag, und es steht immer im action-Attribut des form-Elements. Ein FORM-Tag ist dabei mehr als eine Adresse. Es tut zwei Dinge gleichzeitig, und das zweite ist der Grund, warum es genau an dieser Stelle stehen muss. Wegweiser: Template-Sprache im Überblick · Referenz: Tag-Arten

Wie ein FORM-Tag arbeitet

Erstens gibt das Tag an der Stelle, an der es steht, die Ziel-Adresse aus. Diese Adresse enthält bereits den Zustand, in den das Shopsystem nach dem Absenden wechseln soll. Zweitens merkt sich das Shopsystem, dass es beim nächsten > im Template zusätzliche Felder einfügen muss. Beim >, das das form-Element abschließt, hängt es deshalb versteckte Eingabefelder an:
  • Ctx mit dem Sitzungskontext, also dem, was das Shopsystem über den aktuellen Besucher und seinen Stand im Shop weiß
  • bei allen sicherheitsrelevanten Formularen zusätzlich ein CSRF-Token
  • je nach Formular weitere Felder, beispielsweise die Nummer der bearbeiteten Lieferadresse bei FORM-DelivAddrManage
Im fertigen HTML sieht das so aus:
Aus diesem Einfügemechanismus folgt die wichtigste Regel für alle FORM-Tags: Das Tag gehört in das action-Attribut seines eigenen form-Elements und nirgendwo sonst. Steht es in einem a-Element, in einem JavaScript-Block oder in einer Variablen, landen die versteckten Felder hinter dem nächstbesten > und damit an einer Stelle, an der sie nichts bewirken. Das Formular wird dann ohne Sitzungskontext abgeschickt, und der Besucher landet auf der Startseite oder bekommt eine Fehlermeldung.Die versteckten Felder lassen sich nicht von Hand nachbauen. Sowohl der Kontext als auch das CSRF-Token werden pro Seitenaufruf erzeugt. Ein Formular ohne gültiges Token weist das Shopsystem ab.
Die Schreibweise des Tagnamens ist ohne Bedeutung. ~FORM-Basket~ und ~Form-Basket~ liefern dasselbe. Einheitlich zu schreiben hilft trotzdem beim Durchsuchen der Templates.

Das Grundmuster

Alle FORM-Tags folgen demselben Muster.
Geben Sie method="post" an. Die Formulare des Shopsystems übertragen teils umfangreiche Daten, und der Sitzungskontext im Feld Ctx ist für eine Adresszeile zu lang.
Ein FORM-Tag ist immer ein Einzel-Tag. Als Klammerung oder als Schleife lässt sich keines der Tags verwenden.

Bestellablauf

FORM-AltCurrency brauchen Sie nur, wenn die Währungsauswahl außerhalb der Formulare FORM-Product und FORM-Basket steht. Liegt sie innerhalb, wird sie mit deren Formular abgeschickt. FORM-DelivAddr entfällt, wenn Sie Rechnungs- und Lieferadresse in einem Schritt auf einer Seite abfragen. Dann trägt FORM-Addr beide Adressblöcke.
FORM-AddrManage fällt außerhalb der Kundenkonto-Seite auf dasselbe Ziel zurück wie FORM-Addr. Die beiden Tags sind deshalb nur im Kundenkonto wirklich verschieden. Verwenden Sie trotzdem das jeweils passende Tag, damit die Absicht im Template erkennbar bleibt.

Kundenkonto und Kundendaten

Die drei Suchformulare FORM-DelivAddrSearch, FORM-BankSearch und FORM-CCardSearch müssen innerhalb der jeweiligen Übersichts-Klammerung stehen. Außerhalb fehlt dem Shopsystem der Bezug darauf, in welchem Datenbestand gesucht werden soll.

Anmeldung und Passwort

Bei FORM-ReauthUser findet anders als bei den übrigen Anmeldeformularen keine Prüfung der E-Mail-Adresse statt. Der Besucher gibt nur sein Passwort erneut ein, weil er bereits erkannt ist.
Alle Anmeldeformulare führen auf denselben Zustand des Shopsystems und unterscheiden sich nur durch einen internen Befehlscode. Ein vertauschtes Tag erzeugt deshalb keine Fehlermeldung, sondern führt eine andere Funktion aus. Prüfen Sie beim Aufbau der Loginseite jedes Formular einzeln durch.

Katalog, Suche und Produkt

FORM-ProductSort wählt sein Ziel selbst, je nachdem ob es auf einer Kategorieseite, auf der Merkliste oder auf einem anderen Template steht. Sie müssen dafür nichts angeben.

Formulare für beliebige Templates

Zwei Tags nehmen das Ziel als Parameter entgegen, statt es fest vorzugeben. Sie brauchen sie, wenn ein externes Formularprogramm über WS-ExternInclude eingebunden ist und nach dem Absenden wieder ein bestimmtes Shop-Template erscheinen soll. Der Parameter ist das Template, in dem das WS-ExternInclude-Tag steht, angegeben mit seinem Pfad ab dem Templateverzeichnis. Auf dem Shop-Template:
Auf dem Template des eingebundenen Formularprogramms:
Neben Ctx fügt das Shopsystem hier ein weiteres verstecktes Feld tpl mit dem Templatenamen ein.
Verwenden Sie FORM-SSLTemplate(). Die unverschlüsselte Variante FORM-Template() stammt aus einer Zeit, in der Shops nur teilweise über HTTPS liefen. Formulardaten gehören heute ausnahmslos verschlüsselt übertragen.

Nicht beschriebene Formulare

Die Tag-Tabelle des Shopsystems führt 68 FORM-Tags. Die folgenden 25 davon sind vorhanden.
Die Zwecke in dieser Tabelle sind aus dem Zustand abgeleitet, auf den das jeweilige Tag führt. Bevor eines dieser Formulare in einen Wegweiser aufgenommen wird, sollte die Entwicklung das erwartete Zusammenspiel mit den übrigen Tags bestätigen.FORM-CCardManage ist im Shopsystem angelegt, gibt aber nichts aus. Ein Formular, das dieses Tag im action-Attribut trägt, schickt an die aufrufende Adresse ohne Sitzungskontext. Für die Kreditkartenverwaltung gibt es kein funktionierendes FORM-Tag.

Die Tags im Überblick

Alle FORM-Tags dieser Seite sind ausschließlich Einzel-Tags. Weder Bereichs-Tag noch negatives Bereichs-Tag noch Schleifen-Tag werden unterstützt. Ein FORM-Tag in einer Klammerung bleibt wirkungslos.

Verwandte Themen