Kaufen-Button ausblenden

Hallo, ich denke ich habe hier mein letztes “Problemchen” :wink: Es geht um den Kaufen-Button. Ist ein Artikel nicht am Lager würde ich den gerne ausblenden bzw. einen anderen Button ohne Funktion anzeigen. Soweit so gut … dafür habe ich ja dieses Schnipselchen aus der article_details_middle.tpl … {if !$sArticle.sConfigurator && !$sArticle.sVariants && $sArticle.laststock==1 && $sArticle.instock\<=0} Das würde auch funktionieren hätte ich hier nicht noch die Option im Admin bei den Artikeln “Immer Lieferbar” … Wo bzw. wie kann ich das abfragen? Ich weiss jetzt nicht ob das eine Standardfunktion ist oder ob das nachträglich in den Shop implementiert wurde. Was ich hier bräuchte wäre die entsprechende SMARTY-Variable mit welcher ich das ganze abfangen kann. Dann wäre die Kuh schonmal vom Eis :wink: Dann schliesst sich aber gleich das nächste Problemchen an … die Varianten … auch hier habe ich im Prinzip wieder das gleiche … ich kann zwar den Lagerbestand abfragen … wie komme ich aber hier an die Smarty-Variable “Immer lieferbar” … sofern es die überhaupt gibt :wink: Bisher läuft das ganze so bei den Varianten … - Der Kaufen Button hat die “opacity” wenn ich noch keine Variante ausgewählt habe - Wähle ich über die Selectbox eine Variante aus wird dann automatisch die entsprechende Artikelnummer und der Lieferstatus eingeblendet und die “opacity” verschwindet. Nun möchte ich eben noch zusätzlich in Abhängigkeit des Lieferstatus und des “Immer lieferbar” den Kaufen-Button ein oder ausblenden. Ich bin mal gespannt ob ich mich verständlich ausgedrückt habe :wink: Markus

Also den Lieferstatus speicherst du doch wahrscheinlich in einem Freitext-Feld? Da müsstest du nur kurz prüfen, in welchem das gespeichert wird (attr1 bis attr20). Der Rest ist dann ein kinderspiel, einfach die Abfrage um {if $sArticle.attrX==“LIEFERBAR”}IMMER anzeigen{/if} Bei den Varianten stehen die Attribute ebenso zur Verfügung, allerdings wird die Seite bei Auswahl einer Variante ja nicht neu geladen. Für jede Variante wird im HTML-Code ein unsichtbares DIV integriert, welches die Daten bei Wechsel anzeigt. Der Code dafür stammt aus der details_data.tpl. Also müsstest du das Attribut dort in ein Hidden-Inputfield oder ein Div mit display = none schreiben. Das müsstest du dann in der Routine die beim Variantenwechsel ausgeführt wird abfragen und den Warenkorb-Button ausblenden. Verständlich? :wink:

Hi Stefan, weiss ich noch nicht genau … aber zumindest habe ich jetzt schonmal das Feld in der DB attr3 :wink: Mal schauen ob das gleich so will wie ich das gerne hätte :wink: Markus

Hi … danke für den Hiweis … Thema erledigt … das ganze arbeitet jetzt wie ich das gerne hätte :wink: Kann sein dass ich gleich nochmal was fragen muss … jetzt will ich das ganze auch perfekt haben und gleich mit abfangen wenn jemand mehr in den Warenkorb packen will als überhaupt am Lager ist … dann nehm ich ihm auch den Kaufbutton weg und zeige einen Hinweistext an :wink: Wie war das mit dem kleinen Finger und der ganzen Hand :smiley: Markus

Dann müsstest du im Viewport s_detail.php in etwa folgenden Code nutzen: (Über dem return einfügen) $check = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne("SELECT (quantity - {$sArticle["instock"]}) FROM s\_order\_basket WHERE sessionID = ? AND articleordernumber = ?",array($this-\>sSYSTEM-\>sSESSION\_ID,$sArticle["ordernumber"])); if ($check\<=0){ $sArticle["hideCartButton"] = true; }else { $sArticle["hideCartButton"] = false; } Der rechnet Lagerbestand - bereits im Warenkorb befindliche Menge. Wenn das <= 0 ist, wird die Variable hideCartButton auf true gesetzt. Das müsstest du dann analog noch in einer foreach Schleife für die Varianten umsetzen. foreach ($sArticle[„sVariants“] as &$variant) { // Code }

Hallo nochmal, vielen Dank für den Hinweis. Das mit dem Kaufen Button selbst ist ja wirklich kein Problem. Das konnte ich auch für beide Varianten so umsetzen. Das eigentliche Problem liegt darin die Liefermengen selbst einzuschränken. Bei einem Einzelartikel sollte das noch kein Problem sein da die betreffende section einfach auf den maximalen Lagerwert laufen kann (Beispiel: es sind nur noch 20 Artikel da. Maximale Bestellmenge ist 100. Das Selectfeld Menge dürfte also nur bis 20 gehen, nicht bis 100). Problematisch wird das ganze allerdings bei den Artikel mit Varianten. Man müsste hier beim umschalten (eben ohne Seitenreload) in der Lage sein die gesamte Selectbox zu ändern und das ist denke ich nicht einfach möglich, da im Code noch nicht vorgesehen ist, dass jede Variante sozusagen die Mengen-Selectbox komplett tauscht und damit nur bis zur verfügbaren Lagermenge läuft. Ich denke da müsste man die gesamte Selectbox recht aufwändig neu generieren via AJAX oder? Das nächste Problem wäre dann der Warenkorb: Hier kann man die Mengen ja ebenfalls wieder ändern. Man müsste also auch dort die Selectboxen irgendwie nacharbeiten, sodass pro Artikel immer nur die noch verfügbare Lagermenge wählbar ist. Gibt es da nicht vielleicht doch eine einfachere Lösung?

Puhh. So einfach lässt sich das denke ich nicht umsetzen. Eng verwandt mit deinen Anforderungen ist die Abverkaufsfunktion, die sorgt zumindest im Warenkorb schon mal dafür, dass nur die tatsächlich verfügbare Menge ausgewählt werden kann. Das dynamische Austauschen der Selectbox könntest du z.B. realisieren, indem du die Generierung der Selectbox zusätzlich mit in die detail.tpl packst und dort display auf none setzt. Die Selectboxen würden dann jeweils eine eindeutige ID bekommen, z.B. quantity_[ordernumber] Darüber könntest du beim Variantenwechsel wieder referenzieren und die bestehende Selextbox dynamisch ersetzen. Völlig ohne Ajax und co.

[quote=“Markus”]Hallo nochmal, Ich denke da müsste man die gesamte Selectbox recht aufwändig neu generieren via AJAX oder?[/quote] [quote=“Stefan Hamann”] Völlig ohne Ajax und co. [/quote] Hallo, also was mir dazu grad so in den Sinn kommt wäre schon eine Ajax-Lösung. Ich würde dazu ein ganz einfaches kleines Template bauen welches die SelectBox, möglichst allgemein, bzw. mit Variablen für ID und co., enthält. Dieses Template würde ich als nächstes auf der Detail-Seite bzw. der WarenkorbSeite an Stelle der jetztigen Selectbox rufen. Den Lagerbestand im Warenkorb, kann man ja über das Viewport s_basket.php ermitteln und über Smarty-Variable in das Template reichen. Bei der Detailseite genauso. Zum Thema Varianten, da wie gesagt die Ajax-Lösung. Also ein kleiner Ajax-Request, der die selektierte Variante als Parameter enthält, und welcher dann in dem zugehörigen Viewport den Lagerbestand holt, per smarty->assign zuweisen und dann per smarty->fetch(SELECTBOX-Template) das oben beschriebene kleine Template rendert. Den Returnwert vom smarty->fetch dann als Response der Ajax-Abfrage angeben und mittels JavaScript dann einfach die SelectBox austauschen. Also so würde ich da jetzt rangehen. @Stefan: Vielen Dank noch für deine Mail. Ich schreib dir morgen noch was dazu. Viele Grüße Thomas

Hallo, ich möchte diesen Thread noch einmal nach vorn holen und hoffe auf einen Tipp, zu dem ich die Lösung wohl nur nicht verstehe… Ich verkaufe in meinem Shop Unikate. Das heißt, jedes Teil gibt es nur 1-mal. Ich kann nun die mögliche Abverkaufsmenge auf 1 stellen, damit der Kunde auch nur 1 Teil bestellen kann. Das funktioniert und klappt auch gut. Nun ist es aber so, dass der Shop natürlich nicht weiß, dass dieser Artikel nie wieder in das Sortiment aufgneommen werden kann… Wie stelle ich den Shop ein, damit nach dem Kauf eines Artikels, dieser nicht mehr bestellbar ist. Es sollte also der Artikel nicht mehr angezeigt werden oder wenn das nicht geht, keine Möglichkeit geben, diesen noch einmal zu bestellen. Ich danke Euch. Beste Grüße Andreas