Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Workaround: Box Specials - Angebotspreis gleich Produktpreis (Sie sparen 0%)

    Whiteflash

    • Fördermitglied
    • Beiträge: 186
    • Geschlecht:
    Hallo Community,

    hatte bei mir den Fall entdeckt, dass für ein Produkt ein Special-Preis eingetragen war, der genauso hoch war wie der eigentliche Produktpreis (ist wohl durch die Synchronisierung mit meinem Wawi passiert, da ist es auch egal), was zu der unschönen Anzeige (s. Screenshot) geführt hat, wo dem Kunden das Produkt als "Schnäppchen" angepriesen wurde mit dem Hinweis "...sie sparen 0%!" - na klasse!  :datz:

    Also habe ich mal geschaut, wo das Produkt ausgelesen wird - mit Hilfe einer zusätzlichen Zeile SQL kann ich den Fall in Zukunft ausschließen. Betroffene Datei: \templates\current-template\source\boxes\specials.php.
    Die SQL-Abfrage (ab ca. Zeile 32) sieht dann bei mir so aus:
    Code: PHP  [Auswählen]
    if ($random_product = xtc_random_select("SELECT
                                               p.products_id,
                                               pd.products_name,
                                               p.products_price,
                                               p.products_tax_class_id,
                                               p.products_image,
                                               s.expires_date,
                                               p.products_vpe,
                                               p.products_vpe_status,
                                               p.products_vpe_value,
                                               s.specials_new_products_price
                                             FROM "
    .TABLE_PRODUCTS." AS p,
                                               "
    .TABLE_PRODUCTS_DESCRIPTION." AS pd,
                                               "
    .TABLE_SPECIALS." AS s
                                             WHERE p.products_status = '1'
                                               AND p.products_id = s.products_id
                                               AND pd.products_id = s.products_id
                                               AND pd.language_id = '"
    .$_SESSION['languages_id']."'
                                               AND s.status = '1'
                                               AND CAST(s.specials_new_products_price AS DECIMAL(10,2)) < CAST(p.products_price AS DECIMAL(10,2))
                                               "
    .$group_check."
                                               "
    .$fsk_lock."                                            
                                             ORDER BY s.specials_date_added DESC
                                             LIMIT "
    .MAX_RANDOM_SELECT_SPECIALS)) {...
     

    Die Zeile AND CAST(s.specials_new_products_price AS DECIMAL(10,2)) < CAST(p.products_price AS DECIMAL(10,2)) checkt einfach ob der Specialspreis beschnitten auf zwei Stellen nach dem Komma kleiner ist, als der eigentliche Produktpreis - et voila! - somit werden keine gleichteuren (oder gar teurere) Specials angeboten. Die Verwendung von CAST() ist notwendig, da die Werte ja als String gespeichert werden, und somit kein direkter numerischer Vergleich möglich ist. Vielleicht nützt's ja jemandem!

    LG Whiteflash

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34648.0
    Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware

    webald

    • modified Team
    • Beiträge: 2.791
    Witzig. Hatte gerade https://trac.modified-shop.org/ticket/820 aufgemamcht, dass man Sonderpreise auch höher als Listenpreis eingeben kann.

    Whiteflash

    • Fördermitglied
    • Beiträge: 186
    • Geschlecht:
    Hallo Webald,

    oh ja, die Idee ist gut! Dafür muss aber auf jeden Fall in der xtcPrice.php -> xtcGetPrice() gegengecheckt werden, ob ein Special-Preis unter oder über dem eigentlichen Preis liegt. Da bin ich gerade drauf gekommen, weil der Artikel um den es in meinem Fall ging auch in der Box "zuletzt angesehen" mit der nicht korrekten Special-Preis-Angabe versehen wurde, wobei die Angabe hier eben an der Rückgabe von der oben genannten Funktion hängt.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Eingriff für Anzeige des Preises am Besten in der /includes/classes/xtcPrice.php

    Hatte da mal was gebaut, das auch da eingreift, funktioniert wunderbar für alle Templateseiten und Boxen:
    https://www.modified-shop.org/forum/index.php?topic=32201.0

    Punkt 6 in der Anleitung zeigt auf die Codestelle an der man drehen könnte.

    MaBo

    • Frisch an Board
    • Beiträge: 72
    • Geschlecht:
    In der /includes/classes/xtcPrice.php ca Zeile 570 folgendes suchen:
    Code: PHP  [Auswählen]
    $price = '<span class="productOldPrice"><small>' . INSTEAD . '</small><del>' . $this->xtcFormat($pPrice, $format) . '</del></span><br />' . ONLY . $this->checkAttributes($pID) . $this->xtcFormat($sPrice, $format) . '<br /><small>' . YOU_SAVE . round($discount) . ' % /' . $this->xtcFormat($pPrice - $sPrice, $format) . '</small>';

    Und mit folgendem ersetzen:
    Code: PHP  [Auswählen]
    if ($special_price < $old_price) {
    $price = '<span class="productOldPrice"><small>' . INSTEAD . '</small><del>' . $this->xtcFormat($pPrice, $format) . '</del></span><br />' . ONLY . $this->checkAttributes($pID) . $this->xtcFormat($sPrice, $format) . '<br /><small>' . YOU_SAVE . round($discount) . ' % /' . $this->xtcFormat($pPrice - $sPrice, $format) . '</small>';
    } else {
    $price = $old_price;
    }

    Jedoch wird im Warenkorb der Angebotspreis angezeigt, ist also noch nicht die Lösung  :nixweiss:
    Liebe Grüße
    Martin

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    In
    /includes/modules/order_details_cart.php

    Zeile:
    Code: PHP  [Auswählen]
    'PRODUCTS_PRICE' => $xtPrice->xtcFormat($products[$i]['price'] * $products[$i]['quantity'], true),
    Müsste verbogen werden .... eventuell zieht sich das auch noch weiter ... Bestellbestätigungsmail ...

    /send_order.php
    Code: PHP  [Auswählen]
      $smarty->assign('order_data', $order->getOrderData($insert_id));
    Eventuell sicherheitshalber die Funktion klonen .... ich hab keine Ahnung wo die noch überall greift.
    Was bei paypal & Co angezeigt wird sollte man auch mal checken.

    MaBo

    • Frisch an Board
    • Beiträge: 72
    • Geschlecht:
    In der /includes/classes/xtcPrice.php folgendes suchen:
    Code: PHP  [Auswählen]
    // check specialprice
        if ($sPrice = $this->xtcCheckSpecial($pID)) {
          return $this->xtcFormatSpecial($pID, $this->xtcAddTax($sPrice, $products_tax), $pPrice, $format, $vpeStatus);
        }

    Und mit folgendem ersetzen:
    Code: PHP  [Auswählen]
     // check specialprice
        if ($sPrice = $this->xtcCheckSpecial($pID)) {
          if ($sPrice < $pPrice) {
          return $this->xtcFormatSpecial($pID, $this->xtcAddTax($sPrice, $products_tax), $pPrice, $format, $vpeStatus);
          }
        }

    Jetzt sollte der richtige Preis angezeigt werden.

    Liebe Grüße
    Martin

    webald

    • modified Team
    • Beiträge: 2.791
    Hast Du das getestet?

    Ich bin der Meinung, dass pPrice zu diesem Zeitpunkt bereits inkl. Steuer ist, aber sPrice ist noch netto.

    MaBo

    • Frisch an Board
    • Beiträge: 72
    • Geschlecht:
    Stimmt, habe es mit einem Produkt getestet, das netto ist...  :doh:
    Sobald ein Produkt mit USt angeboten wird, wird kein Angebot angezeigt...  :datz:

    Vielleicht hat jemand eine andere Idee. Ich könnte das brauchen, da ich mit sich regelmäßig änderenden Preisen arbeite und das bei Angeboten mitunter heikel ist...  :panic:

    webald

    • modified Team
    • Beiträge: 2.791
    dann so:
    Code: PHP  [Auswählen]
    if ($this->xtcAddTax($sPrice, $products_tax) < $pPrice) {
            return $this->xtcFormatSpecial($pID, $this->xtcAddTax($sPrice, $products_tax), $pPrice, $format, $vpeStatus);
    }
    8 Antworten
    4760 Aufrufe
    22. Mai 2010, 11:02:34 von deaZa
    4 Antworten
    1490 Aufrufe
    21. August 2017, 20:27:06 von olivius
    2 Antworten
    3126 Aufrufe
    02. August 2010, 16:31:51 von moni