Statusanzeige Artikelverfügbarkeit ist verwirrend seit 4.10.6

Hallo allerseits,

ich habe festgestellt, dass sich die Artikelverfügbarkeit in der Artikel-Detailansicht seit der Version 4.10.6 etwas verwirrend verhält.

Folgende Ausgangssituation: CE Version 4.10.7, angepasstes Azure Template, Variantendarstellung in der Artikel-Detailansicht angepasst (Checkboxes), Lieferstatus = Wenn ausverkauft, nicht bestellbar, Klick auf Warenkorbbutton gibt Meldung aus. Anmerkung: im Standard Azure Theme ist die Problematik dieselbe, die Darstellungsweise ist nur anders.

Beispiel: Ich möchte einen Artikel in Größe 48 bestellen. Diese Größe ist nur noch 1x vorhanden.

Wenn ich diesen Artikel nun in den Warenkorb lege, erscheint sofort die Meldung “Artikel nicht verfügbar” (oder in unserm Fall “Sold Out”).

Faktisch ist diese Meldung durchaus richtig, denn Größe 48 ist jetzt ausverkauft. Für den Kunden ist das allerdings extrem verwirrend. Aufgefallen ist mir das weil Kunden in letzter Zeit häufig zwischen Warenkorb und Artikel-Detailseite hin und her pendeln.

So weit ich feststellen konnte wurde die Artikelverfügbarkeit bis Version 4.10.5 nach Betätigen des Warenkorb-Buttons nicht aktualisiert. Verantwortlich dafür scheint die “oxcmp_basket.php” zu sein.

Was der Kunde idealerweise zu sehen bekommen sollte ware folgendes:

Diese Darstellung erscheint allerdings erst nachdem “Auswahl zurücksetzen” angeklickt wurde.

So weit ich das im Moment überblicke, gäbe es 2 Lösungsansätze:

  1. Einstellung “Warenkorbbutton klicken führt zum Warenkorb” wählen. Dort den “weiter einkaufen” Button abändern und zur Startseite leiten lassen (weiter einkaufen führt sonst zurück zum Artikel mit der zuletzt gewählten Auswahl was für mich völlig unlogisch ist).
  2. Funktion Warenkorbbutton umprogrammieren damit nach Betätigung automatisch ein Reset der getätigten Auswahl erfolgt.

Lösung 1 geht ohne Weiteres, ist aber nicht wirklich elegant.
Lösung 2 wäre aus meiner Sicht ideal.

Frage: läßt sich das bewerkstelligen und wenn ja, wo muss ich ansetzen?

Sicher, Du musst nur schauen, was für die Einblendung von “Sold Out” sorgt und stattdessen die Größe durchstreichen und den WK-Button deaktivieren. Ohne Quelltext ist weitere Hilfe kaum möglich.

“Sold Out” zu deaktivieren ist nicht das Problem. Das ist aber nicht gewollt. Wenn ein Artikel komplet ausverkauft ist soll der Status “Sold Out” gezeigt werden, nicht wenn lediglich eine Variante nicht mehr verfügbar ist.

Was der Warenkorbbutton betrifft, der bleibt aktiv nachdem darauf gecklickt wurde. Das ist von Oxid so vorgesehen. Ich frage mich nur wozu. Warum erfolgt nicht automatisch ein Reset der Artikelseite nachdem ein Artikel in den Warenkorb gelegt wurde?

Auf dem letzten Bild sieht es so aus, dass Sold Out nicht erscheinen soll, was aber letztendlich egal ist. Für gewöhnlich kannst eine if-Abfrage in der Art einsetzen:if (oxstock >= XXX){zeige XXX} und damit die verschiedenen Zustände darstellen.

@foxido.de

Habe jetzt Zugriff auf den Code. Also, “Sold Out” soll nur dann gezeigt werden wenn der Artikel, sprich alle Varianten, ausverkauft sind.

productmain.tpl

