Hallo Andi,
Das Script ist ja fertig
Das Anpassen an die eigenen Seiten ist natürlich immer noch zeitaufwendig, aber an einem Wochenende zu schaffen und ein bißchen Zeit ist ja noch bis zum 1. Dezember.
Ist nur für mich nicht so einfach, eine verständliche (und
allgemein gültige) "Gebrauchsanweisung" zu formulieren, aber ich versuch's mal...
Es gibt 2 (auch unabhängig voneinander einsetzbare) Teile.
1.)
Der tagesabhängig gegebene Artikelrabatt:Dazu legt man 2 benuntzerdeffinierte Artikel-Felder an - "RABKLASSE" und "DATUM"
In "RABKLASSE" wird der Rabatt in % eingetragen ( z.B. 0.2 für 20%)
In "DATUM" wird das Datum, an dem der Rabatt gegeben werden soll eingetragen (MonatTag
ohne Punkt dazwischen - z.B 1205 für den 5. Dezember)
Die Scripte:in stdcart.ipl
<!--spmacro:module(Callback)
$rabattsumme = 0;
sub invoice_addpos {
my $ref_gesamt = $_[0];
my $ref_gesamt_steuer = $_[2];
my $anzahl = ssp::get_cart_items();
my $ust = $_[3]/100;
my $netto = $_[4];
for (my $i = 0;$i <= $anzahl;++$i) {
my $wert = ssp::get_var_cart('RABKLASSE',$i) ;
$rabattsumme += $wert * ssp::get_var_cart('preis',$i) *
ssp::get_var_cart('anzahl',$i);
}
if ($netto > 0) {
$$ref_gesamt -= $rabattsumme;
$$ref_gesamt_steuer -= $rabattsumme*$ust;
} else {
$$ref_gesamt -= $rabattsumme;
$$ref_gesamt_steuer -= $rabattsumme*(1-1/(1+$ust));
}
return 0;
}
-->
<!--spmacro:module(rabatt)
sub rpreis {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_cart('RABKLASSE',$index);
my $tag = ssp::get_var_cart('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
main::mprint( &main::fp((1-$wert) * ssp::get_var_cart('preis',$index))) ;
}
}
return 0;
}
sub rgesamt {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_cart('RABKLASSE',$index);
my $tag = ssp::get_var_cart('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
main::mprint( &main::fp((1-$wert) * ssp::get_var_cart('preis',$index) * ssp::get_var_cart('anzahl',$index))) ;
}
}
return 0;
}
sub rwert() {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_cart('RABKLASSE',$index);
my $tag = ssp::get_var_cart('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
main::mprint( $wert * 100 . "%") ;
}
}
return 0;
}
sub rsumme {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_cart('RABKLASSE',$index);
my $tag = ssp::get_var_cart('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
my $out = ( $wert * 100 . "%") ;
my $neupreis = ( &main::fp((1-$wert) * ssp::get_var_cart('preis',$index))) ;
my $preis = ssp::get_var_cart('preis',$index);
my $div = &main::fp(($preis - $neupreis ) * ssp::get_var_cart('anzahl',$index));
my $out = qq | <tr>
<td colspan="4" align="right" style="BORDER-LEFT: #cccc99 1px solid; BORDER-BOTTOM: #cccc99 1px solid"><b> __rabatt::rwert__ Adventrabatt = Ihr heutiger Preis:</b><br> <font color="red">Sie sparen heute $div</font></td>
<td valign="top" nowrap style="BORDER-LEFT: #cccc99 1px solid; BORDER-BOTTOM: #cccc99 1px solid" align="right"><font color="red">__rabatt::rpreis__</font></td>
<td valign="top" nowrap style="BORDER-RIGHT: #cccc99 1px solid; BORDER-LEFT: #cccc99 1px solid; BORDER-BOTTOM: #cccc99 1px solid"><div align="right"><font color="red">__rabatt::rgesamt__</font></div></td>
</tr> |;
main::mprint $out;
}
}
}
sub advpreis {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $out ="__preis__";
my $tag = ssp::get_var_cart('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if ($tag == $datum) { $out = "<strike>__preis__</strike";}
main::mprint $out;
}
}
sub advgpreis {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $out ="__gesamteinzel__";
my $tag = ssp::get_var_cart('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if ($tag == $datum) { $out = "<strike>__gesamteinzel__</strike";}
main::mprint $out;
}
}
-->
Der HTML-Code für die "Adventrabattzeile" (my $out = qq | ... |;) muß angepaßt werden.ACHTUNG: in den Demoshops funktioniert das SO
wenn der Warenkorb modifiziert ist - man also z.B. gewichtsabhängige Versandkosten verwendet - muß auch das Callback-Script angepaßt werden!(bin gerade dabei herauszufinden, wie ich es für meine - sehr spezielle - WK-Konfiguration machen kann)
ein Datei "rabatt_produkt.ipl" erstellen und im WC mit "Dateien hinzufügen" einbinden
<!--spmacro:module(rabatt)
sub rpreis {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_article('RABKLASSE',$index);
my $tag = ssp::get_var_article('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
my $apreis =( &main::fp((1-$wert) * ssp::get_var_article('preis',$index))) ;
main::mprint "<font color=\"red\">Ihr heutiger Preis = <b>$apreis</b></font>";
}
}
return 0;
}
sub rwert() {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_article('RABKLASSE',$index);
my $tag = ssp::get_var_article('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
my $prozent = ( $wert * 100 . "%") ;
my $neupreis = ( &main::fp((1-$wert) * ssp::get_var_article('preis',$index))) ;
my $preis = ssp::get_var_article('preis',$index);
my $div = &main::fp($preis - $neupreis);
main::mprint "$prozent Adventrabatt<br> - $div";
}
}
return 0;
}
-->
Im Warenkorb, Bestellformular und Bestettmail
__preis__ mit
__rabatt::advpreis__ und
__gesamteinzel__ mit
__rabatt::advgpreis__ erstetzen.
Im loopitem Bereich __rabatt::rsumme__ einfügen (= die Zeile "ihr heutiger Preis ... " wird - wenn vorhanden - eingeblendet)
<!--spmacro:loopitem-->
<tr>
<td>...</td>
<td>...</td>
....
</tr>
__rabatt::rsumme__<!--spmacro:enditem-->
Sonst baucht man im WK nichts weiter tun, da stdcart automatisch eingebunden wird.
In den Verzeichnis- und Deteilseiten das Script mit
<!--spmacro:include(rabatt_produkt.ipl)-->
einbinden und
__preis__ mit
__preis__ <br>__rabatt::rwert__<br> __rabatt::rpreis__ ersetzen.
2.) Der Kalenderteil:Eine Datei "advent.ipl" erstellen und im WC mit "Dateien hinzufügen" einbinden
<!--spmacro:module(advent)
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
my $datum2 = sprintf("%2d.%2d.",$mday,$mon);
my $datum3 = sprintf("%2d.%2d.%4d",$mday,$mon,$year);
sub embed {
my $count = ssp::readSQLData("SELECT ITEMID FROM PY2_ITEM WHERE DATUM='$datum'","ITEMID");
if ($count >= 0) {
my $i=0;
while ($count > $i) {
$artikel = ssp::get_var_db("ITEMID",$i);
ssp::embedded("csearch","advent.txt",$artikel);
++$i;
return "noinc"; # verhindert, daß "als Verknüpfung" kopierte Atrikel doppelt angezeigt werden
}
}
}
sub test {
my $heute = ssp::get_var_form('heute');
if ($heute == $datum) {
my $out = qq| <div class="adventbox2">__advent::embed__</div> |;
main::mprint $out;
}
}
sub td1 {
if ($datum > 1201) { $out = qq| <img border="1" src="PFAD_ZUM_1._BILD"> |; }
if ($datum == 1201) { $out = qq|<form method="post" name="heute" id="heute" action= "http://__xxpath__?showbynameNAME_DER_SEITE_AUF_DER_DAS_SCRIPT_EINGEAUT_WIRD,__xxsession__">
<td valign=bottom">
<table class="rahmen" cellpadding="8"><tr><td align="center">
<input type="hidden" name="heute" id="heute" value="$datum">
<input type="submit" class="advsubmit" value=" 1 "> </a>
</td></tr></table>
</td> </form>|; }
if ($datum < 1201) { $out = qq| ... HIER KOMMT DER HTML-CODE FÜR DIE ANZEIGE BEI "zu früh" HINEIN ... |; }
main::mprint $out;
}
sub td2 {
if ($datum > 1202) { $out = qq| <img border="1" src="PFAD_ZUM_2._BILD"> |; }
if ($datum == 1202) { $out = qq|<form method="post" name="heute" id="heute" action= "http://__xxpath__?showbynameNAME_DER_SEITE_AUF_DER_DAS_SCRIPT_EINGEAUT_WIRD,__xxsession__">
<td valign=bottom">
<table class="rahmen" cellpadding="8"><tr><td align="center">
<input type="hidden" name="heute" id="heute" value="$datum">
<input type="submit" class="advsubmit" value=" 2 "> </a>
</td></tr></table>
</td> </form>|; }
if ($datum < 1202) { $out = qq| ... HIER KOMMT DER HTML-CODE FÜR DIE ANZEIGE BEI "zu früh" HINEIN ... |; }
main::mprint $out;
}
...
usw bis sub td24 { ...
...
-->
Damit die einzelnen "Fenster" ein- bzw. ausgeblendet werden, in der Style Datei (z.B. stile.css) eintragen.
.adventbox {z-index:99; font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 16px; color: red; text-decoration: none;}
.adventbox a span {position:absolute; display:none; font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 16px; color: red; text-decoration: none;}
.adventbox a:focus span {position:absolute; top:220; left:45%; z-index:99; display:block;
color:black;
background:#ffffff;
font:bold 11px Arial, Helvetica, sans-serif;
border:2px solid red;
padding:5px;}
.adventbox a:active span {position:absolute; top:220; left:45%; z-index:99; display:block;
color:black;
background:#ffffff;
font:bold 11px Arial, Helvetica, sans-serif;
border:2px solid red;
padding:5px;}
.adventbox2 {z-index:29; overflow:visible; position:absolute; top:305; left:38%; display:block;}
.adventbox2 a:link span {overflow:visible; z-index:29; display:block;}
.rahmen { border:1px dashed black; font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 16px; color: red; text-decoration: none;}
.rahmen a:link { font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 16px; color: red; text-decoration: none;}
.advsubmit { background:transparent; border:0px; padding:0px; margin:0px; font-size: 16px; font-weight:bold; color: red; text-decoration: none; cursor:hand; cursor:pointer;}
Mit "top" und "left" wird die Position, an der das "Fenster" eingeblendet wird, eingestellt.
Hinweis: mit FF (a:focus) und IE (a:active) bleibt das Infofenster eingeblendet, bis man irgendwo anders hinklickt nur mit Opera verschwindet das "Fenster" sobald man die Maustaste losläßt - andere Browser habe ich nicht getestet
Der eigentliche Kalender:
Eine Datei "Adventkalender.html" erstellen und im WC mit "Dateien hinzufügen" einbinden
<!--spmacro:include(advent.ipl)-->
<link rel="stylesheet" href="PFAD_ZUR_DATEI/stile.css">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="320" align="CENTER" background="PFAD_ZUM_HINTERGRUNDBILD">
<table width="520" height="320" border="2" cellspacing="0" cellpadding="0">
<tr align="center" valign="middle">
<td>
<table width="100%" height="80" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="40"></td>
<td > __advent::td19__</td>
<td width="60"></td>
<td >__advent::td11__</td>
<td width="60"></td>
<td >__advent::td3__</td>
<td width="60"></td>
<td >__advent::td23__</td>
<td width="60"></td>
<td>__advent::td14__</td>
<td width="60"></td>
<td>__advent::td21__</td>
<td width="40"></td>
</tr>
</table>
<table width="100%" height="80" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="40"></td>
<td >__advent::td4__</td>
<td width="60"></td>
<td >__advent::td17__</td>
<td width="60"></td>
<td >__advent::td1__</td>
<td width="60"></td>
<td>__advent::td5__</td>
<td width="60"></td>
<td>__advent::td10__</td>
<td width="60"></td>
<td>__advent::td18__</td>
<td width="40"></td>
</tr>
</table>
<table width="100%" height="80" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="40"></td>
<td>__advent::td6__</td>
<td width="60"></td>
<td >__advent::td13__</td>
<td width="60"></td>
<td>__advent::td16__</td>
<td width="60"></td>
<td>__advent::td24__</td>
<td width="60"></td>
<td>__advent::td2__</td>
<td width="60"></td>
<td>__advent::td8__</td>
<td width="40"></td>
</tr>
</table>
<table width="100%" height="60" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="40"></td>
<td>__advent::td20__</td>
<td width="60"></td>
<td >__advent::td12__</td>
<td width="60"></td>
<td>__advent::td7__</td>
<td width="60"></td>
<td>__advent::td22__</td>
<td width="60"></td>
<td>__advent::td15__</td>
<td width="60"></td>
<td>__advent::td9__</td>
<td width="40"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
__advent::test__
In diesem Fall ist das Kalenderbild 520 x 320 groß - wenn Du ein anderes Format verwenden willst, bitte anpassen.
Zur Anzeige der Tagesaktionen braucht man jetzt noch eine txt Datei - hier "advent.txt" (muß natülich auch im WC mit "Dateien hinzufügen" eingebunden werden)
<!--spmacro:module(rabatt)
sub rpreis {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_article('RABKLASSE',$index);
my $tag = ssp::get_var_article('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
main::mprint( &main::fp((1-$wert) * ssp::get_var_article('preis',$index))) ;
}
}
return 0;
}
sub rwert() {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $wert = ssp::get_var_article('RABKLASSE',$index);
my $tag = ssp::get_var_article('DATUM',$index);
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);
if (($wert > 0 ) && ($datum == $tag)){
my $out = ( $wert * 100 . "%") ;
my $neupreis = ( &main::fp((1-$wert) * ssp::get_var_article('preis',$index))) ;
my $preis = ssp::get_var_article('preis',$index);
my $div = &main::fp($preis - $neupreis);
main::mprint "$out ADVENTRABATT";
}
}
return 0;
}
-->
<!--spmacro:module(get)
sub datum {
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum3 = sprintf("%2d.%2d.%4d",$mday,$mon,$year);
main::mprint $datum3;
}
-->
... UND HIER DER HTML-CODE ...
<table> .... was auch immer ...
(wie bei üblichen embed-Teilen
Und wenn ich nichts vergessen habe, war's das auch schon
Der Kalender muß nur noch auf der Seite und der Stelle, wo er angezeigt werden soll, mit <!--spmacro:include(Adventkalender.html)--> eingebunden werden.
Wenn Du den SB verwendest, solltest Du einen mitternächtlichen cronjob einrichten, damit der kalender auch auf den statischen Seiten immer aktuell ist.
Tipp: zum testen habe ich eine inoffizielle Infoseite angelegt und das Datum in advent.ipl "vorgestellt"
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $x = sprintf("%02d%02d",$mon,$mday);
my $datum =
$x + 180;
(mit my $datum =
$x + 100; wäre der 1. November = 1. Dezember)
gilt aber NICHT für den Artikelrabatt - der soll natürlich erst im Dezember angezeigt werden !!
Mal gucken?
http://www.woll-insel.at/cgi-bin/shop2/iboshop.cgi?show1200005300(ist aber optisch noch nicht ganz fertig)