Wer ein PowerWeb-Paket A oder S bei Strato hat, kann seit Oktober 2004 nun auch eigene Perl-Skripte nutzen (und PHP und SSI und ab PowerWeb S auch SSL und eine MySQL Datenbank). Was also liegt nun näher, als sich das Original-Shopping-Skript zu besorgen, zu verbessern und zu nutzen, völlig unabhängig von Strato?
Gesagt, getan, und hier die Vorgehensweise dazu, mit der Sie Ihre bereits vorhandenen Shop-Dateien auf die neue (und bessere) Situation anpassen können. Vielleicht aber finden Sie das hier Beschriebene so gut, daß Sie dieses Shop-Skript nun doch für Ihre (Strato-)Domain einsetzen wollen? Wer weiß - das müssen Sie entscheiden!
Das Original-Skript wurde in der c't Heft 15 im Jahre 1997, S.290, vorgestellt.
Download der benötigten (Original-)Dateien als .zip-Datei Zip-Datei (ca. 14 KB).
Link zum dazugehörenden Artikel: http://www.heise.de/ct/97/15/290 - mittlerweile kostenpflichtig.
Bitte bei Bedarf melden!
Nun denn, wohlgemut ans Werk.
Die folgenden Ausführungen basieren auf der Annahme, daß Sie die Datei shopping.cgi
aus der oben angegebenen .zip-Datei in ein Verzeichnis /cgi-bin/ auf Ihrem PC entpackt haben, und
alle anderen Dateien bereits auf Ihrem PC in einem Verzeichnis /shop/ haben (als Bestandsnutzer des
Strato-Skriptes). Besser allerdings ist es, die anderen Dateien der .zip-Datei in ein neues
Verzeichnis /testshop/ zu entpacken.
Im Folgenden gehe ich nicht auf Veränderungen der Shop-Dateien ein, die Sie gemacht
haben, um den Euro-Workaround einzubauen, den ich in dieser
Beschreibung empfohlen habe; der Ausgangspunkt sind die Originaldateien, wie sie von der c't
und (fast identisch) von Strato geliefert werden.
Als Editor empfehle ich den Freeware HTML-Editor Phase 5.3 von Hans-Dieter Berretz, der unter www.ftp-uploader.de heruntergeladen werden
kann. Besonders geeignet für die im Folgenden beschriebenen Aufgaben am HTML- und Perl-Code
ist die Funktion "Dateiübergreifend Suchen und Ersetzen (F11)" unter Tools.
$shop_location = "/cgi-bin/ct_neu"; #NEU: Verzeichnis des Shops, ausgehend vom Root Verzeichnis der Domain, z.B. /shop $datatab = $ENV{DOCUMENT_ROOT} . $shop_location . "/items.csv"; #statt $datatab = "items.csv"; $hoptplfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/hopper_tpl.html"; #statt $hoptplfile = "hopper_tpl.html"; $hoprowfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/hopper_row.html"; #statt $hoprowfile = "hopper_row.html"; $ordtplfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/order_tpl.html"; #statt $ordtplfile = "order_tpl.html"; $ordrowfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/order_row.html"; #statt $ordrowfile = "order_row.html";Nun müssen noch die Verzeichnisse für danke.html und persdat.html angepasst werden: Script und Dateien SUCHEN!!!! ... ... Nach diesen Änderungen sieht das Script an den geänderten Stellen in etwa so aus:
$argumente = $ENV{QUERY_STRING}; #statt $argumente = $ARGV[0]; $adressat = "test\@hillschmidt.de"; #statt $adressat = "a.schroeter\@hermes.de"; $ordrcookie = "SHOP_BESTELLUNG"; #statt $ordrcookie = "SCHLECKI_BESTELLUNG"; $usercookie = "SHOP_BESUCHER"; #statt $usercookie = "SCHLECKI_BESUCHER"; $shop_location = "/shop"; #NEU: Verzeichnis des Shops, ausgehend von Root Verzeichnis, z.B. /shop $datatab = $ENV{DOCUMENT_ROOT} . $shop_location . "/items.csv"; #statt $datatab = "items.csv"; $hoptplfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/hopper_tpl.html"; #statt $hoptplfile = "hopper_tpl.html"; $hoprowfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/hopper_row.html"; #statt $hoprowfile = "hopper_row.html"; $ordtplfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/order_tpl.html"; #statt $ordtplfile = "order_tpl.html"; $ordrowfile = $ENV{DOCUMENT_ROOT} . $shop_location . "/order_row.html"; #statt $ordrowfile = "order_row.html"; ... @parameter = split(/=/,$argumente); #statt @parameter = split(/:/,$argumente);Ab sofort ist Ihr Shop funktionsfähig. Allerdings wird immer noch mit DM fakturiert, es fehlen noch ein vernünftiger eMail-Absender der Bestellung und ein vernünftiges "Betreff:", aber auch das kriegen wir schnell hin:
open(MAIL,"|mail $email,$adressat"); print MAIL "BESTELLUNG\n\n"; print MAIL $name1 . "\n"; print MAIL $addr1 . "\n"; print MAIL $addr2 . "\n"; print MAIL $email . "\n"; print MAIL "bestellt\n\n"; print MAIL $mailstring; close(MAIL);Daraus machen wir
open(MAIL,"|/usr/lib/sendmail -t ") or die "Cannot open mail: $!";; print MAIL "To: " . $adressat . "\n"; print MAIL "From: " . $versender . "\n"; print MAIL "Subject: Bestellung von " . $name1 . "\n"; print MAIL "BESTELLUNG\n\n"; print MAIL $name1 . "\n"; print MAIL $addr1 . "\n"; print MAIL $addr2 . "\n"; print MAIL $email . "\n\n"; print MAIL "bestellt\n\n"; print MAIL $mailstring . "\n\n"; close(MAIL);Mit einer Zeile mehr Bestellung an den Besteller:
open(MAIL,"|/usr/lib/sendmail -t ") or die "Cannot open mail: $!";; print MAIL "To: " . $adressat . "\n"; print MAIL "Cc: " . $email . "\n"; print MAIL "From: " . $versender . "\n"; print MAIL "Subject: Bestellung von " . $name1 . "\n"; print MAIL "BESTELLUNG\n\n"; print MAIL $name1 . "\n"; print MAIL $addr1 . "\n"; print MAIL $addr2 . "\n"; print MAIL $email . "\n\n"; print MAIL "bestellt\n\n"; print MAIL $mailstring . "\n\n"; close(MAIL);
Einen Vorteil jedoch darf man nie vergessen: ist Strato nicht verfügbar, sind es auch nicht die Skripte. Doch umgekehrt kann Frust entstehen: da ist Strato on-line, aber das verlinkte Skript einer anderen Site nicht. Beispiele hat man vielleicht schon selbst beim Surfen erlebt: Gästebücher, die nicht verfügbar sind oder on-line Shops, die temporär nicht erreichbar sind (das gilt auch für kostenlose Strato-Shops, oder ???)
Wenn Sie mit cgi-Skripten von Strato arbeiten, so sollten Sie zunächst die Anleitungen dazu
genau lesen und befolgen. Die Links sind: http://www.strato.de/full/service/kundenservice.html bzw. direkt, ohne Login in Ihren
Servicebereich, http://www.strato.de/service/allgemein/cgi/.
Wenn Sie Probleme haben, schauen Sie doch erst mal unter http://stratofaq.ig4.de/ nach. Auch ein Blick ins Forum unter http://www.strato-forum.de kann nie schaden.
Eine gute non-Strato-Unterstützung für viele Strato-Skripte bietet http://www.cgisupport.de/.
Und wenn das Problem immer noch nicht gelöst ist, oder Sie nicht suchen wollen, oder aus
welchen Gründen auch immer: Sie können ja auch ein eMail an den Support aus Ihrem
Kundenbereich schicken....
Wenn dann alles nichts hilft, bleibt dann nur noch die Selbsthilfe.
Äh ???
JA, Sie müssen unter Umständen tricksen!!!!
So ging es jedenfalls mir, als ich endlich vom Strato-Support die Bestätigung erhielt,
daß das Shop-cgi derzeit (?) NICHT auf non-.de-Domains läft. Genauer gesagt: die
eMail-Funktionalität ist gestört (!?) - es kommen keine Bestell-eMails an!
Danach wurde ich dann mehrere Monate um Geduld gebeten, daß das Problem in Arbeit ist und die
Lösung noch ein wenig dauert - bla-bla-bla.
RATSCH ... - das war mein Geduldsfaden, der riß, zumal mein Auftraggeber eine Lösung bis Mai 2002 haben mußte!
Und da kam mir auf einer Autofahrt die Idee: wenn das Skript bis zum eMail-Versand läuft, dann muß es doch möglich sein, das eMail-Skript einzubauen, das ja klappt. Nach einigen Tests fand ich die Lösung! Hier der Trick:
HTML Source Code | Anm. |
---|---|
|
|
Was haben Sie gemacht ? Nun, Sie haben die Elemente wie <!--ADDR1-->
, die vom
Shop-cgi ersetzt werden, wenn diese Seite aufgerufen wird, als nicht-veränderbare
Eingabe-Felder für das eMail-Skript umdefiniert.
Zwar interpretiert Netscape 4.x das readonly="readonly"
nicht, aber der im Cookie
enthaltene Wert wird nicht verändert!
HTML Source Code | Anm. |
---|---|
|
|
Hier wird ein verborgenes Feld pro Bestellposition für das eMail-Skript eingefügt.
WICHTIG: der Name name=
muß eindeutig sein - sonst wird im eMail-Skript
nur das erste Feld mit demselben Namen übertragen. Dazu können Sie den Feldnamen aus den
Elementen <!--PRODUCT-->
, <!--PRICEPU-->
,
<!--P_PCS_VAL-->
, <!--P_SUM_P_U-->
beliebig
zusammensetzen.
WICHTIG: der Wert value=" "
muß angeben werden; mindestens mit einem
Blank.
Das ist alles! Ein Bestellmail sieht dann wie folgt aus:
Formulareintraege von andreas skript (andreas@hillschmidt.de) am Freitag, 12 April, 2002 um 16:03:04 ------------------------------------------------------------------------ email: andreas@hillschmidt.de realname: andreas skript ADDR1: teststrasse 66 ADDR2: 12345 stratort ==Buchung== 81 Zauberkurs fuer Erwachsene | Preis: 50.00 EURO | Tln.: 1 | Summe: 50 EURO: Summe: 50 ------------------------------------------------------------------------ |
Diese Lösung lief längere Zeit als Kursbuchungsbestellsystem des VBW Klarenthal und der VBS Schierstein, beide unter Strato gehostet, bis eine Wiesbaden-weite Lösung für alle Bildungsstätten eingeführt wurde.
Übrigens: dieses Vorgehen löst auch das DM-Problem auf Shops unter .de-Domains ...
Mit einem einfachen Kniff ist auch der Mini-Shop in der Lage, ein Bestaetigungs-eMail zu schicken:
1. Der Shop ist auf das mailmanager.pl Script umgestellt, wie auf dieser Seite und in den Strato-FAQ beschrieben (wo Strato den Trick wohl her hat).
2. Das order_tpl.html im Verzeichnis shop/ wird wie folgt geaendert:
im <head>-Bereich werden folgende Zeilen eingefuegt:
<script language="JavaScript"> <!-- var eMail="<!--EMAIL-->"; //--> </script>
3. Im <body>-Bereich wird die Zeile mit dem recipient (<input type="hidden" name="recipient" value="webmaster@domain.de"> oder aehnlich) komplett ersetzt mit den Zeilen
<script language="JavaScript"> <!-- document.write("<input type=hidden name=recipient value=webmaster@domain.de,"+eMail+"></input>") //--> </script>
4. Ferner wird die Zeile <input type="text" name="email" value="<!--EMAIL-->" readonly="readonly"> ersetzt mit den Zeilen
<script language="JavaScript"> <!-- document.write("<code><b><input type=text name=email value=" + eMail + " readonly=readonly></input></b></code><br>") //--> </script>
Das wars!
Technischer Hintergrund:
Cool, oder ?
Falls Sie Fragen, Anmerkungen, ... haben: nutzen Sie bitte das Feedback-Formular!
Und: auch diese Seite ist bei Strato gehostet!