warenkorb mit mehreren sAddAccessories füllen

 Hallo, ich möchte über ein Formular gleichzeitig mehrere Artikel in den Warenkorb legen und es funkioniert leider nicht so wie es sollte. ich habe schon alle relevanten Treads ausprobiert. Bei der untenstehenden Variante werden zwar alle Artikel in den Warenkorb gelegt aber als anzahl jeweils nur 1 Muss ich bei der Formularaction vieleicht andere Angaben machen? zb.addAccessories (zwar getestet, geht aber auch nicht)

<input type="hidden" name="sAddAccessories" id="sAddAccessories" value="SW10175;SW10226;SW10162;SW10052;SW10231"><input type="hidden" name="sAddAccessoriesQuantity" id="sAddAccessoriesQuantity" value="11;1100;40;10;10">

die addAccessoriesAction hab ich auf folgendes geändert, - wie empfohlen

 public function addAccessoriesAction() { $accessories = $this-\>Request()-\>getParam('sAddAccessories'); $accessoriesQuantity = $this-\>Request()-\>getParam('sAddAccessoriesQuantity'); if(is\_string($accessories)) { $accessories = explode(';', $accessories); } if(!empty($accessories)&&is\_array($accessories)) { foreach ($accessories as $key =\> $accessory) { try { if (!empty($accessoriesQuantity[$key])){ $quantity = intval($accessoriesQuantity[$key]); }else { $quantity = 100; } $this-\>basket-\>sAddArticle($accessory, $quantity); } catch (Exception $e) { } } } $this-\>forward($this-\>Request()-\>getParam('sTargetAction', 'index')); }

scheint aber nicht zu greifen, da sonst jede Anzahl 100 sein müsste

und die addAccessories , jedoch unverändert

 private function addAccessories($accessories, $quantities) { if (is\_string($accessories)) { $accessories = explode(';', $accessories); } if (empty($accessories) || !is\_array($accessories)) { return; } foreach ($accessories as $key =\> $accessory) { try { $quantity = 1; if (!empty($quantities[$key])) { $quantity = intval($quantities[$key]); } $this-\>basket-\>sAddArticle($accessory, $quantity); } catch (Exception $e) { } } }

ich hoffe, Ihr könnt mir da weiterhelfen.

LG Jürgen

Ach so, version = 5.2.20

Hallo Jürgen,

es ist nicht besonders empfehlenswert den Shopware Code zu ändern. Du verlierst dadruch die Updatefähigkeit. Bzw. deine Änderungen werden durch das Update überschrieben. Wie sieht denn dein Formular aus. Der Code würde uns wesentlich bringen um die zu helfen.

VG Arne

 Hallo Arne, ja code nur geändert, da es sonst gar nicht ging. Wenn ich es normal lösen kann, Toll von dem normalen aufruf addArticle auf addAccessoriesAction geändert, geht aber auch nicht ich habe auch schon andere ajax methoden als ajaxAddArticleCart getestet. 
        und <input type="hidden" name="sAddAccessories" id="sAddAccessories" value="SW10175;SW10226;SW10162;SW10052;SW10231">
            <input type="hidden" name="sAddAccessoriesQuantity" id="sAddAccessoriesQuantity" value="11;1100;40;10;10">
 form name="sAddToBasket" method="post" action="https://www.test.de/staging/checkout/addAccessoriesAction" class="buybox--form" data-add-article="true" data-eventname="submit" data-showmodal="false" data-addarticleurl="https://www.test.de/staging/checkout/ajaxAddArticleCart"

 und input type="hidden" name="sAddAccessories" id="sAddAccessories" value="SW10175;SW10226;SW10162;SW10052;SW10231" input type="hidden" name="sAddAccessoriesQuantity" id="sAddAccessoriesQuantity" value="11;1100;40;10;10"

Hallo Jürgen,

bist Du schon weiter gekommen ?

Also der Code der addAccessoriesAction ist ja eindeutig. Die Mengen werden eben nicht so gesplittet wie der Artikelnummern. Du kannst aber direkt ein Array an Shopware übergeben:

 input type="hidden" name="sAddAccessories**[0]**" id="sAddAccessories" value="SW10175" input type="hidden" name="sAddAccessoriesQuantity**[0]**" id="sAddAccessoriesQuantity" value="11"

 input type="hidden" name="sAddAccessories**[1]**" id="sAddAccessories" value="SW10226" input type="hidden" name="sAddAccessoriesQuantity**[1]**" id="sAddAccessoriesQuantity" value="1100"

usw.

1 „Gefällt mir“

Super. Vielen Dank.

Hm, muss trotzdem das Script anpassen. Oder habe ich einen Denkfehler ?

Habe auf meiner Detailseite mehrere Eingabefelder für die Mengeneingabe. Nun kommt es vor, dass ein Artikel nicht benötigt wird, dann bleibt dieses Eingabefeld leer.

