Zum Hauptinhalt springen
Bei Druckerzeugnissen, Werbemitteln oder individuell gefertigten Artikeln liefert nicht der Shop die Daten, sondern der Käufer. Nach der Bestellung lädt er seine Dateien hoch, je Bestellposition eine oder mehrere, und meldet am Ende, dass er fertig ist. Das übernimmt das Upload-Modul, ein eigenes Programm neben dem Shop. Seine Oberfläche entsteht aus genau einem Template, üblicherweise ws_upload.htm. Darin stehen die Platzhalter dieser Seite. Sie folgen demselben Aufbau wie Shoptemplate-Tags, gehören aber zum Upload-Programm und nicht zum Shop.
In diesem Template funktioniert kein einziges Shoptemplate-Tag, also weder PR-, noch BASKET-, noch WS-. Umgekehrt haben die Platzhalter dieser Seite im Shop keine Bedeutung. Die Schreibweise ist dieselbe: ~Name~ für einen Wert, {Name} und {/Name} für einen Bereich, {@Name} und {/@Name} für eine Schleife.

Drei Ansichten in einem Template

Das Upload-Programm zeigt nacheinander drei Ansichten, und alle drei stecken in derselben Datei. Welche erscheint, entscheidet das Programm, das Template liefert nur die Bausteine. Hat eine Bestellung nur eine einzige Position, überspringt das Programm die Liste und zeigt sofort {Item}. Der Bereich {ItemList} erscheint dann gar nicht. Bauen Sie trotzdem beide, denn dieselbe Datei bedient beide Fälle.
Alles, was außerhalb dieser drei Bereiche steht, erscheint auf jeder Ansicht. Das ist der richtige Platz für Kopf- und Fußzeile, für {Msg} und für ~WSUploadScripts~.

Zwei Betriebsarten

Das Upload-Modul arbeitet nicht nur nach einer Bestellung, sondern auch bei Anfragen über das Anfrageformular. Dieser Anfrage-Upload kennt keine Bestellpositionen und damit auch nicht alle Platzhalter.
Rund die Hälfte der Platzhalter ist beim Anfrage-Upload nicht verfügbar. Betroffen sind alle, die eine Bestellung oder eine Position voraussetzen. Die Übersichtstabelle am Seitenende führt das je Platzhalter auf. Wenn Sie beide Betriebsarten mit einem Template bedienen wollen, beschränken Sie sich auf die Platzhalter, die in beiden gelten.

Der Seitenrahmen

Diese Platzhalter stehen frei im Template und beschreiben die Umgebung.
~WSUploadScripts~ ist nicht wahlfrei. Ohne diesen Platzhalter fehlen dem Template die Skripte für Fortschrittsanzeige, Abbruch und die Auswahl des Verwendungszwecks. Setzen Sie ihn einmal, möglichst früh im body.
protocol und hostname gehören in das base-Element im Seitenkopf. Das Referenztemplate verwendet beide genau dort.

Meldungen

Upload-ID oder Auftragsnummer abfragen

Ruft jemand das Upload-Programm ohne Kennung auf, erscheint {UplIdInput}. Der Käufer gibt dort entweder die Upload-ID aus seiner Bestellbestätigung ein oder seine Auftragsnummer.
Das Upload-Programm vergibt je Bestellung eine Upload-ID und je Bestellposition zusätzlich eine Positions-ID. Die Upload-ID bekommt der Käufer, die Positions-ID braucht er nicht zu kennen. Die Namen der beiden Eingabefelder sind fest und heißen UploadId und Ordernumber. Hier gibt es keine _input-Platzhalter wie im Shop, schreiben Sie die Namen direkt ins Template. Mit {OrdNumMode} beschriften Sie die Anzeige passend. Arbeitet der Vorgang über die Auftragsnummer, ist es wenig hilfreich, dem Käufer eine Upload-ID anzuzeigen, die er nirgends wiederfindet.

Die Liste der Bestellpositionen

Hat die Bestellung mehrere Positionen, zeigt {ItemList} die Übersicht. {@PrdData} läuft darin über die Positionen.
{HasFile} beantwortet die Frage für die eine Position im Durchlauf, {HasFiles} weiter unten für die gesamte Bestellung oder die angezeigte Position. Die beiden Namen unterscheiden sich nur im Schluss-s, die Bedeutung ist verschieden.
{PosLocked} greift auch dann, wenn nicht diese Position, sondern die ganze Bestellung abgeschlossen wurde. Das ist gewollt, denn für den Käufer ist das Ergebnis dasselbe. Für die Unterscheidung nehmen Sie zusätzlich {UploadLocked}.

Zurück zur Liste

Beide greifen nur, wenn die Bestellung mehr als eine Position hat. Bei einer einzigen Position gäbe es nichts, wohin der Link führen könnte. ItemListLink ist damit zugleich Wert und Klammerung.

Eine Position mit ihren Dateien

{Item} ist die Detailansicht. Darin steht alles, was eine einzelne Bestellposition betrifft.

Die vorhandenen Dateien

{@Files} läuft über die Dateien, die zu dieser Position schon hochgeladen wurden.
Zum Löschen gehören beide Felder zusammen. Das Auswahlkästchen aus FileMarkBoxName markiert die Datei, und das versteckte Feld aus FileNameName übergibt den dazugehörigen Dateinamen. Lassen Sie eines davon weg, kommt die Auswahl beim Programm nicht an.
{NoFiles} ist dafür gedacht, hinter {HasFiles} zu stehen. Die beiden Bereiche schließen einander aus, {NoFiles} ist also die lesbarere Form der negativen Klammerung von {HasFiles}.

Der Verwendungszweck je Datei

Zu jeder Datei lässt sich hinterlegen, wofür sie gedacht ist, beispielsweise Vorderseite, Rückseite oder Korrekturabzug. Die Auswahlmöglichkeiten stehen in den Unterabschnitten <+FileInfo> des Abschnitts <Upload> in wsupload.config.
Der Unterschied zwischen den beiden Optionslisten ist die Vorbelegung. fileinfoopts steht an einer bereits hochgeladenen Datei und hat deren Verwendungszweck vorausgewählt, uplfileinfoopts steht am Feld für die neue Datei und hat nichts vorausgewählt. Die Umstellung des Verwendungszwecks läuft im Hintergrund, ohne die Seite neu zu laden. Deshalb die Wartegrafik, die über FileInfoProcId angesprochen wird. Die ganze Gruppe ist wahlfrei. Wenn Sie keinen Verwendungszweck brauchen, lassen Sie alle vier Platzhalter weg.

Eine neue Datei hochladen

Der Name des Dateifelds ist fest und lautet uplfile, der des Verwendungszweck-Felds uplfileinfo. Beide gibt es nicht als Platzhalter, schreiben Sie sie direkt ins Template.
uploadUrl gehört zur neueren Fassung des Upload-Moduls, die über ein JavaScript-Plugin hochlädt, und ersetzt dort uplurl. Welche Fassung Ihr Shop verwendet, hängt am eingebundenen Skript und am Aufbau des Formulars. Mischen Sie die beiden nicht.
Das Referenztemplate klammert das Upload-Formular nicht mit {!Web2Print}, sondern mit einem auskommentierten {!Web2PrintX}, das es gar nicht gibt. Bei einer Web-to-Print-Bestellung erscheint dort also sowohl der Hinweis als auch das Formular. Das Beispiel oben setzt die Klammerung richtig.

Die Grenzen

Diese drei Werte sind bei der WEBSALE-Technik hinterlegt und werden mit dem Shopbetreiber vereinbart. Geben Sie sie im Template aus, statt Zahlen hineinzuschreiben, dann stimmt der Text auch nach einer Änderung noch. NewUplLink ist für den Fehlerfall gedacht, beispielsweise für den Hinweis bei überschrittener Dateigröße. Er führt zurück auf die Upload-Seite derselben Position.

Abgewiesene Dateien

Das Upload-Programm prüft jede Datei auf ihren MIME-Typ und auf Schadsoftware. Schlägt eine Prüfung an, erscheint der passende Bereich.
Beide Bereiche erscheinen nur, wenn die jeweilige Prüfung in der Konfiguration als Fehler eingestuft ist. Ist sie nur zur Beobachtung eingeschaltet, schlägt sie zwar an, der Bereich bleibt aber leer. Das erklärt den Fall, dass eine Datei abgelehnt wird, ohne dass das Template etwas anzeigt.Das mitgelieferte Referenztemplate enthält weder {MimeTypeMismatch} noch {VirusDetected}. Wer es unverändert übernimmt, hat für diese beiden Fälle keine Anzeige. Ergänzen Sie beide Bereiche.

Abschließen und wieder aufheben

Am Ende bestätigt der Käufer, dass er alle Dateien geliefert hat. Danach nimmt das Programm nichts mehr an. Das geht wahlweise für die ganze Bestellung oder je Position.
{AllPosLock} und {SinglePosLock} werden nicht vom Template entschieden, sondern von der Betriebsart, die in der Konfiguration des Moduls hinterlegt ist. Es gibt drei Möglichkeiten: Abschluss nur für die ganze Bestellung, nur je Position, oder beides zugleich. Die Vorgabe ist der Abschluss für die ganze Bestellung. Bauen Sie beide Bereiche ein, dann arbeitet das Template in jeder Betriebsart.
Die Verschachtelung im Beispiel ist nicht geschmückt, sondern nötig. Der Abschlussknopf gehört nur dann auf die Seite, wenn Dateien vorliegen, der Upload noch nicht gesperrt ist und zu jeder Position etwas da ist. Fehlt eine der drei Klammerungen, bietet die Seite einen Knopf an, der entweder nichts bewirkt oder zu früh sperrt.

Die Adressen der Formulare

poslockurl bezieht sich innerhalb der Positionsschleife auf die Position im Durchlauf und außerhalb auf die angezeigte Position. Deshalb funktioniert derselbe Platzhalter an beiden Stellen. lockurl und ordlockurl tun dasselbe, sind aber für verschiedene Ansichten gedacht. Nehmen Sie in {ItemList} das eine und in {Item} das andere, so wie es die Spalte oben angibt.

Den Abschluss aufheben

Beide Bereiche greifen nur, wenn das Upload-Programm mit dem Parameter unlockallow=Y aufgerufen wurde und der jeweilige Abschluss tatsächlich vorliegt. Ohne diesen Parameter bleiben sie stumm, auch wenn alles andere passt.
Das Aufheben ist für den Fall gedacht, dass der Käufer nachträglich einen Fehler in seinen Daten findet und die Produktion noch nicht angelaufen ist.

Das Protokoll

Zu jedem Vorgang führt das Programm ein Protokoll, das sich im Template ausgeben lässt.
Type ist bereits ein lesbarer Text wie “Datei hochgeladen” oder “Datei gelöscht”, kein technischer Code. FileName steht sowohl in der Dateischleife als auch in der Protokollschleife und meint jeweils die Datei des aktuellen Durchlaufs. Das ist der einzige Platzhalter, den sich zwei Schleifen teilen.

Die Platzhalter im Überblick

Die Spalte “Steht in” nennt den Bereich oder die Schleife, innerhalb derer der Platzhalter stehen muss. “frei” bedeutet an beliebiger Stelle im Template. Die Spalte “Anfrage-Upload” sagt, ob der Platzhalter auch beim Upload aus dem Anfrageformular heraus zur Verfügung steht.

Weitere Platzhalter im Referenztemplate

Das mitgelieferte Template verwendet drei weitere Platzhalter. Diese drei brauchen Sie nur, wenn Sie Fortschrittsanzeige und Abbruch im Template nachbauen. Das Referenztemplate zeigt, wie sie zusammenspielen. Für ein schlichtes Upload-Formular reichen die Platzhalter aus der Übersicht oben.

Verwandte Themen