Know-How
Artikel Sonderpreise auf spezifischen Warenkorb gilt für jederman
PrestaShop kennt Sonderpreise auf einzelne Artikel, diese können im Backoffice verwaltet werden und werden in der Tabelle ps_specific_price gespeichert. In dieser Tabelle findet sich auch eine Spalte cart_id was drauf hindeutet dass Sonderpreise auf spezifische Warenkörbe beschränkt werden könnten - mit dem Stock Backoffice ist mir allerdings keine Möglichkeit bekannt dies zu tun.
Nun gibt es Module / Plugins die dieses Feld nutzen wie etwa RockPos das die Möglichkeit bietet auf einzelne Warenkörbe und Artikel Rabatte und Abzüge zu definieren. Dieses Modul schreibt diese Daten ebenfalls in die Tabelle ps_specific_price.
Leider wird dann im Frontend plötzlich für alle Besucher der Sonderpreise angezeigt anstatt nur für den User mit dem definierten spezifischen Warenkorb.
Dies liegt daran dass in der Datei /classes/specificprice.php in der Funktion getSpecificPrice() die Filterung nach dem Warenkorb (cart_id) vergessen wurde.
So sieht der Code aus:
SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).'
FROM `'._DB_PREFIX_.'specific_price`
WHERE
`id_shop` '.self::formatIntInQuery(0, $id_shop).' AND
`id_currency` '.self::formatIntInQuery(0, $id_currency).' AND
`id_country` '.self::formatIntInQuery(0, $id_country).' AND
`id_group` '.self::formatIntInQuery(0, $id_group).' '.$query_extra.'
AND IF(`from_quantity` > 1, `from_quantity`, 0) <= ';
Zur Problemlösung erweitert man die SQL Abfrage um eine zusätzliche AND Zeile:
SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).'
FROM `'._DB_PREFIX_.'specific_price`
WHERE
`id_shop` '.self::formatIntInQuery(0, $id_shop).' AND
`id_cart` '.self::formatIntInQuery(0, $id_cart).' AND
`id_currency` '.self::formatIntInQuery(0, $id_currency).' AND
`id_country` '.self::formatIntInQuery(0, $id_country).' AND
`id_group` '.self::formatIntInQuery(0, $id_group).' '.$query_extra.'
AND IF(`from_quantity` > 1, `from_quantity`, 0) <= ';
Tags