Wenn ich dann “in den Warenkorb” klicke, wird auch bei denen, wo kein Artikel gewünscht ist, einer in den Warenkorb gelegt.

Oder kann ich diese “leeren” Eingabefelder umgehen, so dass sie nicht in den Warenkorb gelegt werden ? 

Sorry, bin im Moment etwas irritiert :-/

 

Ich verzweifle gleich. Welches Event benötige ich, um diese Funktion komplett zu überschreiben ?

 private function addAccessories($accessories, $quantities) 

Denn hier ist wird die Menge 1 vorgegeben.

Wie kann ich das ändern ? Soweit bin ich, weiß aber nicht, ob es richtig ist:

public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => 'onPostDispatchCheckout'
        ];
    }

    public function onPostDispatchCheckout(\Enlight_Event_EventArgs $args)
    {
       $details = $args->getSubject();

    }

EDIT:

Als Contorller ist wohl dieser hier richtig ?

Enlight_Controller_Action_PreDispatch_Frontend_Checkout
da ich ja was verändern will, bevor es in den Warenkorb gelegt wird. Aber wie geht es jetzt weiter ?
Oder bin ich total auf dem Holzweg. Würde mich freuen, wenn mir jemand einen kleinen Tritt in die richtige Richtung verpasst. Danke.

 

Hm, muss trotzdem das Script anpassen.

Nein. 

Ich verzweifle gleich. Welches Event benötige ich, um diese Funktion komplett zu überschreiben ?

private function addAccessories($accessories, $quantities)

Komplett überschreiben ist ungünstig, weil nicht so wirklich update sicher. Aber du müsstet folgen Hook nutzen: Shopware_Controllers_Frontend_Checkout::addAccessories::replace

Dein PreDispatch ist schon richtig. Du kannst dann gucken ob du in der addAccessoriesAction bist und dann im Request Objekt die Daten manipulieren, die dir von deinem Formular übergeben wurden.

Sorry, ich noch Mal. Habe es jetzt so gemacht, läuft aber nicht.
Das übergebe ich:

Jetzt soll diese Position nicht in den Warenkorb gelegt werden, da die Menge = 0 ist, bzw leer. Folgendes habe ich geschrieben, funktioniert aber nicht. Jemand einen Tipp?
Sorry, dass ich soviel Frage. Aber bei diesem Thema ist der Groschen noch nicht gefallen.

namespace HPDetailSite\Subscriber;

use Enlight\Event\SubscriberInterface;

class HPCheckout implements SubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PreDispatch_Frontend_Checkout' => 'onPreDispatchCheckout',
            'Shopware_Controllers_Frontend_Checkout::addAccessories::replace' => 'onAddAccessories'
        ];
    }

    public function onPreDispatchCheckout(\Enlight_Event_EventArgs $args)
    {

    }

    public function onAddAccessories(\Enlight_Hook_HookArgs $args)
    {
        $return = $args->getReturn();

        foreach ($return['accessories'] as $key => $accessory) {
            if (empty($return['quantity'][$key]) || $return['quantity'] == 0) {
                $return['accessories'][$key] = '';
            }
        }
    }
}

Schon jetzt ein Danke für Eure Hilfe.

Du musst die Methode nicht überschreiben. Hier ein Beispiel von einem unserer Plugin, das ebenfalls diese accessories nutzt: https://github.com/aquatuning/atsd-article-accessory-direct-buy
Live (rechts unter dem Preis “Empfohlenes Zubehör”): http://www.aquatuning.de/wasserkuehlung/pumpen/d5-serie/alphacool-eispumpe/20531/alphacool-eispumpe-vpp755-single-edition

Viele Grüße

1 „Gefällt mir“

Vielen Dank euch beiden. Jetzt habe ich es. SUPI.

Hi,

brauch noch Mal einen Rat. Habe jetzt meine Detailseite soweit fertig. Bevor ich jetzt lange suche, wollte ich fragen, ob jemand weiß, wie ich folgende zwei Dinge bekämpfen kann:

  1. Bis auf die erste Variante, hier wird das Packshot in der richtigen Farbe angezeigt, wird mir bei den anderen Artikeln das Hauptbild im Warenkorb angezeigt, also nicht das Packshot. 
  2. Im Warenkorb steht „Bitte wählen Sie eine Variante aus, um den gewünschten Artikel in den Warkorb zu legen“. Wie kann ich das abstellen ?

Jetzt ist es wieder spät. Hoffe mir kann jemand helfen. Danke.

Danke und Gruß
HEPI

Die 1te Frage hat sich erledigt. Hatte die Varianten neu berechnen/erstellen lassen und dachte nicht daran, die Bilder wieder zuzuordnen. Jetzt gemacht und schon ist alles richtig im Warenkorb. Sorry.