Staffelpreise werden nicht angezeigt - SW: 5.2.2 - Plugin: Custom Products 1.0.3

Hallo, ich grüße die Community. Ich komme mit einem Problem und meinen wenigen Shopware Erfahrungen leider nicht weiter. Ich kann nicht genau sagen, ob es sich hier um ein Core-Bug handelt oder ob ich einfach nur irgenetwas falsch eingestellt habe.

Fehlerbeschreibung: Beim Erstaufruf einer Produktseite ist die Tabelle mit den Staffelpreisen einfach leer. Sobald ich eine Produktvariante anklicke, werden die korrekten Preise in der Tabelle angezeigt. Im Smarty-Debug ist mir aufgefallen, dass die Variable „$blockPrice“ beim Erstaufruf nicht vorhanden ist. Im Backend habe ich eine Default-Variante definiert. Dieses Problem tritt nur auf, wenn ich den „Bild“-Konfigurator nutze, bei dem Standart-Konfigurator werden die Staffelpreise bein Erstaufruf ebenfalls korrekt dargestellt.

Ich versuch einfach mal mein Glück. Vielleicht kann mir ja jemand weiterhelfen.

Der Bild Konfigurator und auch der Auswahl-Konfigurator arbeiten nicht mit der Vorauswahl. Es ist also extra so gedacht, dass die spezifischen Informationen erst nach Auswahl der Variante vorhandne sind.

Hallo Moritz, danke für die rasche Antwort. Also wie oben schon erwähnt, sind die Staffelpreise im „Normalen“ Konfigurator vorhanden. Es gibt ja bei dem Produktaufruf eine Default-Artikelnummer mit der dazugehörigen Konfiguration, diese kann ich dann auch in den Warenkorb legen. Wenn ich die Artikelnummer in der URL habe:

„?number=SW101010ABC“

dann wird die Preisstaffelung auch angezeigt.

Hat jemand Ideen, wie ich die Anzeige der Preisstaffelung für die Default-Artikelnummer erzwingen kann?

It’s not a bug, it’s a feature :wink:

Das Problem ist schon seit langem bekannt und wurde schon paar mal erfolglos diskutiert.

Das ist ja doof, dann mal rann an den Core D:

Hallo philipp87,

wie Moritz schon geschrieben hat, ist das ja bewusst so gebaut. Es gibt drei verschiedene Darstellungstypen. Du kannst dich für einen entscheiden. Du wünscht dir jetzt eine Mischung aus zwei Typen. Das wirst du dann schon individuell umsetzen müssen.

Der Standard-Konfigurator hat alle Optionen ausgewählt/aktiviert der Vorauswahl. Nach Aufruf der Detailseite kann man den Artikel immer auch direkt in den Warenkorb legen. Daher müssen alle Informationen beim Erstaufruf auch direkt ersichtlich sein. Bei den beiden anderen Darstellungsformen ist das bewusst anders gelöst. Dort ist immer eine Auswahl der Kunden nötig und dann werden die relevanten Infos nachgeladen.

Sebastian

Hallo Sebastian,

danke für die Info, ich habe jetzt in der „sArticles.php“ Zeile 1210 die If-Bedingung geändert und erzielte somit das gewünschte Ergebnis.

if ($productNumber || $type === 0) {
  $selection = $product->getSelectedOptions();
}

Somit ist das Problem vorerst gelöst.

1 Like

@philipp87 schrieb:

Hallo Sebastian,

danke für die Info, ich habe jetzt in der “sArticles.php” Zeile 1210 die If-Bedingung geändert und erzielte somit das gewünschte Ergebnis.

if ($productNumber || $type === 0) {
$selection = $product->getSelectedOptions();
}

Somit ist das Problem vorerst gelöst.

Hallo,

das ist doch aber überhaupt nicht updatesicher und wahrscheinlich beim nächsten Update wieder überschrieben (Änderungen in den Core - Dateien)?

Beste Grüße

Sebastian

Ja das ist richtig. Leider gibt es aktuell meines Wissens keine andere Lösung, wie ich die Staffelpreise beim Erstladen eines Bildkonfigurator-Produktes (Mit Vorauswahl) anzeigen lassen kann.

Wie bereits erwähnt wurde, ist es so gewollt.

Andere Lösungvorschläge sind natürlich gerne gesehen :3

LG Philipp

1 Like

Philipp, du bist der Held des Tages. Damit hast du bestimmt mehreren geholfen.

Vielen Dank!

(hab’s noch nicht probiert, aber mach ich gleich :))

Wie von @sschreier‍ bereits erwähnt. Nie an den Core-Dateien rumdoktoren, da diese Änderungen beim nächsten Update wieder weg sind.

@philipp87 vielen Dank, funktioniert einwandfrei

@sschreier‍: solange keine bessere Lösung in Sicht, habe ich lieber ein fehlerfrei funktionierendes System als ein updatesicheres. Die eine Zeile kann man nach jedem Update schnell ersetzen. Soll jeder machen, was er für richtig hält. 

Da das Thema ja wohl immer noch aktuell ist und die Vorauswahl immer noch nicht so funktioniert, wie sie soll, habe ich mal versucht, den Vorschlag von Philipp in ein kleines Plugin zu packen, damit der Core nicht modifiziert werden muss.

Kurze Erklärung vorab: in der Methode sGetArticleById wird die Variable $providedNumber ausschließlich für die Prüfung in der betroffenen IF-Abfrage genutzt. Der Parameter $number wird ohnehin gleich darauf - wenn vorher leer - auf die Hauptartikel-Nummer gesetzt. Das Ganze macht der Before-Hook schon vorher. Damit funktioniert dann die Vorauswahl bei Varianten.

    public function install()
    {
        $this->subscribeEvent('sArticles::sGetArticleById::before', 'selectDefaultVariant');
        return true;
    }

    public function selectDefaultVariant(Enlight_Hook_HookArgs $args)
    {
        /** @var \sArticles $subject */
        $subject = $args->getSubject();
        $container = Shopware()->Container();
        $productNumberService = $container->get('shopware_storefront.product_number_service');

        $return = $args->getReturn();

        $id = $args->get('id');
        $number = $args->get('number') ? $args->get('number') : $productNumberService->getMainProductNumberById($id);

        $args->set('number', $number);
        $args->setReturn($return);
    }

 

Irgendwelche Einwände? Hab ich was übersehen? Bei mir gab es zumindest keine Seiteneffekte. Bis jetzt läuft das wie es soll.

2 Likes

Auch bei mir, funktioniert einwandfreit.

Vielen Dank!

Kann mir bitte jemand kurz erklären wie ich aus dem Code von TechSigns ein Plugin erstelle? Einfach diesen Code in eine PHP-Datei und zippen reicht offensichtlich nicht!

@TechSigns schrieb:

Da das Thema ja wohl immer noch aktuell ist und die Vorauswahl immer noch nicht so funktioniert, wie sie soll, habe ich mal versucht, den Vorschlag von Philipp in ein kleines Plugin zu packen, damit der Core nicht modifiziert werden muss.

Kurze Erklärung vorab: in der Methode sGetArticleById wird die Variable $providedNumber ausschließlich für die Prüfung in der betroffenen IF-Abfrage genutzt. Der Parameter $number wird ohnehin gleich darauf - wenn vorher leer - auf die Hauptartikel-Nummer gesetzt. Das Ganze macht der Before-Hook schon vorher. Damit funktioniert dann die Vorauswahl bei Varianten.

public function install()
{
$this->subscribeEvent(‚sArticles::sGetArticleById::before‘, ‚selectDefaultVariant‘);
return true;
}

public function selectDefaultVariant(Enlight_Hook_HookArgs $args)
{
/** @var \sArticles $subject */
$subject = $args->getSubject();
$container = Shopware()->Container();
$productNumberService = $container->get(‚shopware_storefront.product_number_service‘);

$return = $args->getReturn();

$id = $args->get(‚id‘);
$number = $args->get(‚number‘) ? $args->get(‚number‘) : $productNumberService->getMainProductNumberById($id);

$args->set(‚number‘, $number);
$args->setReturn($return);
}

 

Irgendwelche Einwände? Hab ich was übersehen? Bei mir gab es zumindest keine Seiteneffekte. Bis jetzt läuft das wie es soll.

Erstmal Danke das funktioniert Super  !

Ein Problem habe ich aber noch wenn der Artikel zb die Artikelnummer  SW10797.2 hat wählt er nichts aus bekommt man das irgendwie hin das er diesen Artikel dann trotzdem als Vorauswahl anlegt ?

Bin über jegliche Hilfe Dankbar  

@Overtone schrieb:

Kann mir bitte jemand kurz erklären wie ich aus dem Code von TechSigns ein Plugin erstelle? Einfach diesen Code in eine PHP-Datei und zippen reicht offensichtlich nicht!

Wäre für mich auch mal interessant zu wissen O_o 

1 Like