Frage zu Plugin "Individuelle Optionen für Artikel"

Hallo zusammen, wir würden gerne das Plugin für die individuellen Optionen verwenden, aber ein kleiner Teil der Funktionalität passt für uns leider nicht. Es ist kein Bug, denn die Funktionalität ist auch genau so im Wiki beschrieben. Folgendes ist das Problem: Der Kunde bestellt einen Artikel mit Variante X und Y. Der Artikel wird richtig mit seinen Varianten im Warenkorb angezeigt. Den gleichen Artikel will er nun nochmal mit Variante Y und Z bestellen. Tut er dies, werden im Warenkorb die Varianten des ersten Artikels mit den Varianten des zweiten Artikels überschrieben und sind nicht mehr ersichtlich. Logischer wäre es doch, wenn jede Varianten-Kombination als eine Art temporärer Artikel im Warenkorb auftauchen würde. So ist es ja gar nicht möglich einen Artikel mehrfach in verschiedenen Varianten zu ordern. Meine Frage ist nun: Lässt sich dies irgendwie bewerkstelligen? Danke und viele Grüße, Rebecca

Nun die Lösung habe ich auch nicht. Aber es gibt auch noch ein anderes Problem mit diesen Plugin. Sobald man eine Mengenstaffel hinterlegt hat und später im Warenkorb die Menge ändert, wird der Preis nicht neu berechnet. Das führt dazu, dass jemand der die Menge erhöht nicht den besseren Preis bekommt bzw. auch umgekehrt gleich die Höchtsmenge nimmt und dann auf eine Einheit reduziert, der bekommt den besten Preis.

Gibt es hierzu vielleicht eine Stellungnahme von Shopware? Ist ein Update des Plugins denkbar? Wenn man einen Artikel nicht doppelt in den Warenkorb legen kann macht das Plugin ja nicht so viel Sinn. Oder ist eine selbstständige Erweiterung grundsätzlich möglich?

