Wer im Zusammenhang mit Bestellungen schon einmal im Magento-Quelltext oder der Datenbank gestöbert hat, dem ist vermutlich der Parameter $buyRequest
in vielen Methoden bzw. die in quote items und order items gespeicherte Option info_buyRequest
aufgefallen, deren Sinn nicht direkt offensichtlich ist, da scheinbar redundante Informationen enthalten sind. Es gibt dazu auch keine eigene Model-Klasse, es ist einfach ein Varien_Object
bzw. in der Datenbank ein serialisiertes Array.
Beispiel:
mysql> select code,value from sales_flat_quote_item_option where option_id=2359; +-----------------+------------------------------------------------------------------------------------------------------------+ | code | value | +-----------------+------------------------------------------------------------------------------------------------------------+ | info_buyRequest | a:4:{s:4:"uenc";s:140:"[...],,";s:7:"product";s:4:"5000";s:15:"related_product";s:0:"";s:3:"qty";s:1:"1";} | +-----------------+------------------------------------------------------------------------------------------------------------+
Kurz gefasst: Das $buyRequest
Objekt repräsentiert die Kundenanfrage, die durch Klick auf „In den Warenkorb“ zustandekommt, alle weiteren Daten sind von diesem Objekt ableitbar. Es dient sozusagen als Generator für Quote Items. Die minimal notwendigen Daten sind also die Produkt ID (product
) und Menge (qty
).
Wozu wird das $buyRequest Objekt benötigt?
Es wird zum Beispiel beim hinzufügen eines Produkts zur Merkliste (Wishlist) angelegt, so dass es von dort mit der selben Konfiguration einfach in den Warenkorb gelegt werden kann. Beim „rekonfigurieren“, also dem Bearbeiten eines Items vom Warenkorb aus wird der buyRequest dem Produkt View übergeben, um alle Optionen vorauszuwählen.
Auch für Wiederkehrende Profile (recurring profile) und Nachbestellen (reorder) werden die $buyRequest
Objekte „wiederverwendet“, um eine neue Bestellung zu generieren.
Anwendungsfälle
Einige Beispiele, wann man sich mit dem buyRequest beschäftigen sollte:
- Programmatisches erstellen von Bestellungen. Siehe
Mage_Sales_Model_Quote::addProduct()
- Automatisches in den Warenkorb legen von komplexen Produkten. Siehe
Mage_Checkout_Model_Cart::addProduct().
- Implementierung eigener Produkttypen. Der buyRequest wird in
Mage_Catalog_Model_Product_Type_Abstract::_prepareProduct()
verarbeitet. - Manipulation von Quote oder Wishlist Items. Siehe
Mage_Sales_Model_Quote::updateItem()
undMage_Wishlist_Model_Wishlist::updateItem()
. In meiner Extension SSE_EditCustomOptions kann man sich ansehen, wie auch Custom Options in Bestellungen nachträglich angepasst werden können, indem das buyRequest-Objekt manipuliert wird. In der Extension C4B_Freeproduct wird das buyRequest-Objekt benutzt, um automatisch in den Warenkorb gelegte Geschenke zu kennzeichnen, um sie beim Nachbestellen nicht erneut in den Warenkorb zu legen. Es gibt nämlich beim Nachbestellen keine Fieldset Conversion von Order Items zu Quote Items – klar, in der Zwischenzeit hätten sich Preise oder ähnliches ändern können und das Quote soll anhand Anfrage und Produktdaten neu generiert werden. - Flexible Preise durch Konfiguration auf der Produktseite. Eigene Request-Parameter können in die Preisberechnung mit einbezogen werden. Mehr dazu schreibt Andreas von Studnitz im Artikel Umsetzung von flexiblen Preisen.