Samstag, 22. Juli 2006 Druck-Ansicht
Durch die Einrichtung eines “Sonderpreises” überschreibt xt:Commerce (fast) alle anderen Vergünstigungen des betreffenden Artikels. Allerdings werden manche ungültig gewordenen Werte weiterhin angezeigt.
Um fehlerhafte bzw. überflüssige Angaben vermeiden zu können, müssen zunächst unterschiedliche Kombinationen durchgespielt werden:
“Gruppenpreise”
Für jede Kundengruppe kann je Artikel ein individueller Preis festgelegt werden. Auf diese Weise könnte man z.B. Stammkunden gegenüber Neukunden Preisvorteile anbieten
“Staffelpreise”
Zusätzlich können je Artikel für jede Kundengruppe individuelle Mengenstaffelungen und die dafür gültigen Stückpreise bestimmt werden
“Artikel-Rabatt”
Ein “Maximaler Rabatt auf Produkte” muss für die jeweilige Kundengruppe zugelassen sein, damit ein “Artikelrabatt” wirksam werden kann
“Sonderangebot”
Einzelne Artikel können als Sonderangebot bestimmt werden, je Artikel kann ein Angebots-Preis eingegeben und das Angebot in Stückzahl sowie Gültigkeits-Dauer beschränkt werden
“Rabatt auf gesamte Bestellung”
Für jede Kundengruppe kann man einen Gesamt-Rabatt festlegen, der am Ende des Einkaufs vom Gesamtwert des Warenkorbs abgezogen wird.
“Gruppenpreise” und “Artikel-Rabatt”
“Staffelpreise” und “Artikel-Rabatt”
“Sonderangebot” und “Gruppenpreise”
“Sonderangebot” und “Artikel-Rabatt”
“Sonderangebot” und “Staffelpreise”
“Rabatt auf gesamte Bestellung” in allen Kombinationen
Vorüberlegung: Bei einem Sonderangebot sollte weder eine Staffelpreis-Tabelle noch ein Artikel-Rabatt angezeigt werden, da beide in diesem Fall ungültig sind.
Deshalb muss man dort, wo die Elemente einer Produkt-Ansicht erzeugt werden, entsprechende Abfragen zwischenschalten die eine Ausgabe davon abhängig machen, ob ein “Sonderangebot” vorliegt oder nicht. Zu bearbeiten ist also die System-Datei “product_info.php” im Ordner “meinshop.de/includes/modules/”
Eine Funktion, mit der ein eventueller Angebots-Preis abgerufen werden kann, gibt es in den Zeilen 232 bis 239 der Datei “xtcPrice.php” - zu finden im Ordner “meinshop.de/includes/classes/” - Liegt kein “Sonderangebot” vor, gibt xtcCheckSpecial($pID) den Wert Null zurück:
function xtcCheckSpecial($pID) {
$product_query = "select specials_new_products_price from ".TABLE_SPECIALS." where products_id = '".$pID."' and status=1";
$product_query = xtDBquery($product_query);
$product = xtc_db_fetch_array($product_query, true);
return $product['specials_new_products_price'];
}
Lösung 1) Ausgabe der Staffelpreis-Tabelle bei Sonderangeboten unterbinden
Im Ordner “meinshop.de/includes/modules/” - Datei “product_info.php” - wird in Zeile 150 und 151 bei vorhandenen Preisstaffelungen die Funktion zum Erzeugen der Tabelle aufgerufen
if ($_SESSION['customers_status']['customers_status_graduated_prices'] == 1)
include (DIR_WS_MODULES.FILENAME_GRADUATED_PRICE);
Die zugrundeliegende Bedingung muss dahingehend erweitert werden, dass ein Sonderpreis die den Aufruf unterbindet:
if (($_SESSION['customers_status']['customers_status_graduated_prices'] == 1) && ($xtPrice->xtcCheckSpecial($product->data['products_id']) == 0))
include (DIR_WS_MODULES.FILENAME_GRADUATED_PRICE);
Lösung 2) Ausgabe des Rabatt-Wertes bei Sonderpreisen unterbinden
Ebenfalls in der “product_info.php” wird der jeweils gültige Rabatt-Wert bestimmt und in der Variablen $discount abgelegt. Das passiert in Zeile 126 bis 133:
$discount = 0.00;
if ($_SESSION['customers_status']['customers_status_public'] == 1 && $_SESSION['customers_status']['customers_status_discount'] != '0.00') {
$discount = $_SESSION['customers_status']['customers_status_discount'];
if ($product->data['products_discount_allowed'] < $_SESSION['customers_status']['customers_status_discount'])
$discount = $product->data['products_discount_allowed'];
if ($discount != '0.00')
$info_smarty->assign('PRODUCTS_DISCOUNT', $discount.'%');
}
Die Anweisung $info_smarty->assign(’PRODUCTS_DISCOUNT’, $discount.’%'); darf nur ausgeführt werden, wenn es keinen Angebots-Preis gibt.
Demnach ist - ähnlich wie in Lösung 2) - die dazu notwendige Bedingung wie folgt zu erweitern:
$discount = 0.00;
if ($_SESSION['customers_status']['customers_status_public'] == 1 && $_SESSION['customers_status']['customers_status_discount'] != '0.00') {
$discount = $_SESSION['customers_status']['customers_status_discount'];
if ($product->data['products_discount_allowed'] < $_SESSION['customers_status']['customers_status_discount'])
$discount = $product->data['products_discount_allowed'];
if (($discount != '0.00') && ($xtPrice->xtcCheckSpecial($product->data['products_id']) == 0))
$info_smarty->assign('PRODUCTS_DISCOUNT', $discount.'%');
}
Nach diesen Änderungen sollte bei einem “Sonderpreis” auch ausschließlich eben dieser angezeigt werden. Dass sich manche Angebote de facto preiserhöhend auswirken können, ist damit nicht behoben - denn hier werden nicht wirklich Preise berechnet, sondern nur die Anzeige den berechneten Preisen angepasst.
Und auch wenn so nicht die Werte verändert werden, mit denen xt:Commerce im Hintergrund arbeitet, ist die “product_info.php” eine System-Datei - Die übliche Sicherheitskopie also bitte nicht vergessen.
Die hier veröffentlichten Code-Beispiele wurden mit einer Installation von xt:Commerce 3.04 SP1 getestet und funktionieren vermutlich nicht mit anderen Versionen. Wer nach dieser Anleitung Änderungen an seinem Shop-System vornimmt, handelt auf eigene Gefahr. Jegliche Haftung für Datenverluste, System-Ausfälle etc. wird hiermit ausdrücklich abgelehnt.
Bitte beachten Sie unbedingt die allgemeinen Hinweise zu hier veröffentlichten Code-Beispielen!
Bookmarks, Feed und Links
Wenn Ihnen dieser Beitrag geholfen hat ...
Beiträge zu ähnlichen Themen:
2 Antworten zu Sonderangebote mit xt:Commerce - falsche Anzeigen vermeiden
Kommentar schreiben