PUSH Hallo, auch wir haben da Problem mit dem Plugin :(. Der Kunde kann für Porzellanschilder die Beschriftung angeben, und wenn er mehrere Schilder einer Sorte bestellt, wird nur der letzte Text übermittelt. Wir bitten Shopware :shopware: um eine Antwort.

Hallo zusammen, die „einfachste“ Lösung ist es, eine Individualanpassung (Programmierung) an den Warenkorbfunktionen vorzunehmen. Grundlegende Informationen zur Anpassung von sollte das Wiki liefern - ansonsten Angebot beim IT-Partner oder shopware anfragen. Viele Grüße, Rafael Kutscha

So bring das Plugin aber wenig.:frowning: Wenn ich eine Artikel mit z.B. verschiedenen Texten haben will geht es nicht, weil nur der letzte Text übernommen wird. Der große Artikelkonfigurator hat keine Individualtexte. Entweder generiert diese Plugin Artikelnummern (SW20010-xx) oder die Artikelmenge wird nicht aktualisiert. Kann man die Warenkorbfunktion so anpassen, dass gleiche Artikel in der Menge nicht addiert werden?

Das müsste durch lokales Überschreiben der Methode „sUpdateArticle“ aus der sBasket.php möglich sein. Hier kann man dann definieren, wann ein Update der Bestellmenge erfolgen soll und wann der Artikel separat in den Warekorb gelegt werden soll. Viel Erfolg!

1 „Gefällt mir“

Hallo, ich habe mal die sBasket.php in /engine/core/class angepasst. Der einfachheit halber wird jetzt für JEDEN Artikel eine neue Position eingefügt, auch wenn der Artikel keine individuellen Optionen hat. Folgende Zeilen wurden mit “//” auskommentiert (ab Zeile 2000) $insertTime = date("Y-m-d H:i:s"); //Anzahl der Artikel nicht erhöhen - immer neue Position //if ($chkBasketForArticle&&empty($sUpPriceValues)){ // Article is already in basket, update quantity //$quantity += $chkBasketForArticle["quantity"]; //$this-\>sUpdateArticle($chkBasketForArticle["id"],$quantity); //return $chkBasketForArticle["id"]; //}else { // Get prices if ($sConfigurator){ Und die schließende Klammer } in 2058! Ich werde die Abfrage mal um die “individuelle Option” erweitern. So ist die Veränderung allerdings nicht updatesicher, aber so gehen wenigstens keine Optionen verloren. Die Anpassung läuft unter rosengarten24.de

Hi, ich habe mal dein Code Probiert. Soweit sieht das auch ganz gut aus. Er trägt mir identische Artikel mit gleichen Eigenschaften in den Warenkorb. Sobald ich nun aber ein Refresh mache. Löscht er mir dann eine Position leider wieder aus dem Warenkorb. Neh idee wie ich dies verhindere? LG Patrick

Hi, den “Refresh” kann ich nicht nachvollziehen. Wobei genau geht dir ein Artikel verloren? Hier läuft alles. LG Matthias

Also bei uns ist es wie folgt Es gibt Aritkel die per Shopware Artikel Konfigurator erstellt werden und es gibt Artikel die werden über die Flächenberechnung von Herrn Ott erstellt. Setze ich das nun so um die du es beschrieben hast. Werden mir die Artikel die über den Konfigurator erstellt werden garnicht mehr in den Warenkorb eingetragen. Bei den Artikeln die über die Flächenberechnung kommen werden diese zwar in den Warenkorb eingetragen. Auch Artikel mit identischen Eigenschaften aber sobald ich nun den Warenkorb refresh dann scheint es für mich als ob ein Prüfscript drüber läuft was doppelte Positionen aus dem Warenkorb entfernt. LG Patrick

Dann sollte die if-Abfragen erweitert werden. Da ich aber bei keinem Projekt den Artikelkonfigurator oder das Flächenmodul einsetzte, kann ich da nicht viel zu sagen. Beim Flächenmodul kann ja evt. der Hersteller helfen. Aber bei eurem Hintergrund sollte eine Individualprogrammierung doch möglich sein :slight_smile: Gruß Matthias

Nach dem “schnellen Eingreifen” ins System habe ich die Umstellung nun mal nach den Shopwarevorgaben vollzogen: Aus der sBasket.php wird die Funktion “sAddArticle” in eine neue myBasket.php kopiert, die angegebenen Veränderungen vornehmen (speichern unter engine/core/class/inherit) und in der Datenbanktabelle s_core_factory eintragen. Die originale sBasket.php sollte dann unverändert bleiben, damit das System updatesicher ist. Anleitung Shopware hier. Matthias

Ich muss diesen alten Thread noch einmal hochholen. Die Lösung direkt in der sBasket.php klappt super. Leider habe ich noch Probleme das ganze als Plugin/Hook einzuarbeiten Bei Mir sieht die Bootstrap jetzt so aus: <?php class Shopware_Plugins_Frontend_mybasket_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function install() { $hook = $this->createHook( 'sBasket', 'sAddArticle', Enlight\_Hook\_HookHandler::TypeReplace, 0 ); $this-\>subscribeEvent( 'sBasket::sAddArticle::replace', 'replaceAddArticle' ); return true; } public function sAddArticle ($id, $quantity=1) { if ($this-\>sSYSTEM-\>sBotSession) return false; if (empty($this-\>sSYSTEM-\>sSESSION\_ID)) return false; $quantity = (empty($quantity)||!is\_numeric($quantity)) ? 1 : (int) $quantity; if ($quantity\<=0) $quantity = 1; if (Enlight()-\>Events()-\>notifyUntil('Shopware\_Modules\_Basket\_AddArticle\_Start', array('subject'=\>$this,'id'=\>$id,"quantity"=\>$quantity))){ return false; } $sql = " SELECT s\_articles.id AS articleID, name AS articleName, taxID, additionaltext, s\_articles\_details.shippingfree,laststock,instock, s\_articles\_details.id as articledetailsID, ordernumber FROM s\_articles, s\_articles\_details WHERE s\_articles\_details.ordernumber=? AND s\_articles\_details.articleID=s\_articles.id AND s\_articles.active = 1 AND ( SELECT articleID FROM s\_articles\_avoid\_customergroups WHERE articleID = s\_articles.id AND customergroupID = ".$this-\>sSYSTEM-\>sUSERGROUPDATA["id"]." ) IS NULL "; $getArticle = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetRow($sql,array($id)); $getName = $this-\>sSYSTEM-\>sMODULES["sArticles"]-\>sGetArticleNameByOrderNumber($getArticle["ordernumber"],true); if (!empty($getName)){ $getArticle["articleName"] = $getName["articleName"]; $getArticle["additionaltext"] = $getName["additionaltext"]; } if (!count($getArticle)){ //$this-\>sSYSTEM-\>E\_CORE\_WARNING ("BASKET-INSERT #00","Article $id not found"); //unset($this-\>sSYSTEM-\>\_GET["sAdd"]); return false; }else { // Check if article is already in basket $sql = " SELECT id, quantity FROM s\_order\_basket WHERE articleID=? AND sessionID=? AND ordernumber=?"; $chkBasketForArticle = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetRow($sql,array($getArticle["articleID"],$this-\>sSYSTEM-\>sSESSION\_ID,$getArticle["ordernumber"])); // Shopware 3.5.0 / sth / laststock - instock check if (!empty($chkBasketForArticle["id"])){ if ($getArticle["laststock"] == true && $getArticle["instock"] \< ($chkBasketForArticle["quantity"] + $quantity) ){ $quantity -= $chkBasketForArticle["quantity"]; } }else { if ($getArticle["laststock"] == true && $getArticle["instock"] \<= $quantity){ $quantity = $getArticle["instock"]; if ($quantity \<= 0){ return; } } } // -- $insertTime = date("Y-m-d H:i:s"); //Anzahl der Artikel nicht erhöhen - immer neue Position // if ($chkBasketForArticle&&empty($sUpPriceValues)){ // Article is already in basket, update quantity // $quantity += $chkBasketForArticle["quantity"]; // $this-\>sUpdateArticle($chkBasketForArticle["id"],$quantity); // return $chkBasketForArticle["id"]; // } // else { // Read price from default-price-table $sql = "SELECT price,s\_core\_tax.tax AS tax FROM s\_articles\_prices,s\_core\_tax WHERE s\_articles\_prices.pricegroup=? AND s\_articles\_prices.articledetailsID=? AND s\_core\_tax.id=? "; $getPrice = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetRow($sql,array($this-\>sSYSTEM-\>sUSERGROUP,$getArticle["articledetailsID"],$getArticle["taxID"])); if (empty($getPrice["price"])){ $sql = "SELECT price,s\_core\_tax.tax AS tax FROM s\_articles\_prices,s\_core\_tax WHERE s\_articles\_prices.pricegroup='EK' AND s\_articles\_prices.articledetailsID=? AND s\_core\_tax.id=? "; $getPrice = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetRow($sql,array($getArticle["articledetailsID"],$getArticle["taxID"])); } if (!$getPrice["price"] && !$getArticle["free"]){ // No price could acquired $this-\>sSYSTEM-\>E\_CORE\_WARNING ("BASKET-INSERT #01","No price acquired"); return; }else { // If configuration article if (($this-\>sSYSTEM-\>sCONFIG['sARTICLESOUTPUTNETTO'] && !$this-\>sSYSTEM-\>sUSERGROUPDATA["tax"]) || (!$this-\>sSYSTEM-\>sUSERGROUPDATA["tax"] && $this-\>sSYSTEM-\>sUSERGROUPDATA["id"])){ // If netto set both values to net-price $getPrice["price"] = $this-\>sSYSTEM-\>sMODULES['sArticles']-\>sCalculatingPriceNum($getPrice["price"],$getPrice["tax"],false,false,$getArticle["taxID"],false,$getArticle); $getPrice["netprice"] = $getPrice["price"]; }else { // If brutto, save net $getPrice["netprice"] = $getPrice["price"]; $getPrice["price"] = $this-\>sSYSTEM-\>sMODULES['sArticles']-\>sCalculatingPriceNum($getPrice["price"],$getPrice["tax"],false,false,$getArticle["taxID"],false, $getArticle); } // For variants, extend the article-name if ($getArticle["additionaltext"]){ $getArticle["articleName"].= " ".$getArticle["additionaltext"]; } if (!$getArticle["shippingfree"]) $getArticle["shippingfree"] = "0"; // Check if article is an esd-article // - add flag to basket $sqlGetEsd = " SELECT s\_articles\_esd.id AS id, serials FROM s\_articles\_esd,s\_articles\_details WHERE s\_articles\_esd.articleID=? AND s\_articles\_esd.articledetailsID=s\_articles\_details.id AND s\_articles\_details.ordernumber=? "; $getEsd = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetRow($sqlGetEsd,array($getArticle["articleID"],$getArticle["ordernumber"])); if ($getEsd["id"]){ $sEsd = "1"; }else { $sEsd = "0"; } $quantity = (int) $quantity; $sql = " INSERT INTO s\_order\_basket (id,sessionID,userID,articlename,articleID, ordernumber, shippingfree, quantity, price, netprice, datum, esdarticle, partnerID, config) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) "; $params = array( '', (string) $this-\>sSYSTEM-\>sSESSION\_ID, (string) $this-\>sSYSTEM-\>\_SESSION['sUserId'], $getArticle["articleName"], $getArticle["articleID"], (string) $getArticle["ordernumber"], $getArticle["shippingfree"], $quantity, $getPrice["price"], $getPrice["netprice"], (string) $insertTime, $sEsd, (string) $this-\>sSYSTEM-\>\_SESSION["sPartner"], (empty($sUpPriceValues) ? "" : serialize($sUpPriceValues)) ); $sql = Enlight()-\>Events()-\>filter('Shopware\_Modules\_Basket\_AddArticle\_FilterSql',$sql, array('subject'=\>$this,"article"=\>$getArticle,"price"=\>$getPrice,"esd"=\>$sEsd,"quantity"=\>$quantity,"partner"=\>$this-\>sSYSTEM-\>\_SESSION["sPartner"])); $rs = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql, $params); if (!$rs){ $this-\>sSYSTEM-\>E\_CORE\_WARNING ("BASKET-INSERT #02","SQL-Error".$sql); } $insertId = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Insert\_ID(); $sql = "INSERT INTO s\_order\_basket\_attributes (basketID, attribute1) VALUES (". $insertId .", ".$this-\>sSYSTEM-\>sDB\_CONNECTION-\>qstr(implode($pictureRelations,"$$")).")"; $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql); $this-\>sUpdateArticle($insertId,$quantity); } // If - Price was found // } // If - Article is not in basket } // If - Article was found return $insertId; } } Kann mir vielleicht jemand hierbei weiterhelfen? gruß