in einem Shop kommen Pseudo-Artikel zum Einsatz, die dann in den Warenkorb gelegt werden können. Soweit funktioniert das auch. Jetzt ist es allerdings so, dass bestimmte Pseudo-Artikel größere Breiten und Höhen haben und somit sich die Versandart irgendwie ändern muss.
Die Versandregeln sind auf Breiten und Höhen angepasst - sofern beim Produkt diese Info vorhanden ist. Bei den Pseudo-Artikel klappt das allerdings gar nicht. Hier wird die Breite oder Höhe von den Regeln gar nicht erfasst oder sie werden falsch angelegt!?
Beim bisheriger Versuch sieht so aus (grobes Beispiel):
$productLineItems = new LineItem( etc. );
$productLineItems->setPayloadValue('productNumber', $sProductNumber );
...
$productLineItems->setPayloadValue('width', 1200);
$productLineItems->setPayloadValue('height', 800);
...
$this->cartService->add( $cart, $productLineItems, $context );
setPayloadValue() ist aus meiner Sicht nicht falsch, denn die Produktnummer wird auch korrekt angezeigt.
Oder muss ich noch etwas etwas im CartProcessor ändern?
Dieser läuft ganz einfach so (grobes Beispiel):
$lineItems = $original->getLineItems()->filterFlatByType( etc. );
foreach ( $lineItems as $lineItem ) {
$toCalculate->add( $lineItem );
}
Ich habe jetzt auch Zusatzfelder und Tags ausprobiert. Es scheint so, dass die Regeln Pseudo-Artikel umgehen. In diesem Falle habe ich irgendwie keine Möglichkeit die Versandart zu steuern. Pseudo-Artikel lassen sich auch nicht vom Typ ‚product‘ anlegen, damit verschwinden sie wieder aus dem Warenkorb.
Du wirst schauen müssen wie/wo/ob du die entsprechenden Abfragen in den Rules erweitern / dekorieren kannst. Schau dir mal andere Plugins mit eigenen line items an, wie die das lösen. Das ist tatsächlich recht eklig und aufwendig.
Es geht nicht um die Übergabe der Breiten und Höhen um sie dann irgendwo anzeigen zu lassen. Es geht darum, mit diesen Werten die Versandarten zu steuern, wo die Regeln auf die Breiten und Höhen vom Produkt zugreifen. Genau diesen Aspekt habe ich nicht zum laufen gebracht. Sprich die Rules reagieren nicht auf Pdseudo-Artikel.
Die Toolbar von MrAle zeigt die dir aktiven Rules an - und „Breite > 500“ scheint zu greifen, dank des Pseudo Produkts.
Du müsstest mal in die letzten changelog Einträge schauen. Ich bin mir sicher, dass mit Shopware 6.7.14.x ein Fehler eingeführt wurde, der dafür sorgt, dass NUR line items vom Typ „product“ geprüft wurden. Das wurde scheinbar mit 6.7.15.1 wieder korrigiert. Welche Shopware Version nutzt du? Und: auch vor 6.7.14.x funktionierte die Verknüpfung von „ALLE“ nicht im Rule Builder mit eigenen line items.
Während die Regeln bei normalen Produkten problemlos greifen, werden sie bei Pdseudo-Artikeln ignoriert. Hatte im Test die Werte auch fest eingetargen - hat auch nicht funktioniert. Ich sehe hier jetzt kein Fehler.
Neuer Test mit vereinfachten Regeln (Position mit Breite):
nochmals die Regeln angepasst und zum Test jetzt nur auf Breite eingestellt
Test mit ganz normalen Produkten im Shop
ein Produkt mit Breite < 1000 mm / ein Produkt mit Breite > 1000 mm
Produkt mit Breite < 1000 mm = Standardversand, Sperrgut wird nicht angezeigt (korrekt)
Produkt mit Breite > 1000 mm = Sperrgut, Standardversand wird nicht angezeigt (korrekt)
Psdeudo-Artikel mit Breite > 1000 mm = Standardversand, Sperrgut wird nicht angezeigt (nicht korrekt)
eingebaut was ich dann im Warenkorb abfragen kann. Damit ich also sehe, ob die Werte wirklich übergeben werden. Die eigentliche Übergabe erfolgt dann so:
Da ich hier auch meine Lieferzeit definiere, die auch korrekt angezeigt wird, gehe ich davon aus das hier alles richtig ist.
Fazit:
Da die Regeln bei einem normalen Produkt funktionieren, jedoch bei Psdeudo-Artikel nicht greifen, muss irgendwo noch etwas nicht stimmen. Ich sehe zur Stunde keinen Fehler.
In meinem Falle dynamische erzeugte Produkte die auf bereits angelgte Produkte im Shop basieren. Ich baue damit einen speziellen Konfigurator der aus bestimmten bestehenden Artikeln eine Vielzahl neuer Artikel dynamisch erzeugen kann.
Wir arbeiten auch viel mit personalisierten Artikeln, aus meiner Erfahrung heraus - wenn es irgendwie geht nimm cart line type = product
Das kracht sonst ständig mit allen Berechnungen und Plugins die irgendwie damit zu tun haben. Alternativ muss du das hier quasi nachbauen für deinen custom type: