Shopsystem ShopPilot Shoploesung Diskussionen und Infos zum Shopsystem ShopPilot
Willkommen Gast. Bitte einloggen oder registrieren.
Mai 23, 2012, 07:14:06

Einloggen mit Benutzername, Passwort und Sitzungslänge
Suche:     Erweiterte Suche
5257 Beiträge in 1422 Themen von 333 Mitglieder
Neuestes Mitglied: pje
* Übersicht Hilfe Login Registrieren
+  Diskussionen und Infos zum Shopsystem ShopPilot
|-+  ShopPilot
| |-+  SSP - Shop Server Pages
| | |-+  Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
0 Mitglieder und 2 Gäste betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"  (Gelesen 2402 mal)
dobra
Global Moderator
Hero Member
*****

Lob: 18
Offline Offline

Beiträge: 1182


WWW
« am: November 01, 2008, 15:43:30 »

Hallo,

ich habe mal wieder ein "verzwicktes" Problem  Wink

Die Aufgabe:
Monatsaktion -  bei Kauf von mindestens 5 (gleichen oder verschiedenen beliebigen) Artikeln eines Herstellers 10% Rabatt.
Der rabattierte Preis soll (in Form von "alter Preis / Aktionspreis") aber nicht nur im WK angezeigt und berechnet werden, sondern auch auf den Produktseiten.

Soweit funktioniert das auch alles schon Cheesy
Da ich die Anzahl der bereits bestellten Artikel von Herstelle "X" aber nur im WK auslesen kann, habe ich das so gelöst, daß diese Anzahl in die Warenkorbdatei geschrieben wird und im  sub modify_db_price Callback abgefragt werden kann.
ABER hier liegt das Problem  Huh

Code:
sub calc1 { # alle Artikel eines Herstellers minus x% ab x Stueck
my $p = $_[0];
my $artid = $_[1];
    my $pre = ssp::db_get_prefix();
    my $MERCH = $pre . "MERCH";
    ssp::readSQLData(qq|SELECT AKTIMARKE, ABSTUECK FROM $MERCH WHERE STANDARD=1|,  "AKTIMARKE", "ABSTUECK");

    my $pf = ssp::get_var_db('AKTIFAKTOR',0); # Preisfaktor vom benutdef.  Feld des Haendlers holen
    my $marke = ssp::get_var_db('AKTIMARKE',0);
    my $von = ssp::get_var_db('AKTIONVON',0);
    my $bis = ssp::get_var_db('AKTIONBIS',0);
    my $abstueck = ssp::get_var_db('ABSTUECK',0);
if (!length($abstueck)) {$abstueck = 0}
my $sum = ssp::cart_read_var('aktistueck');
    ($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
    $mon += 1; $year += 1900; # Y2K
    my $datum = sprintf("%04d%02d%02d",$year,$mon,$mday);
   
    my $ITEM = $pre . "ITEM";
    my $SITM = $pre . "SITM";
    ssp::readSQLData("SELECT FIRMA FROM $ITEM WHERE ITEMID='$artid' UNION SELECT FIRMAV FROM $SITM WHERE ITEMID='$artid'","FIRMA");
    my $artikel = ssp::get_var_db('FIRMA',0);
    if($artikel ne $ssp::undefined && $artikel ne "" && $sum >= $abstueck){
        if ($marke ne $artikel || ($datum <= $von && $datum >= $bis))  {
            $pf = 1;   
        }
        return ($p*$pf);
    }
    else
    {
        return $p;
    }
}

Obwohl der aktuelle Wert sofort in der Cart-Datei steht, wird er erst bei nochmaligem Laden des WK bei der Abfrage my $sum = ssp::cart_read_var('aktistueck'); berücksichtigt   Sad

mt hatte mal ein ähnliches Problem mit sub invoice_addpos_final ....
ahe hat das dann irgendwie gelöst - vielleicht geht das auch für mein Problem und jemand verrät mir die Lösung?

Nachtrag (editiert):
Es hat offensichtlich garnichts mit cart_read_var zu tun ...
Wenn ich diesen Wert auslese, wird er sofort - also bei Artikel in WK legen oder Menge ändern - korrekt ausgegeben
Code:
<!--spmacro:module(show)
sub test {
my $sum = ssp::cart_read_var('aktistueck');
main::mprint $sum;
}
-->
Das Problem ist also scheinbar das Callbackscript, das erst nach dem Laden der Seite ausgeführt wird  Undecided
<!--spmacro:module(Callback)            
sub modify_db_price {
...
(steht in stdall)

Wie kann ich das lösen?
« Letzte Änderung: November 02, 2008, 09:36:03 von dobra » Gespeichert

dobra
Global Moderator
Hero Member
*****

Lob: 18
Offline Offline

Beiträge: 1182


WWW
« Antwort #1 am: November 04, 2008, 00:18:25 »

nach oben schieb - hat wirklich niemand einen Lösungsvorschlag?
Gespeichert

mt
Jr. Member
**

Lob: 0
Offline Offline

Beiträge: 57


« Antwort #2 am: November 04, 2008, 10:47:27 »

Hallo dobra,

Zitat
mt hatte mal ein ähnliches Problem mit sub invoice_addpos_final ....

wir hatten doch bei meinem Problem eine Brückenseite gebaut.

Heißt auf einer leeren Seite wird diese Funktion ausgeführt und
danach die Weiterleitung auf den Referer gemacht.

Hier nochmal Deine Antwort:
http://www.shoppilot.net/pf/ssp_shop_server_pages/invoiceaddposfinal-t1102.0.html;msg4119#msg4119

Hoffe dass Dir das weiterhilft.

Gruß
mt
Gespeichert
dobra
Global Moderator
Hero Member
*****

Lob: 18
Offline Offline

Beiträge: 1182


WWW
« Antwort #3 am: November 04, 2008, 10:51:20 »

Hallo mt,

nein, in diesem Fall kann ich leider keine Brückenseite verwenden, da ich das Problem ja nicht nur bei Artikelanzahl im WK ändern habe, sondern auch wenn ein Artikel von einer beliebigen Detailseite aus in den WK gelegt wird.
Gespeichert

ahe
Global Moderator
Sr. Member
*****

Lob: 19
Offline Offline

Beiträge: 407


« Antwort #4 am: November 04, 2008, 11:27:55 »

Hallo dobra,

habe mir das Problem mal angeschaut (in einem Demoshop) und kann folgendes festellen:

- beim Aufruf des Callbacks ist die Warenkorbdatei aktuell (heisst: beinhaltet neue Artikel)
- ssp::cart_read_var öffnet die Warenkorbdatei beim Funktionsaufruf (heisst: es werden die aktuellen Daten auch zurückgegeben)
- modify_db_price wird immer aufgerufen BEVOR irgendetwas ausgegeben wird (heisst: zum Zeitpunkt der Ausgabe wurde das Callback schon ausgeführt)

Folglich scheint irgendwo anders noch ein Fehler aufzutreten.
Ich würde empfehlen im Callback mal genaue Logausgaben (plog) einzubauen, sodass Sie nachvollziehen können,
wann welche Variablen welchen Inhalt haben und welcher Programmablauf dadurch erfolgt.

Bsp (natürlich noch zu komplettieren Wink):
Code:
my $artikel = ssp::get_var_db('FIRMA',0);
    main::plog("D, artikel=$artikel\n");
    if($artikel ne $ssp::undefined && $artikel ne "" && $sum >= $abstueck){
        main::plog("D, zweig1 (sum=$sum; datum=$datum)\n");
        if ($marke ne $artikel || ($datum <= $von && $datum >= $bis))  {
            $pf = 1;   
        }
        main::plog("D, returning -".($p*$pf)."-\n");
        return ($p*$pf);
    }
    else
    {
        main::plog("D, zweig2 (sum=$sum)\n");
        main::plog("D, returning -$p-\n");
        return $p;
    }
Gespeichert

MfG ahe
dobra
Global Moderator
Hero Member
*****

Lob: 18
Offline Offline

Beiträge: 1182


WWW
« Antwort #5 am: November 04, 2008, 11:49:25 »

Hallo ahe,

Danke für den Code - hab ihn eingebaut
(Ergebnis kommt per Mail - die Details sind hier vermutlich ausführlich  Wink)
Gespeichert

dobra
Global Moderator
Hero Member
*****

Lob: 18
Offline Offline

Beiträge: 1182


WWW
« Antwort #6 am: November 04, 2008, 21:32:49 »

EDIT - diesen Fehler gefunden   Wink

1) Callback begin_read_template  wird korrekt ausgeführt   Cheesy
- aber
2) modifiy_db_price funktioniert noch immer nicht (erst nach neuladen der WK Seite)  Sad
« Letzte Änderung: November 04, 2008, 23:47:23 von dobra » Gespeichert