[{block name="details_productmain_stockstatus"}]
[{if $oDetailsProduct->getStockStatus() == -1}]
     <div class="st_sold_out"> [{if $oDetailsProduct->oxarticles__oxnostocktext->value}]
     [{$oDetailsProduct->oxarticles__oxnostocktext->value}]
     [{elseif $oViewConf->getStockOffDefaultMessage()}]
     [{oxmultilang ident="MESSAGE_NOT_ON_STOCK"}]
     [{/if}]
     </div>
[{/if}]
[{/block}]

Ob eine Variante Verfügbar ist wird in der selectbox.tpl geregelt

[{if $editable !== false}]
    <input type="hidden" name="[{$sFieldName|default:"varselid"}][[{$iKey}]]" value="[{if $oActiveSelection }][{$oActiveSelection->getValue()}][{/if}]">
    <ul class="drop [{$sSelType|default:"vardrop"}]">            
        [{foreach from=$oSelections item=oSelection}]
            <li class="[{if $oSelection->isDisabled()}]js-disabled disabled[{/if}]"><div class="[{if $oSelection->isActive()}]selected[{/if}][{if $oSelection->getStockStatus() !== 0 }]line1-disabled[{/if}]"></div>
                <a data-selection-id="[{$oSelection->getValue()}]" href="[{$oSelection->getLink()}]" class="[{if $oSelection->isActive()}]selected[{/if}][{if $oDetailsProduct->oxarticles__stakksnotbuyable->value == "1" || $oSelection->getStockStatus() !== 0 }]variants-disabled[{/if}]">[{$oSelection->getName()}]</a>
            </li>
        [{/foreach}]
    </ul>
[{/if}]

Das funktioniert nur leider nicht unmittelbar nachdem eine Variante in den Warenkorb gelegt wurde. Dazu muss die Artikeldetailseite erst neu aufgerufen oder die Taste “Auswahl zurückstellen” gewählt werden.

Übrigens: die Shopadresse lautet: shop.stakks.de . Aber Achtung: ich habe die Statusanzeige “Sold Out” jetzt zunächst einmal auskommentiert!

Das liegt IMHO an Folgendem:

[{if $oSelection->getStockStatus() !== 0 }] line1-disabled[{/if}]

und

[{if $oDetailsProduct->oxarticles__stakksnotbuyable->value == “1” || $oSelection->getStockStatus() !== 0 }] variants-disabled[{/if}]

Ich hoffe, Du siehst den Unterschied :wink:

Nachdem ich testweise im details.tpl die oxstock und oxvarstock abgefragt habe bin ich ein wenig schlauer geworden. In der Artikel-Detailansicht zeigt oxvarstock einen Wert (die Summe der verfügbaren Varianten), oxstock zeigt “0”. Wähle ich jetzt konkret eine Variante (Größe) zeigt oxvarstock “0” und oxstock “1” (Vorrat der gewählten Variante). Lege ich jetzt die gewählte Variante in den Warenkorb zeigen oxvarstock und oxstock beide “0” an. Bei oxstock weil es die letzte verfügbare Variante war und oxvarstock weil Oxid bis dahin den Gesamtvorrat nicht neu berechnet hat.

Ist der Stock einer Variante 1 und wird diese in den Warenkorb gelegt folgt sofort die Meldung “Ausverkauft”! Natürlich nur wenn das im Adminbereich so eingestellt ist. Wie bereits erwähnt bin ich mir ziemlich sicher, dass das in Version 4.10.5 nicht so war, aber was soll’s.

Viel schlimmer ist, dass ich bis Dato eine Basisfunktion völlig fehleingeschätzt habe und zwar das Gegenstück zu der Funktion “Warenkorb läuft ab”. War immer eingeschaltet weil ich der Meinung war, dass ansonsten sämtliche Warenkörbe geflutet werden und im Shop keine Artikel mehr sind. Wie doof! Nur wenn diese Funktion eingeschaltet ist führen Artikel im Warenkorb zu einer Bestandveränderung (für die eingestellte Dauer). Ist die Funktion ausgeschaltet führen Artikel im Warenkorb nicht zu einer Bestandsveränderung es sei denn sie werden gekauft.

Also ist mein Problem zumindest zum Teil gelöst. :flushed: