# artikel mit selber artikel-Nr im warenkorb trennen

**URL:** <https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [21. November 2013 um 18:30 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938 "2013-11-21T18:30:18Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![pino](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/pino/32/14373_2.png) [@pino](https://forum.shopware.com/u/pino)\
**Post date:** [21. November 2013 um 18:30 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/1 "2013-11-21T18:30:18Z")

</div>

hi zusammen, im standard werden artikel mit selber nummer im warenkorb zusammen geführt. macht ja auch sinn. nun möchte ich zusatzinformationen (textfeld) einem artikel zuordnen. das wird brav in den attr geschrieben. nehm ich mir nun den selben artikel mit anderer zusatzinformation, wird alles überschrieben. das will ich verhindern. also soll jeder artikel einzeln im warenkorb landen. hat jemand ein tipp für mich, danke.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [21. November 2013 um 18:46 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/2 "2013-11-21T18:46:09Z")

</div>

[quote=„pino“]hi zusammen, im standard werden artikel mit selber nummer im warenkorb zusammen geführt. macht ja auch sinn. nun möchte ich zusatzinformationen (textfeld) einem artikel zuordnen. das wird brav in den attr geschrieben. nehm ich mir nun den selben artikel mit anderer zusatzinformation, wird alles überschrieben. das will ich verhindern. also soll jeder artikel einzeln im warenkorb landen. hat jemand ein tipp für mich, danke.[/quote] Nabend, lass die Arbeit SW machen. AddArticle Hooks Before -\> Artikelnummer manipulieren, hinten -temp dran hängern. AddArticle Hooks After -\> Artikelnummer wieder korrigieren! spricht -temp entfernen. Schon hast du für jeden Artikel eine eigene Besttellposition, da shopware immer eine eigene Position macht, wenn der Artikel noch nicht vorhanden ist (Artikelnummer)

---

<div class="post-metadata">

**Author:** ![pino](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/pino/32/14373_2.png) [@pino](https://forum.shopware.com/u/pino)\
**Post date:** [21. November 2013 um 19:44 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/3 "2013-11-21T19:44:03Z")

</div>

gute idee. mein before will noch nicht so recht. so siehen meine hooks aus: ` $this-\>subscribeEvent( 'sBasket::sAddArticle::before', 'onAddArticleActionBefore' ); // rückgabe leer :( public function onAddArticleActionBefore (Enlight\_Hook\_HookArgs $args){ $result = $args-\>getReturn(); $this-\>diePhp($result); } // $this-\>subscribeEvent( 'sBasket::sAddArticle::after', 'onAddArticleActionAfter' ); // basket id public function onAddArticleActionAfter (Enlight\_Hook\_HookArgs $args){ $basketID = $args-\>getReturn(); } `

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [21. November 2013 um 20:00 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/4 "2013-11-21T20:00:25Z")

</div>

Vor dem Aufruf (bzw hook) einer Methode existiert noch gar kein return Wert. Siehe: [http://wiki.shopware.de/Shopware-4-Even … efore\_Hook](http://wiki.shopware.de/Shopware-4-Events-und-Hooks%5C_detail%5C_981.html#Before%5C_Hook) Viele Grüße

---

<div class="post-metadata">

**Author:** ![pino](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/pino/32/14373_2.png) [@pino](https://forum.shopware.com/u/pino)\
**Post date:** [21. November 2013 um 20:07 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/5 "2013-11-21T20:07:20Z")

</div>

wie manipuliere ich den die ordernumber? seh in der methode, das zuerst nach dem artikel anhand von ordernumber gesucht wird. ein ` $param = $args-\>getArgs(); $args-\>set('id', $param[0].'\_tmp'); ` brint mir da ja nix; // edit hab’s nun mal mit event-filter versucht, leider auch ohne erfolg ☹ ` $this-\>subscribeEvent( 'Shopware\_Modules\_Basket\_AddArticle\_FilterSql', 'onAddArticleFilterSql' ); public function onAddArticleFilterSql (Enlight\_Event\_EventArgs $arguments){ $sql = $arguments-\>getReturn(); $article = $arguments-\>getArticle(); $article['ordernumber'] = $article['ordernumber'].'\_tmp'; $sql = " INSERT INTO s\_order\_basket ( id, sessionID, userID, articlename, articleID, ordernumber, shippingfree, quantity, price, netprice, datum, esdarticle, partnerID, config )VALUES ( ?, ?, ?, ?, ?, '".$article['ordernumber']."', ?, ?, ?, ?, ?, ?, ?, ? ) "; return $sql; } ` kein fehler kein garnix. wird irgendwie ignoriert. // edit nachdem ich mal mein 100 artikel im warkorb gelöscht habe. ist mir dann doch das sql um dir ohren geflogen. also hat das ganze schonmal einen effekt. ich frag mich dabei nur, warum kann ich die params nicht ändern? die sql ist mir eigentlich egal. naja, ich warte mal was ottscho morgen zeigt.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [21. November 2013 um 20:46 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/6 "2013-11-21T20:46:06Z")

</div>

Wenn ich morgen im Büro bin, poste ich dir den Code. Du frägst in den parm die ordernumber ab und änderst per SQL im Warenkorb Tabelle die ordernumber. Und in der After änderst du die Nummer wieder zurück.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [22. November 2013 um 08:46 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/7 "2013-11-22T08:46:00Z")

</div>

Morgen Pino, probier das mal. Sollte klappen: ` $this-\>subscribeEvent( 'sBasket::sAddArticle::before', 'onBasket\_AddArticle\_Before' ); $this-\>subscribeEvent( 'sBasket::sAddArticle::after', 'onBasket\_AddArticle\_After' ); ` ` public function onBasket\_AddArticle\_Before(Enlight\_Hook\_HookArgs $args) { $params = $args-\>getArgs(); $session = $args-\>getSubject()-\>sSYSTEM-\>sSESSION\_ID; $orderNumber = isset($params[0]) ? $params[0] : ''; if (empty($orderNumber)) { return; } $orderNumberTmp = $orderNumber . '\_OttTemp'; $sql = 'UPDATE s\_order\_basket ob SET ob.ordernumber=? WHERE ob.ordernumber=? AND ob.sessionID=? AND ob.modus=0'; Shopware()-\>Db()-\>query($sql,array( $orderNumberTmp, $orderNumber, $session )); } public function onBasket\_AddArticle\_After(Enlight\_Hook\_HookArgs $args) { $params = $args-\>getArgs(); $session = $args-\>getSubject()-\>sSYSTEM-\>sSESSION\_ID; $orderNumber = isset($params[0]) ? $params[0] : ''; if (empty($orderNumber)) { return; } $orderNumberTmp = $orderNumber . '\_OttTemp'; $sql = 'UPDATE s\_order\_basket ob SET ob.ordernumber=? WHERE ob.ordernumber=? AND ob.sessionID=? AND ob.modus=0'; Shopware()-\>Db()-\>query($sql,array( $orderNumber, $orderNumberTmp, $session )); } `

---

<div class="post-metadata">

**Author:** ![pino](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/pino/32/14373_2.png) [@pino](https://forum.shopware.com/u/pino)\
**Post date:** [22. November 2013 um 11:51 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/8 "2013-11-22T11:51:33Z")

</div>

ottscho, das ist der hammer. warum auch immer das funktioniert, es funktioniert. heißt dass, das ::before permanent ausgeführt wird, und erst wenn return wird ::after ausgeführt? wenn ich mir die sBasket::sAddArticle methode ansehe, wird am anfang nach dem artikel gesucht, wenn vorhanden nach ordernumber in s\_order\_basket. Dann insert oder update. wann wird in s\_order\_basket geschrieben und kann mit ::before nachsehen?

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [22. November 2013 um 12:14 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/9 "2013-11-22T12:14:56Z")

</div>

korrekt. du änderst in before die artikelnummer. Somit schaut sw nach und bemerkt das es den artikel noch nicht im WK gibt. und später im after änderst du die nummer wieder zurück.

---

<div class="post-metadata">

**Author:** ![RainerF](https://avatars.discourse-cdn.com/v4/letter/r/77aa72/32.png) [@RainerF](https://forum.shopware.com/u/RainerF)\
**Post date:** [21. April 2014 um 21:56 UTC](https://forum.shopware.com/t/artikel-mit-selber-artikel-nr-im-warenkorb-trennen/16938/10 "2014-04-21T21:56:54Z")

</div>

Shopware scheint das seit kurzem nicht mehr zu erlauben: Es werden automatisch Artikel gelöscht, deren “ordernumber” nicht existiert. Ein funktionierender Workaround, der dieselbe Idee (diesmal jedoch durch Manipulation der Session) aufgreift, funktioniert jedoch: ` public function split\_cart\_item\_before(Enlight\_Hook\_HookArgs $args) { $params = $args-\>getArgs(); $session = $args-\>getSubject()-\>sSYSTEM-\>sSESSION\_ID; $orderNumber = isset($params[0]) ? $params[0] : ''; if (empty($orderNumber)) { return; } $sessionTmp = $session.'\_Temp'; $sql = 'UPDATE s\_order\_basket ob SET ob.sessionID=? WHERE ob.ordernumber=? AND ob.sessionID=? AND ob.modus=0'; Shopware()-\>Db()-\>query($sql,array($sessionTmp,$orderNumber,$session)); } public function split\_cart\_item\_after(Enlight\_Hook\_HookArgs $args) { $params = $args-\>getArgs(); $session = $args-\>getSubject()-\>sSYSTEM-\>sSESSION\_ID; $orderNumber = isset($params[0]) ? $params[0] : ''; if (empty($orderNumber)) { return; } $sessionTmp = $session.'\_Temp'; $sql = 'UPDATE s\_order\_basket ob SET ob.sessionID=? WHERE ob.ordernumber=? AND ob.sessionID=? AND ob.modus=0'; Shopware()-\>Db()-\>query($sql,array($session,$orderNumber,$sessionTmp)); } `
