Ich höre das Ereignis sales_quote_save_before ab , um festzustellen , wann ein Artikel zum Warenkorb hinzugefügt wird. Sobald es abgefeuert ist, gehe ich die folgenden Optionen durch:
$quote = $observer->getEvent()->getQuote();
foreach ($quote->getAllItems() as $item) {
$options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
foreach($options['options'] as $option) {
if($option['label'] == 'myOptionA') {
// Here I want to change the selected value for the option
}
}
}
Wie Sie sehen, möchte ich die ausgewählte Option ändern, sobald eine bestimmte Option (im Beispiel myOptionA) erreicht ist. Nehmen wir also an, myOptionA ist ein Dropdown-Menü und hat 4 mögliche Werte. Wenn der Wert 1 ausgewählt ist, möchte ich den Wert 4 für dieses Element festlegen. Wenn der Warenkorb fertig geladen ist, sollte er für myOptionA den Wert 4 haben. Nicht nur der Name, sondern auch der Preis. Wie könnte ich das machen?
cart
event-observer
custom-options
user1638055
quelle
quelle
Antworten:
Sie können
catalog_product_type_prepare_full_options
stattdessen einen Beobachter für das Ereignis schreiben. Dies ist das letzte Ereignis im Prozess zum Hinzufügen zum Warenkorb, bevor das Produkt tatsächlich zum Warenkorb hinzugefügt wird und nachdem die benutzerdefinierten Optionen vorbereitet wurden.Im Beobachter stehen folgende Parameter zur Verfügung:
transport->options
ist ein Array in der Formoption_id => option_value
. Achtung, der Transport selbst ist einstdClass
Objekt, keine Instanz vonVarien_Object
, wie Sie vielleicht erwarten. Es gibt also keine Getter- und Setter-Methoden fürtransport->options
.buy_request: Das buyRequest-Objekt können Sie hier lesen und trotzdem ändern. Es ist eine
Varien_Object
, die unter anderem enthält:Optionen: Array von benutzerdefinierten Optionen im Formular:
Ihr Beobachter könnte also so aussehen:
Der erste Teil (Ändern
$transport
) ist relevant, um den Wert der Option OPTION_A_ID tatsächlich zu ändern. Der zweite Teil (Ändern$buyRequest
) ist optional. Er löscht nur alle Spuren des vom Kunden ausgewählten Werts. Wenn er die Bestellung nachbestellt, wird der neue Wert sofort ausgewählt, da die Kaufanforderung mit den geänderten Parametern "ausgeführt" wird. Sie müssen sich entscheiden, ob Sie das wollen.quelle
Wenn Sie Ihr Attribut über den Code eingerichtet haben, dh mithilfe eines Installationsskripts, finden Sie Ihr Attribut als Spalte unter
sales_flat_quote_item
.Wenn es dort vorhanden ist und Zugriff auf die Variable $ item hat, sollten Sie in der Lage sein, magische Methoden zu verwenden, die sich auf Ihr Attribut beziehen:
Wenn dies der Fall ist, sollten Sie den Code wie folgt vereinfachen können:
Wie bereits erwähnt, bezieht sich diese Lösung nur auf die programmgesteuert eingerichteten Angebotsartikelattribute.
quelle