ich möchte gerne ein Plugin schreiben, das von allen Produkten im Warenkorb die maximale Lieferzeit berechnet, so dass ich
die Lieferzeit angeben kann, wenn alles gleichzeitig versendet wird.
Dazu suche ich ein Event, das bei jedem Aufruf des Warenkorbs (sowohl statisch also auch Fly-in) aufgerufen wird.
Ausserdem würde ich die maximale Lieferzeit über alle Produkte einer Bestellung in einem Order Attribut speichern.
Dazu benötige ich ein Event bei Bestellabschluss.
Welche Events kann ich nehmen? Wie kann ich solche Events selbst finden?
ich würde dafür das Event sBasket::sGetBasket::after testen (alternativ sBasket::sGetBasketData::after, ab SW 5.2). Da bekommst du den kompletten Warenkorb des Kunden zurück. Dann brauchst du dazu nur noch die s_articles_details.instock und kannst damit zu den Artikeln im Warenkorb die höchste Lieferzeit ermitteln.
Zum Speichern würde ich sOrder::sSaveOrder::after nehmen, in der Methode sSaveOrder gibt es aber auch noch eine Reihe weiterer Events, die man nutzen könnte.
public function install()
{
$this->subscribeEvent(
'sBasket::sGetBasket::after',
'article_update'
);
$this->createConfig();
return true;
}
public function article_update(Enlight_Hook_HookArgs $args)
{
//go over all products in the basket and get maximum shipping time
$content = $args->getReturn()['content'];
$max_shippingtime = 0;
foreach ($content as $product) {
$shippingtime = $product['shippingtime'];
$max_shippingtime = max($max_shippingtime, $shippingtime);
fwrite($dbg_file," " . $product['articlename'] . ": " . $shippingtime . ", max= " . $max_shippingtime);
}
}
Doch ich habe mal ein Plugin dafür geschrieben, das ich Dir auch gerne schicken kann.
Aber Vorsicht: das Ding ist ziemlich zusammengehackt. Wenn ich mich recht erinnere schreibt es auch nur Smarty Variablen raus, die Du in Deinem Template selbst einbauen must.