Bug bei den Streichpreisen

Hallo Leute,

mir ist da gerade etwas aufgefallen was sehr nach einem Bug aussieht.

In der Listenansicht und auch in der detailansicht werden falls vorhanden streichpreise ausgegeben. Über die Ausgabe entscheidet die Logik im Template, welche folgendermaßen
aussieht:


[{if $oDetailsProduct->getFTPrice() > $oDetailsProduct->getFPrice()}]
                        <p class="oldPrice">
                            <strong>[{oxmultilang ident="DETAILS_REDUCEDFROM"}] <del>[{$oDetailsProduct->getFTPrice()}] [{$currency->sign}]</del></strong>
                        </p>
                    [{/if}]

Gebe ich im Backend einen Artikelpreis von 70€ ein und eine UVP von 1000€ dann wird
der “oldprice” (1000€) nicht im Frontend ausgegeben. Holt man sich die Preise direkt aus
der Datenbank, ungefähr so:


[{assign var="oldPrice" value=$oDetailsProduct->oxarticles__oxtprice->value}]
                        [{assign var="newPrice" value=$oDetailsProduct->oxarticles__oxprice->value}]
                        [{if $oldPrice gt $newPrice}]
                            <span>[{oxmultilang ident="PAGE_DETAILS_REDUCEDFROM"}] </span>
                            <span class="productoldprice">[{$oDetailsProduct->getFTPrice()}] [{$currency->sign}]</span>
                        [{/if}]

Dann wird der Streichpreis ausgegeben…

Meine Vermutung ist, dass die Logik des Vergleichens der schon formatierten Preise im Template im Standard nicht funktioniert, da 1.000 > 70 aussagt, dass kein Streichpreis ausgegeben wird, weil dieser kleiner ist als der normale Preis.

Habe es in einer 4.5.6 CE Version bei mir und im demoshop der 4.5.7 CE reproduziert.

Mein Englisch ist nicht das Beste, kann das jemand in den Bugtracker schreiben ?

Viele Grüße

ich hab da mal ein wenig getestet…

Aktuell sieht es wohl so aus, dass der Streichpreis nur angegeben wird, wenn die Anzahl der Stellen übereinstimmt.
Also das geht:

  • Preis 70,- / UVP 99,-
  • Preis 150,- / UVP 299,-

Das geht nicht:

  • Preis 70,- / UVP 100,-
  • Preis 150,- / UVP 1000,-

https://bugs.oxid-esales.com/view.php?id=3619

in der Datei core/oxarticle.php Zeile 2717 rum:


    public function getFTPrice()
    {
        if ( $oPrice = $this->getTPrice() ) {
            if ( $oPrice->getBruttoPrice() ) {
                return oxLang::getInstance()->formatCurrency( oxUtils::getInstance()->fRound($oPrice->getBruttoPrice()));
            }
        }
    }

ersetzen mit:


    public function getFTPrice()
    {
        if ( $oPrice = $this->getTPrice() ) {
            if ( $oPrice->getBruttoPrice() ) {
                return $oPrice->getBruttoPrice();
            }
        }
    }

Hallo,

ich nutze die Version 4.6.4 mit basic Theme und bei mir tritt das Problem wieder auf.

Ich habe schon die besagten Änderungen in der oxarticle.php durchgeführt, dies brachte leider keinen Erfolg.

Im Demoshop konnte ich es nicht reproduzieren, der ist allerdings auch schon V.4.7.1 und es gibt nur noch das Azure Theme.

Hat jemand eine Idee, wie ich das Problem lösen kann?

Nach Eintrag bei den Bugs sollte das Problem ja in 4.6.0_beta3 behoben sein.

Gruß

Christian

Ist das denn eine Neuinstallation der 4.6.4 oder eine mit Updates hochgezogene?
Basic original oder abgeändertes Child-Theme?

Es ist eine mit Updates hochgezogene Version mit angepassten Child-Theme.
In der Version 4.5.7 hat es mit der oben beschriebenen Änderungen funktioniert.

Funktioniert das denn mit dem originalen Basic? Dann hast Du irgend eine Änderung in Deinem Child nicht eingebaut.

Ich habe meine Dateien noch einmal überprüft. Die Werte kommen richtig rein.
Also $product->getFTPrice() und $product->getFPrice() liefern jeder für sich den richtigen Wert zuück, aber in der IF bedingung klappt der Vergleich nicht.

FPrice = 34.99
FTPrice = 100

so wird er nicht angezeigt
[{if $product->getFTPrice() > $product->getFPrice()}]
so schon
[{if $product->getFTPrice() < $product->getFPrice()}]

wenn FTPrice < 100 wird er mit der ersten Variante angezeigt, ist ja auch korrekt.
Bei der zweitem Version werden alle FTPrice <100 nicht mehr angezeigt.

Irgendwie kommt die Abfrage mit der 100 nicht klar.
Hast du dazu eine Idee?

Nimm die Werte direkt aus der Datenbank um sie zu vergleichen, da du so immer einen bereits formatierten String zurück bekommst. Bei Varianten beispielsweise mit dem “ab…” davor usw.

Zumindest habe ich das so in Erinnerung.

Vielen Dank! So hat funktioniert es jetzt.

Keine Ahnung warum. Der Wert, der von der Funktion zurück kommt war auch nur die Zahl, hatte den Wert mal vor der IF ausgegeben.

Naja ist ja egal.