Thema: Rabatt Funktion in JavaScript Shop
Hallo Leute,
bin java-script Amateur und verzweifle an eine einfachen Sache:
eine Rabattfunktion für mein Webshop (von Mischapage)
Hier der code: <HTML>
<HEAD>
<TITLE>Warenkorb - Navigationsleiste</TITLE>
<SCRIPT LANGUAGE=JavaScript1.1>
<!--
//////////////////////////////////////////////////////////////////
// Javascript fuer Cookies
//////////////////////////////////////////////////////////////////
// Interne Funktion
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
// Datumsfehler bei MAC beseitigen, 1 mal (!!!) vor SetCookie
function FixCookieDate (date) {
var base = new Date(0);
var skew = base.getTime(); // dawn of (Unix) time - should be 0
if (skew > 0) // Except on the Mac - ahead of its time
date.setTime (date.getTime() - skew);
}
// Liefert Cookie "name" oder Null
function GetCookie (name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
// Erzeugt/Aktualisiert Cookie
function SetCookie (name,value,expires,path,domain,secure) {
document.cookie = name + "=" + escape (value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
// Loescht Cookie
function DeleteCookie (name,path,domain) {
if (GetCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}
//////////////////////////////////////////////////////////////////
// Javascript fuer Bestellsystem
// -> Aufhaenger fuer die Daten
//////////////////////////////////////////////////////////////////
// Datenbank mit allen Produkten, Beschreibungen, Preisen und Anz.
// Wird in den einzelnen Uebersichtsseiten gefuellt
var db_beschr = new Array();
var db_preis = new Array();
var db_anzahl = new Array();
var db_bestand = new Array(); // Bestandswerte
var db_bestand_datum = "undefiniert";
// Feste Werte
var konst_mwst = 16; // Mehrwertsteuer in Prozent
var konst_porto = 750; // Porto und Verpackung in Pfennig
var konst_euro = 1.97809; // Umrechnung DM / Euro
//Rechnungsanschrift
var anschrift_name = "Vorname Name";
var anschrift_str = "Strasse 123";
var anschrift_ort = "12345 Ort";
//////////////////////////////////////////////////////////////////
// Javascript fuer Bestellsystem
// -> Daten manipulieren
//////////////////////////////////////////////////////////////////
// Einen Datensatz mit einer best. Bestellnummer aendern
// -> zum Loeschen anzahl=0 setzen
function hinzufuegen( nummer, beschreibung, preis, anzahl )
{
db_beschr[nummer] = beschreibung;
db_preis[nummer] = preis;
db_anzahl[nummer] = anzahl;
// Meldung
self.status= "Artikel " + beschreibung + " (" + nummer + ") wird mit " +
anzahl + " Stück im Warenkorb geführt."
}
// Einen Datensatz mit einer best. Bestellnummer loeschen
function loeschen( formular, nummer )
{
if( db_anzahl[nummer] )
{
db_anzahl[nummer] = 0;
anzahl_eintragen( formular );
// Meldung
self.status = "Der Artikel " + db_beschr[nummer] +
" wurde aus der Bestellung entfernt."
}
else
self.status = "Dieser Artikel war noch nicht bestellt!"
}
// bestellte Anzahlen in Formular eintragen
// Parameter: Formularname (document.Bestellung)
function anzahl_eintragen( formular )
{
// Alle Formulatelemente
for (var j = 0; j < formular.elements.length; j++)
if( formular.elements[j].name )
{
// Leere Felder mit 0 initialisieren
if( formular.elements[j].value == "" )
formular.elements[j].value = "0";
// Suchen
for( nr in db_anzahl )
if( formular.elements[j].name == nr)
{
formular.elements[j].value = db_anzahl[nr];
break;
}
}
// Meldung
self.status="Werte wurden aus der Datenbank eingetragen."
}
// Formatierung von Pfennigbetraegen in Mark,Pfennig
function format_preis( pfennige )
{
var mark = Math.floor( pfennige / 100 );
var pfen = pfennige % 100;
var text = mark + ",";
if( pfennige % 100 < 10 )
text += "0";
text += pfen;
return( text );
}
// Speichert Anschrift
function sp_anschrift()
{
// Verfallsdatum fuer Cookie
var ms_jahr = 12*30*24*60*60*1000; // 1 Jahr Cookie-Gueltigkeit
var ablauf = new Date(); FixCookieDate(ablauf);
var heute = new Date(); FixCookieDate(heute);
ablauf.setTime( heute.getTime() + ms_jahr );
// Wert fuer Cookie: Daten durch '*' getrennt
var wert = anschrift_name + "*" + anschrift_str + "*" + anschrift_ort;
SetCookie("Kundendaten", wert, ablauf);
// Hinweismeldung
alert("Ihre Anschrift wurde in einem Cookie gespeichert\n" +
"Benötigen Sie später Ihre Anschriftsdaten wieder,\n" +
"drücken Sie einfach den Schaltknopf: [ Laden ].");
}
// Laed Anschrift
function ld_anschrift()
{
var wert = GetCookie("Kundendaten");
if (wert)
{
var trennpos = wert.indexOf("*");
if (trennpos != -1)
{
anschrift_name = "" + wert.substring( 0, trennpos );
wert = wert.substring( trennpos + 1, wert.length );
trennpos = wert.indexOf("*");
if (trennpos != -1)
{
anschrift_str = "" + wert.substring( 0, trennpos );
anschrift_ort = wert.substring( trennpos + 1, wert.length );
}
}
}
}
//////////////////////////////////////////////////////////////////
// Javascript fuer Bestellltabelle
//////////////////////////////////////////////////////////////////
function bestelltabelle( target, is_online )
{
// Bestelldaten in einer Tabelle
var is_bestellt = 0;
var endpreis = 0;
var gesamtpreis = 0;
for (best_nr in db_anzahl)
{
if( (db_anzahl[best_nr] != "0") &&
(db_anzahl[best_nr] != "") )
{
if( is_bestellt == 0 )
{
// Tabellenanfang, wenn ueberhaupt was bestellt
target.writeln("<table cellspacing=0 cellpadding=5 border=1>");
target.writeln("<tr><th nowrap>Anzahl</th>");
target.writeln("<th nowrap>Best.Nummer</th>");
target.writeln("<th nowrap>Kurzbezeichnung</th>");
target.writeln("<th nowrap>je</th>");
target.writeln("<th nowrap>gesamt</th></tr>");
}
is_bestellt=1;
target.writeln("<tr>");
target.writeln("<td>" + db_anzahl[best_nr] + "</td>" );
target.writeln("<td>" + best_nr + "</td>" );
target.writeln("<td>" + db_beschr[best_nr] + "</td>" );
target.write("<td align=right>");
target.write( format_preis( db_preis[best_nr] ) );
target.writeln(" DM </td>" );
gesamtpreis = db_preis[best_nr] * db_anzahl[best_nr];
target.writeln("<td align=right>" + format_preis( gesamtpreis ) + " DM </td>" );
endpreis += gesamtpreis;
target.writeln("</tr>");
// Formularfelder fuer Onlinebestellung
if( is_online == 1 )
{
target.writeln(' <!---Online-Daten------------------------------------->');
target.writeln(' <input type="hidden"');
target.writeln(' name=" ' + best_nr + '"');
target.writeln(' value=" '
+ db_anzahl[best_nr]
+ 'x '
+ format_preis( db_preis[best_nr] )
+ 'DM = '
+ format_preis( gesamtpreis )
+ 'DM ('
+ db_beschr[best_nr]
+ ')">' );
}
}
}
// Tabellenende oder Fehlermeldung
if( is_bestellt == 0 )
{
target.writeln("<p>Sie haben noch keine Artikel ausgewählt.<p>");
}
else
{
// Tabellenende
// Porto und Verpackung
target.writeln("<tr>");
target.writeln("<td colspan=4 align=right>Anteilige Kosten für Porto und Verpackung:</td>" );
target.writeln("<td align=right>" + format_preis( konst_porto ) + " DM </td>" );
target.writeln("</tr>");
endpreis += konst_porto;
// Ausgabe Gesamtpreis
target.writeln("<tr>");
target.writeln("<td colspan=4 align=right><b>Gesamtpreis:</b></td>" );
target.writeln("<td align=right><b>" + format_preis(endpreis) + " DM </b></td>" );
target.writeln("</tr>");
// Tabellenende
target.writeln("</table>");
// Berechnete Daten
target.writeln( "<p>" );
// Mehrwertsteuer
var mwst = Math.floor( endpreis * konst_mwst / 100 );
target.writeln( "Diese Bestellung enthält" + konst_mwst + "% gesetzliche MwSt = ");
target.writeln( format_preis( mwst ) + " DM.<br>" );
// Euro
var euro = Math.floor( endpreis / konst_euro );
target.writeln( "Der Gesamtpreis dieser Bestellung entspricht");
target.writeln( format_preis( euro ) + " Euro" );
target.writeln( "(1 Euro = " + konst_euro + " DM)." );
// Bestellhinweise
target.writeln( "<p> " );
target.writeln( "<hr>" );
target.writeln( "Hier können Bestellhinweise aufgeführt werden." );
// Formularfelder fuer Onlinebestellung
if( is_online == 1 )
{
target.writeln(" <!---Online-Daten------------------------------------->");
target.writeln(' <input type="hidden" name=" " value="' +
'===================================================================="> ');
target.writeln(' <input type="hidden" name=" Porto" value="'
+ format_preis(konst_porto) + ' DM"> ');
target.writeln(' <input type="hidden" name=" Gesamtpreis" value="'
+ format_preis(endpreis) + ' DM"> ');
target.writeln(' <input type="hidden" name=" MwSt in Prozent" value="'
+ konst_mwst + '% "> ');
target.writeln(' <input type="hidden" name=" MwSt" value="'
+ format_preis(mwst) + ' DM"> ');
target.writeln();
}
}
return is_bestellt;
}
//////////////////////////////////////////////////////////////////
// Javascript fuer Ausdruck/Fax (alt)
//////////////////////////////////////////////////////////////////
function bestellfenster( is_fax )
{
var fenster = open("wait.htm",
"bestellfenster",
"width=600,toolbar=yes,resizable=yes,scrolling=yes");
// old: ... "width=600,height=400,toolbar=yes,resizable=yes");
var title, headline;
if( is_fax == 1 )
{
title="Bestellung per Fax";
headline="FAX - Bestellung an 09131 / 12345";
}
else
{
title="Bestellung per gelber Post";
headline="Bestellung per Post";
}
fenster.focus();
fenster.document.open();
fenster.document.writeln("<HTML>");
fenster.document.writeln("<HEAD><TITLE>" + title + "</TITLE></HEAD>");
fenster.document.writeln('<body leftmargin="5" bgColor="#ffffff">');
fenster.document.writeln("<h1>" + headline + "</h1>");
fenster.document.writeln("<hr>");
// Anschrift Kunde
fenster.document.writeln("<h2>Anschrift:</h2>");
fenster.document.writeln( "<tt>" + parent.oben.anschrift_name + "<br>" );
fenster.document.writeln( parent.oben.anschrift_str + "<br><br>" );
fenster.document.writeln( parent.oben.anschrift_ort + "<br></tt>" );
if( is_fax == 0 )
{
// Anschrift Kunde
fenster.document.writeln( "<p>" );
fenster.document.writeln("<h2>Empfänger:</h2>");
fenster.document.writeln( "<tt>Onlineversand Mischapage<br>" );
fenster.document.writeln( "Otto von Quelle-Str. 4711<br><br>" );
fenster.document.writeln( "12345 Musterhausen<br></tt>" );
}
fenster.document.writeln( "<p>" );
fenster.document.writeln( "<b>Hiermit bestelle ich, " + parent.oben.anschrift_name + ",");
fenster.document.writeln( "verbindlich folgende Artikel:</b>" );
// Tabelle mit bestelldaten
fenster.document.writeln( "<p> " );
var is_bestellt = bestelltabelle( fenster.document,0 );
// Fensterdokument schlieÃ?en
// -> alert() erst nach schlieÃ?en des Dokuments moeglich (IE5) Bug?
fenster.document.close();
if( is_bestellt == 1 )
{
// Hinweis und drucken...
fenster.alert( "Wählen Sie bitte im folgenden Druckdialog Ihren Faxtreiber aus\n" +
"um die Bestellung per FAX zu versenden.\n\n" +
"Sollte Ihr Browser den Druckdialog nicht automatisch anzeigen\n" +
"öffnen Sie diesen bitte über das Drucken-Symbol in der Toolbar." );
fenster.print();
}
else
{
fenster.alert( "Ihr aktueller Wahrenkorb ist leer.\n" +
"Eine Bestellung kann NICHT durchgeführt werden!" );
fenster.close();
}
}
//////////////////////////////////////////////////////////////////
// Javascript fuer Online-Bestellung
//////////////////////////////////////////////////////////////////
function onlinebestellung()
{
// Grundseite
parent.main.document.open();
parent.main.document.writeln("<html>");
parent.main.document.writeln("<head><title>Online - Bestellung</title></head>");
parent.main.document.writeln('<body leftmargin="5" bgColor="#ffffff">');
parent.main.document.writeln("<h1>Online-Bestellung</h1>");
// Mailformular
parent.main.document.writeln('<form action="mailto:fotobestellung@illuma.de?Subject=Warenkorb%20Online-Bestellung"');
parent.main.document.writeln(' enctype="text/plain"');
parent.main.document.writeln(' method="post" >');
// Kundendaten
parent.main.document.writeln();
parent.main.document.writeln( " <h2>Anschrift</h2>");
parent.main.document.writeln( " <tt>" + parent.oben.anschrift_name + "<br>" );
parent.main.document.writeln( " " + parent.oben.anschrift_str + "<br>" );
parent.main.document.writeln( " " + parent.oben.anschrift_ort + "<br></tt>" );
// E-Mail Ã?berschrift
parent.main.document.writeln();
parent.main.document.writeln( ' <input type="hidden" name=" " value="' +
'============================================"> ');
parent.main.document.writeln( ' <input type="hidden" name=" " value="' +
'= Mischapage Warenkorb Onlinebestellung =="> ');
parent.main.document.writeln( ' <input type="hidden" name=" " value="' +
'=========================================="> ');
parent.main.document.writeln();
// Formulatdaten fuer E-Mail
parent.main.document.writeln();
parent.main.document.writeln( ' <input type="hidden" name=" Kunde Name" value="' +
parent.oben.anschrift_name + '"> ');
parent.main.document.writeln( ' <input type="hidden" name=" Kunde Strasse" value="' +
parent.oben.anschrift_str + '"> ');
parent.main.document.writeln( ' <input type="hidden" name=" Kunde Ort" value="' +
parent.oben.anschrift_ort + '"> ');
parent.main.document.writeln(' <input type="hidden" name=" " value="' +
'===================================================================="> ');
// Tabelle mit Bestelldaten und HIDDEN-Feldern fuer die Daten
parent.main.document.writeln( "<p> " );
var is_bestellt = bestelltabelle( parent.main.document,1 );
// Submit-Button
if( is_bestellt == 1 )
{
parent.main.document.writeln();
parent.main.document.writeln(' <p>');
parent.main.document.writeln(' <input type="submit" value="Bestellung aufgeben">');
}
// Ende Mailformular und Seite
parent.main.document.writeln();
parent.main.document.writeln("</form>");
parent.main.document.writeln('</body>');
parent.main.document.writeln("</html>");
parent.main.document.close();
}
// -->
</SCRIPT>
</HEAD>
<!----- Das Auswahlmenu ---------------------------------------------------------->
<BODY bgColor="#00cccc">
<table width=100% border=0 cellspacing=0 cellpadding=0>
<tr>
<td align=left valign=middle>
<!------------------------------------------------------>
<table cellpadding="0" cellspacing="0" border="0"><tr>
<td nowrap><font face="lucida console" size="6"> </font></td>
<td nowrap><font face="lucida console" size="6">Misch</font></td>
<td bgcolor="fuchsia" nowrap><font face="lucida console" size="6">a</font></td>
<td nowrap><font face="lucida console" size="6">page W</font></td>
<td bgcolor="fuchsia" nowrap><font face="lucida console" size="6">a</font></td>
<td nowrap><font face="lucida console" size="6">renkørb</font></td>
</tr></table>
<!------------------------------------------------------>
</td>
<td align="right" valign="middle">
<hr noshade size=1 color="black">
<tt>Vø.92 / © 26.09.99 by Mischa</tt>
<hr noshade size=1 color="black">
</td>
</tr>
</table>
</BODY>
</HTML>
Hier das funktionierende Beispiel:
http://home.foni.net/~mischa-schmidt/wk/