# Auf Detail Seite einen Gutschein zum Warenkorb hinzufügen

**URL:** https://forum.shopware.com/t/auf-detail-seite-einen-gutschein-zum-warenkorb-hinzufugen/48961
**Category:** Programmierung
**Created:** [20. Oktober 2017 um 12:35 UTC](https://forum.shopware.com/t/auf-detail-seite-einen-gutschein-zum-warenkorb-hinzufugen/48961 "2017-10-20T12:35:06Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![kluckow](https://avatars.discourse-cdn.com/v4/letter/k/13edae/32.png) [@kluckow](https://forum.shopware.com/u/kluckow)
#### Post date: [20. Oktober 2017 um 12:35 UTC](https://forum.shopware.com/t/auf-detail-seite-einen-gutschein-zum-warenkorb-hinzufugen/48961/1 "2017-10-20T12:35:06Z")

</div>

Hallo liebe Shopware Community,

im Rahmen eines Plugins (Shopware 5.2.27) will ich Folgendes umsetzen:

Es beginnt damit, dass man von extern auf die Detail-Seite eines Artikels verlinkt wird (mit Zusatz eines **?code=MYCODE** Parameters). Dieser Parameter wird dann beim Verarbeiten des&nbsp; **Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Detail** &nbsp;Events&nbsp;dazu verwendet, um zu überprüfen, ob der Gutschein auf den aufgerufenen Artikel zutrifft oder nicht. Je nach dem wird dann unter dem eigentlichen Preis des Artikels der Preis des Artikels inklusive Gutschein dargestellt.

Bis hierhin ist alles kein Problem.

Nun möchte ich aber auch, wenn der Benutzer auf “In den Warenkorb” klickt, dass dieser Gutschein als Item in dem rechts eingeblendeten Warenkorb aufgelistet wird.

Das eigentliche Hinzufügen in den Warenkorb habe ich schon durchführen können, allerdings nur hard-coded (im&nbsp; **Shopware\_Modules\_Basket\_AddArticle\_Added** &nbsp;Event):

```
public function onBasketAddArticleAdded(\Enlight_Event_EventArgs $args)
{
    $this->basket = Shopware()->Modules()->Basket();
    $code = 'MYCODE';
    $this->basket->sAddVoucher($code);
    $this->basket->sRefreshBasket();
}

```

Das hat dann zur Folge, dass das&nbsp;Gutschein-Item wie gewünscht rechts im Warenkorb angezeigt wird und es&nbsp;auch im Checkout dann korrekt angezeigt wird.

Das Probem hierbei ist, dass ich in dem&nbsp; **Shopware\_Modules\_Basket\_AddArticle\_Added** &nbsp;keinen Zugriff auf den&nbsp;GET-Parameter **code** &nbsp;habe, weil das Hinzufügen des Artikels über einen AJAX-Call geschieht (**…\engine\Shopware\Controllers\Frontend\Checkout.php-\>ajaxAddArticleCartAction()**).

An dieser Stelle habe ich einfach keine Idee, wie man hier vorgehen könnte.

Ich bin für jeden Hinweis dankbar 🙂

Vielen Dank im Voraus!

---

<div class="post-metadata">

### Author: ![hhmarco73](https://avatars.discourse-cdn.com/v4/letter/h/ed8c4c/32.png) [@hhmarco73](https://forum.shopware.com/u/hhmarco73)
#### Post date: [21. Oktober 2017 um 08:01 UTC](https://forum.shopware.com/t/auf-detail-seite-einen-gutschein-zum-warenkorb-hinzufugen/48961/2 "2017-10-21T08:01:35Z")

</div>

Eine Möglichkeit wäre nach durchgeführter Prüfung in dem Event&nbsp;Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend\_Detail den Code in die Session zu schreiben. Dann in onBasketAddArticleAdded prüfen, ob Code in der Session vorhanden ist und wenn zutreffend, sAddVoucher aufrufen und den Code aus der Session löschen.&nbsp;

---

<div class="post-metadata">

### Author: ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)
#### Post date: [21. Oktober 2017 um 11:57 UTC](https://forum.shopware.com/t/auf-detail-seite-einen-gutschein-zum-warenkorb-hinzufugen/48961/3 "2017-10-21T11:57:33Z")

</div>

Man müsste ebenfalls wenn der Parameter übergeben wird den HttpCache ausstellen, sonst passiert nach dem ersten Request nix mehr.

---

<div class="post-metadata">

### Author: ![hhmarco73](https://avatars.discourse-cdn.com/v4/letter/h/ed8c4c/32.png) [@hhmarco73](https://forum.shopware.com/u/hhmarco73)
#### Post date: [22. Oktober 2017 um 07:34 UTC](https://forum.shopware.com/t/auf-detail-seite-einen-gutschein-zum-warenkorb-hinzufugen/48961/4 "2017-10-22T07:34:17Z")

</div>

Du meinst, wenn [https://www.muster.de/detailseite?code=MYCODE](https://www.muster.de/detailseite?code=MYCODE) aufgerufen wird? Wenn es unterschiedliche Codes sind, dann aber nicht?

---

<div class="post-metadata">

### Author: ![kluckow](https://avatars.discourse-cdn.com/v4/letter/k/13edae/32.png) [@kluckow](https://forum.shopware.com/u/kluckow)
#### Post date: [23. Oktober 2017 um 08:33 UTC](https://forum.shopware.com/t/auf-detail-seite-einen-gutschein-zum-warenkorb-hinzufugen/48961/5 "2017-10-23T08:33:41Z")

</div>

Danke erstmal für die Vorschläge.

Aber ich habe eine recht simple Lösung gefunden.

Problem war ja, dass beim Klick auf&nbsp; **In den Warenkorb** &nbsp;ein AJAX-Call stattfindet, der meinen code-Parameter nicht mit übergeben bekommt. Dieser Button befindet sich innerhalb eines Forms. Dessen Template habe ich einfach überschrieben und hier kommt dann das [Smarty URL Plugin](https://developers.shopware.com/designers-guide/smarty-plugins/#url-plugin) ins Spiel. Dadurch hat man die Möglichkeit für die action (data-addArticleUrl), die den AJAX-Call processed&nbsp;Folgendes zu machen:

```
data-addArticleUrl="{url controller=checkout action=ajaxAddArticleCart code=$code}"

```

Man setzt also einfach ein custom Parameter (der wird dann einfach dem Template assigned), und shopware tut dies auch an vielen Stellen, wenn auch nur an den Standard Form action-Attributen. Der AJAX-Call sieht dann so aus:

```
.../checkout/ajaxAddArticleCart/code/TEST2?callback=jQuery21408800079466597899_1508746020110&sActionIdentifier=&sAddAccessories=&sAdd=SW10054&sQuantity=1&__csrf_token=1IO3d1UyaMKgHwaDX9IWYA1cEZq1de&isXHR=1&_=1508746020117

```

Was mich hierbei noch wundert ist, dass der custom Paramter in der Route auftaucht anstatt als Parameter. Dennoch habe ich dann die Möglichkeit in der onBasketAddArticleAdded mit $\_GET[‘code’] den code abzufragen.

Ich hatte auch schon an die Session gedacht, aber ich hatte schon eine Vermutung, dass shopware hier etwas parat hat.
