Ich findes es immer toll, wenn bei einem als gelöst markierten Beitrag, die Lösung mit dabei steht. Deshalb hier mein Lösungsweg.
Ziel war es, das Warenkorbfeld bzw. die Summe dynamisch neu zu berechnen. Wir haben für gewisse Artikel Preise pro 100 St. um auf den richtigen Preis zu kommen muss bei der Summenberechnung der Artikel mit der Menge multipliziertund anschließend durch 100 geteilt werden. Als Beispiel:
100 St. kosten 50€. Bestellt werden 90 St. -> (90 * 50) / 100 = 45€
Ich subscribe den Hook
sBasket::sGetAmount::after
In meiner function hole ich mir das return array und erhalte die Summe des Warenkorbes (totalAmount):
# Das Return Array holen
$return = $arguments->getReturn();
# Summe im Warenkorb
$return['totalAmount']
Nun brauche ich eine Datenbankabfrage um an das attribut Feld, in meinem Fall GC_FAKTOR, zu kommen.
$db = Shopware()->DB();
$session_id = Shopware()->SessionID();
$result = $db->fetchAll(
'SELECT
sob.quantity as quantity,
sob.price as price,
saa.GC_FAKTOR as faktor
FROM
s_order_basket as sob,
s_articles_attributes as saa
WHERE
sob.articleID = saa.articleID
AND
sessionID = ?',
array($session_id)
);
Da ich nun mein attribute Feld, die Menge und den Preis habe kann ich nun den Wert in totalAmount überschreiben:
# So nun wird die neue Summe in des Warenkorb geschrieben
$return['totalAmount'] = $new_amount;
# Un das ganze zurück geben
$arguments->setReturn($return);
Da in der abgefragten Tabelle bereits der richtige Preis liegt (Staffelpreise, Sonderangebote etc.) ist das Ganze relativ sicher und einwandfrei zu benutzen. Es wäre schön, wenn ich hierfür keinen Hook bräuchte, da aber die function sGetAmount warscheinlich nie von Shopware ersetzt wird ist das Ganze updatesicher!
Falls jemand einen performanteren Vorschlag hätte - immer her damit.
Einen schönen Tag noch
-Flo