ahe
Global Moderator
Sr. Member
*****

Lob: 19
Offline Offline

Beiträge: 407


« Antwort #7 am: November 04, 2008, 23:45:54 »

Hallo dobra,

ich tippe immer noch darauf, dass irgendwo die Funktion begin_read_template schon definiert wurde,
und deshalb die 2. (neue) Funktion ignoriert wird.
Gespeichert

MfG ahe
dobra
Global Moderator
Hero Member
*****

Lob: 18
Offline Offline

Beiträge: 1182


WWW
« Antwort #8 am: November 04, 2008, 23:49:29 »

Hallo ahe,

hab DIESEN Fehler gefunden und Beitrag gerade editiert - hat sich überschnitten  Wink
Aber Punkt 2) funktioniert leider noch immer nicht  Huh
Gespeichert

ahe
Global Moderator
Sr. Member
*****

Lob: 19
Offline Offline

Beiträge: 407


« Antwort #9 am: November 05, 2008, 00:02:41 »

Ich schlage vor wir machen morgen per Mail weiter.
Ist doch ein *wenig* speziell Ihr Problem Cheesy
Gespeichert

MfG ahe
dobra
Global Moderator
Hero Member
*****

Lob: 18
Offline Offline

Beiträge: 1182


WWW
« Antwort #10 am: November 05, 2008, 00:07:09 »

OK
gute Nacht
ich mach für heute auch Feieradend  Wink
Gespeichert

ahe
Global Moderator
Sr. Member
*****

Lob: 19
Offline Offline

Beiträge: 407


« Antwort #11 am: November 05, 2008, 00:27:13 »

Wünsche ich ebenfalls
Gespeichert

MfG ahe
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  

mysitelist Impressum Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS