If ('wenn ausverkauft nicht bestellbar' && 'lagerbestand=0')

dann soll der Artikel nicht auf die Frisch eingetroffen Seite. Aber er soll weiter Suchbar sein, denn es könnte ja durchaus sein dass, die eine oder andere Bemerkung geschrieben ist oder wird.

Wo kann ich das ändern oder gar einstellen.

Ist Lagerverbestand aktiv? Dann sollten ausverkaufte Artikel nicht dort erscheinen, außer frisch eingetroffen wird manuell gepflegt.

In den Einstellung steht bei Frisch eingetroffen, automatisch.
Den Lagerbestand, wurde unter Varianten nach dem Verkauf des letzten Artikel’s auf 0 gesetzt.

prüfe auch mal das Feld oxvarstock beim Vaterartikel.

du meinst bei den Stammdaten gehe zu.
Da sind alle Varianten Felder nicht selektierbar und unter dem Reiter Lager ist der Bestand = 0

ich glaube, ich habs.

Versuch mal bei Varianten den Lieferstatus auf “wenn ausverkauft offline” zu stellen.

stimmt das funktioniert, aber dann ist der Artikel auch nicht mehr Suchbar.

Wenn das für Euch eine Option ist, @corel: Vielleicht könnt Ihr mal drüber nachdenken, dass die frisch eingetroffenen Artikel eben nicht automatisch generiert werden, sondern wirklich manuell. Damit könntest Du nicht nur den aktuellen Fall steuern, sondern man könnte auch von Zeit zu Zeit mal einen Ladenhüter unterjubeln :wink:

Guten Morgen @marco.steinhaeuser, ja wäre auch eine Möglichkeit, kommt aber fast aus das selbe heraus wie die automatische Einstellung mit der Option ‘wenn ausverkauft offline’.

Allerdings könnten damit wahrscheinlich die Artikel weiterhin gesucht werden und würden für Bemerkungen offen sein. Glaube ich zumindest. Kommt auf einen Versuch an. Der Nachteil, die Liste muss gepflegt werden.

Genauso. Weiterer Vorteil: Ladenhüter könnten “untergemuschelt” werden - falls Du dazu Argumentation brauchst :wink:
Ich bin sowieso der Meinung, dass man an der Startseite ständig (wöchentlich?) etwas ändern sollte: Super-Sonder-Angebote einstellen, man könnte sogar “Frisch eingetroffen” umbenennen und für andere Zwecke missbrauchen. Dabei würde ich tatsächlich die manuelle Arbeit der automatisierten vorziehen, weil es doch viel authentischer wirkt.

Ich muss noch einmal nach hacken, unabhängig von marco’s Ansatz, schon alleine weil es mich, evtl. auch andere Interessieren könnte.

Nehmen wir mal an, die automatische Liste soll bleiben, wo kann man dann eine Abfragen (IF wie Betreff) in oxid integrieren? Und wie könnte das aussehen?

das wäre wohl diese Zeile:

“wennn ausverkauft nicht bestellbar” entspricht “oxstockflag=3”
Lagerbestand wäre oxstock bzw oxvarstock für den Lagerbestand der Varianten beim Vaterartikel.

Mach am besten ein die($sSelect); in der Zeile 220, um die gesamte SQL Query zu bekommen. Ggf. müsste man noch ein paar Klammern ergänzen, damit die UND/ODER-Logik richtig greift.

habe es gefunden (6 mal sogar), ganz schön tief vergraben. Ok, die Zeile 215 steht bei mir schon drin, das heißt diese soll ich abändern?

so ganz will es mir nicht gelingen, habe jetzt bei mir in Zeile 218 statt 220 folgendes eingefügt.

$sSelect .= "where (oxstockflag != '3' and oxvarstock = '0' or oxstock = '0')";
funktioniert aber leider noch nicht, bzw. die Seite sucht und sucht

kann mir da jemand, nochmals helfen den code richtig einzufügen evtl. fehlt nach and noch ein Klammerpaar das den or Teil mit einschließt.

Deine Query selektiert explizit Artikel, die nicht “Wenn ausverkauft nicht bestellbar” sind und Bestände auf 0 haben, die wir eigentlch von der Auswahl ausschließen wollten, also ziemlich das Gegenteil.

Aber gehen wir mal einen Schritt zurück, der “Produktfilter” in der original Query ist doch etwas komplexer:

where oxparentid = ''  // keine Varianten
and ( 
  oxv_oxarticles_de.oxactive = 1 // artikel aktiv
  and ( 
    oxv_oxarticles_de.oxstockflag != 2 
    or // nicht "Wenn ausverkauft offline" oder Bestände > 0
    ( oxv_oxarticles_de.oxstock + oxv_oxarticles_de.oxvarstock ) > 0 
  ) 
  and IF( oxv_oxarticles_de.oxvarcount = 0, 1, ( 
    select 1 from oxv_oxarticles_de as art 
    where art.oxparentid=oxv_oxarticles_de.oxid 
    and ( art.oxactive = 1 ) 
    and ( art.oxstockflag != 2 or art.oxstock > 0 ) limit 1 ) ) 
    // hat bestellbare Varianten
) 
and oxissearch = 1 // Artikel suchbar

Es macht schon Sinn die original Query beizubehalten und lediglich die neuen Bedingugen sinnvoll einzufügen. Es wird bereits nach den Beständen > 0 und dem Liefferstatus (oxstockflag) gefiltert, d.h. zusätzlich zum “Wenn ausverkauft offline” (entspricht 2) müssen wir nur noch “Wenn ausverkauft nicht bestellbar” (entspricht 3) ausschließen.
Da es insgesamt nur 4 Optionen gibt und ich vermute dass Du keinen unbegrenzten Fremdlager hast, bleibt nur noch ein gewünschter Lieferstatus “Standard” (1), dann kann der entsprechende Teil der SQL Query so aussehen: “oxv_oxarticles_de.oxstockflag == 1”.

Jetzt schauen wir uns den Code an und es stellt sich heraus, dass der komplette mittlere Teil fertig zusammengestellt aus der Funktion “$this->getBaseObject()->getSqlActiveSnippet()” kommt, d.h. wir können die Query nicht direkt ändern, ohne dass andere Bereiche des Shops betroffen wären.
Dann müssen wir einfach den gewünschten Abschnitt der Query durch einen angepassten ersetzen.
Die ganze Code-Zeile mit der Anpassung sieht dann so aus:

$sSelect .= "where oxparentid = '' and " . str_replace('oxstockflag != 2', 'oxstockflag = 1', $this->getBaseObject()->getSqlActiveSnippet()) . " and oxissearch = 1 order by $sType desc ";

In der Abfrage wird einfach “oxstockflag != 2” durch “oxstockflag = 1” ersetzt., was zum gewünschten Resultat führen sollte

@vanilla_thunder du bist der Hammer, es funzt.
Allerdings muss man darauf achten das der Vaterartikel-Lagerbestand und der normale Lagerbestand auf ‘wenn ausverkauft nicht bestellbar’ gesetzt ist. Super :blush: