Über Plugin schreibend auf Warenkorbdaten zugreifen und Bestellbestägigung anpassen

Hallo zusammen,

ich entwickle gerade ein Plugin für einen Shop, in dem Videos zum Download angeboten werden, die aber nicht in Shopware gehostet sind, sondern kundenspezifisch auf einem Drittserver erzeugt werden. Dazu erfolgt nach Abschluss der Bestellung in Shopware ein Request an diesen Drittserver, der daraufhin pro bestelltem Video einen Download-Link zurückliefert.

Diesen Teil habe ich schon als Plugin realisiert. Nun muss ich noch den Download-Link in der Bestellbestätigung in Shopware anzeigen.

Meine Idee ist, im Plugin den Link in das Shopware-Basket-Objekt als zusätzlichen Wert zurückzuschreiben und das Template für die Bestellbestätigung so anzupassen, dass die Links jeweils bei den entsprechenden Artikeln angezeigt werden. Hat jemand Tipps für mich, wie ich das am saubersten mache? Kann ich aus einem Plugin überhaupt einen Wert im Warenkorb / in der Bestellung ergänzen?

Später soll in der Bestellübersicht des Kundenkontos ein erneuter Download möglich sein. Was wäre zu tun, damit der Download-Link auch dauerhaft in den Bestelldaten gespeichert wird?

Danke schon mal

Hyper

Das hier sollte das korrekte Event sein: shopware/sOrder.php at eb656bdca17cafbe88465d2302588b2e8bb8b9e8 · shopware/shopware · GitHub

 Also am besten darauf registrieren und deine Daten mit in “context” werfen. 

ok, verstehe. Das probier ich gleich mal.

Hast du noch nen Tipp, in welcher Smarty-Variable $context dann später im Template zur Verfügung steht?

Das ist ja weiter oben ein Array aus Variablen: shopware/sOrder.php at eb656bdca17cafbe88465d2302588b2e8bb8b9e8 · shopware/shopware · GitHub

ok, danke. Ich sehe jetzt gerade erst, dass wir hier in der Funktion sendMail() sind.

Ich möchte aber die Bestellbestätigungsseite in Shopware ändern, also /checkout/finish.

Bin ich dann in dieser Funktion trotzdem richtig?

“Bestellbestätigung” war für mich die Mail :slight_smile:

Wenn du das Template anpassen willst, kannst du das ja regulär über den Controller machen und deine Variablen dazupacken.

 

Also bspw. Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout subscriben, auf die Action prüfen und dann deine Variablen dazupacken. Das ist ja quasi schon das einfache Beispiel aus der Doku. Auf die Action kannst du dann so prüfen:

$controller = $args->get('subject');
$request = $controller->Request();
if ($request->getActionName() == 'finish') {
  //asign variables to view
}

 

1 Like

tja, wenn man sich auskennt, ist es ganz einfach, vielen Dank.

Sorry, doch noch eine kurze Frage. Zu Testzwecken hab ich jetzt einfach die product.tpl im Verzeichnis themes/Frontend/ … modifiziert, um die Download-URL einzublenden.

Um das sauber zu implementieren, muss ich da in meinem Plugin den entsprechenden Block einfach entsprechend definieren oder die ganze product.tpl?

Du kannst ein eigenes Theme-Directory in deinem Plugin registrieren und dann auch das Theme mit deinem Plugin überschreiben. Wird hier bspw. erklärt: 

https://developers.shopware.com/developers-guide/plugin-quick-start/#template-extension

https://developers.shopware.com/developers-guide/plugin-quick-start/#subscriber-classes

DANKE!