# Gratisartikel - Prämienartikel zu Warenkorb hinzufügen? Preis 0,00 funktioniert nicht

**URL:** <https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042>\
**Category:** Allgemein\
**Created:** [17. Juni 2019 um 09:15 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042 "2019-06-17T09:15:39Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![FloC3](https://avatars.discourse-cdn.com/v4/letter/f/838e76/32.png) [@FloC3](https://forum.shopware.com/u/FloC3)\
**Post date:** [17. Juni 2019 um 09:15 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042/1 "2019-06-17T09:15:39Z")

</div>

Hallo,

die normale Prämienartikel-Funktion im Shopware-Standard reicht uns nicht aus. Ich habe also ein eigenes Backend-Modul geschrieben. Für die dort abgebildeten Fälle sollen dann bestimmte Prämienartikel im Checkout in den Warenkorb gelegt werden.

```
Shopware()->Modules()->Basket()->sAddArticle($article["ordernumber"], 1);

```

soweit, so gut. Da es eine Prämie ist, soll sie natürlich GRATIS sein. Deshalb registriere ich auf das Event

```
Shopware_Modules_Basket_getPriceForUpdateArticle_FilterPrice

```

und checke dort, ob es eine Prämie ist. Wenn ja, setze ich den Preis auf 0,00. Aber das geht nicht, da der Preis mindestens 0,01 betragen muss…

Über Gutscheine kann ich es nicht abwickeln, da immer nur ein Gutschein bei Shopware einlösbar ist… das würde sich also bei mehreren Prämien oder Verbindung mit einem “echten” Gutschein in die Quere kommen…

Habe es auch versucht so zu machen wie Shopware mit den Prämienartikeln im Standard

```
return $this->db->insert(
            's_order_basket',
            [
                'sessionID' => $this->session->get('sessionId'),
                'articlename' => trim($premium['articleName'] . ' ' . $premium['additionaltext']),
                'articleID' => $premium['articleID'],
                'ordernumber' => $number,
                'quantity' => 1,
                'price' => 0,
                'netprice' => 0,
                'tax_rate' => 0,
                'datum' => new Zend_Date(),
                'modus' => 1,
                'currencyFactor' => $this->sSYSTEM->sCurrency['factor'],
            ]
        );

```

&nbsp;

… also über Modus = 1 gesteuert. Dieser Artikel fliegt jedoch jedes mal im Checkout-Confirm wieder raus… aber wieso?

&nbsp;

Wie kriege ich einen Gratisartikel hin?

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [17. Juni 2019 um 12:08 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042/2 "2019-06-17T12:08:11Z")

</div>

Vielleicht liegt es einfach daran, dass in deinem Konstrukt der Artikel nicht wirklich als Prämienartikel angelegt wurde - siehe Tabelle s\_addon\_premiums - und somit der Modus 1 hier gar nicht greifen kann. Am Ende wird der Artikel aus dem Warenkorb eben gelöscht.

---

<div class="post-metadata">

**Author:** ![FloC3](https://avatars.discourse-cdn.com/v4/letter/f/838e76/32.png) [@FloC3](https://forum.shopware.com/u/FloC3)\
**Post date:** [17. Juni 2019 um 14:03 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042/3 "2019-06-17T14:03:53Z")

</div>

Ein SQL zum Löschen aller Prämienartikel (Modus = 1) ohne Bezug zu&nbsp; **s\_addon\_premiums** &nbsp;wird aufgerufen in

**engine/Shopware/Core/sBasket::sGetBasket**

also quasi immer… is natürlich mies für mich… Die werden dann neu reingeschrieben mit Basis&nbsp; **s\_addon\_premiums&nbsp;** wie du vermutet hattest… aber das bringt mir nichts. Es gibt auch keinen Hook oder Event an der Stelle…

und jetzt? Weißt du Rat, @R4M‍? Vielleicht auch jemand von Shopware official?

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [17. Juni 2019 um 14:07 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042/4 "2019-06-17T14:07:39Z")

</div>

Bis du der Sache mit s\_addon\_premiums mal nachgegangen?

---

<div class="post-metadata">

**Author:** ![FloC3](https://avatars.discourse-cdn.com/v4/letter/f/838e76/32.png) [@FloC3](https://forum.shopware.com/u/FloC3)\
**Post date:** [17. Juni 2019 um 14:44 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042/5 "2019-06-17T14:44:18Z")

</div>

ich müsste dort dann für jeden Prämienartikel den ich anlege auch einen Insert machen. Aber ggf. gibt es mehrere Prämien pro Bestellung. Die greifen aber dann auch als normale Prämien, aber das will ich ja nicht… folglich müsste ich den SQL dort ändern, kann ich aber nicht ohne in den core zu greifen…

hätte mein Feature gern komplett getrennt vom anderen Prämien-Feature… außer dass ich halt kostenlose Artikel im Warenkorb benötige…

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [18. Juni 2019 um 06:22 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042/6 "2019-06-18T06:22:01Z")

</div>

Gibt ja schon eine Prämienartikel-Funktion im Shopware, warum das Rad neu erfinden? Wenn du aber mit “Modus 1” das nachbauen willst, dann müsstest du dich auch mit den Zusammenhängen befassen, die dann deine Fragen erklären. Wenn du einen kompletten eigenen Weg gehen willst (eigenes Plugin), dann kann ich dir hier nicht helfen. Vielleicht einen anderen Modus versuchen, wo der Artikel nicht löscht wird, und dann den Warenkorb so ändern, dass der Artikel dann 0,00 EUR anzeigt.

Artikel im Warenkorb könnte man mit “Shopware\_Controllers\_Frontend\_Checkout::getBasket::after” beeinflussen. Da findet sich schon ein Weg.

---

<div class="post-metadata">

**Author:** ![FloC3](https://avatars.discourse-cdn.com/v4/letter/f/838e76/32.png) [@FloC3](https://forum.shopware.com/u/FloC3)\
**Post date:** [18. Juni 2019 um 07:14 UTC](https://forum.shopware.com/t/gratisartikel-pramienartikel-zu-warenkorb-hinzufugen-preis-0-00-funktioniert-nicht/60042/7 "2019-06-18T07:14:22Z")

</div>

das Standardmodul kann unsere komplexen Cases, wann und für wen eine Prämie erlaubt ist, nicht abbilden.&nbsp;

Das mit dem „eigenen Modus“ war eine gute Idee. Ich nehm jetzt einfach Modus 99, das scheint zu funktionieren. Musste dazu nicht mal auf ein Event oder Hook registrieren oder so…

musste nur die confirm\_item.tpl erweitern um ein weiteres IF

```
{* Register your own mode selection *}
{block name='frontend_checkout_cart_item_additional_type'}
    {if $sBasketItem.modus == 99}
        {block name="frontend_checkout_confirm_item_product_wrapper"}
            {include file='frontend/checkout/confirm_item_product.tpl'}
        {/block}
    {/if}
{/block}

```

gibt sogar einen schon einen vorgefertigten Block dafür
