Hallo … ich hab da mal ne Frage: Wenn ich die Email-Benachrichtigung in einem Artikel einschalte, dann verschwindet der “Jetzt bestellen” Link in der Artikel-Liste im Frontend. Dabei ist es egal, ob der Lagerbestand vorhanden ist oder nicht… Hat das irgend einen tieferen Sinn, den ich nicht verstehe !!! Wenn ich diese Funktion einschalte, dann erwarte ich, daß beim Lagerbestand == min der Link verschwindet und der Kunde die Möglichkeit bekommt, sich benachrichtigen zu lassen. Wenn dann wieder Artikel da sind, dann soll der Link wieder erscheinen… Der Lagerbestand wird bei der Anzeige des Links überhaupt nicht berücksichtigt, wenn die Benachrichtigungsfunktion abgeschaltet ist. Das bedeutet, daß die Sichtbarkeit des Links einzig und allein von der Aktivierung der Benachrichtigungsfunktion abhängt ? Soll das so sein ? und wenn ja, warum ? Kann man dieses Verhalten per Konfiguration ändern ? oder ist das ein Bug ? Gruß Jürgen
Da hier offensichtlich niemand eine Meinung bzw. eine Erklärung hat… werde ich mal zusammenfassen, was ich rausgefunden habe. Die Funktionalität, ob der Link angezeigt wird oder nicht findet sich im Template ‘frontent/listing/box_article.tpl’ und ist dort in einem eigenen Smarty-Block gekapselt. [color=green]Das ist gut[/color], weil man so die Möglichkeit hat, den Block einfach zu überschreiben ohne Code ändern zu müssen. [color=red]Das ist aber auch ein schlechtes Design[/color], weil Fachlichkeit in der View umgesetzt wird. Darin findet man dann die folgende Zeile, die bestimmt, ob der Link sichtbar wird oder nicht: {block name='frontend\_listing\_box\_article\_actions\_buy\_now'} {\* Buy now button \*} {if !$sArticle.priceStartingFrom && !$sArticle.sConfigurator && !$sArticle.variants && !$sArticle.sVariantArticle && !$sArticle.laststock == 1 && !($sArticle.notification == 0 && {config name="deactivatebasketonnotification"} == 1)} [{s name='ListingBoxLinkBuy'}{/s}]({url controller='checkout' action='addArticle' sAdd=$sArticle.ordernumber} "{s name='ListingBoxLinkBuy'}{/s}"){/if} {/block}
Das bedeutet, daß der Link ausgeblendet wird, wenn: [list] [*] Der Artikel konfigurierbar ist[/*] [*] Es ein Variantenartikel ist[/*] [*] Der Artikel im Abverkauf ist[/*] [*] Die Email-Benachrichtigung eingeschaltet ist (!)[/*][/list] Ich beziehe mich im Folgenden NUR auf die Email-Benachrichtigung. Die ist hier statisch eingebunden, also entweder wird der Link immer angezeigt oder nie. Die restliche Benachrichtigungs-Funktionalität hängt korrekt am Lagerbestand und greift automatisch, wie man das erwarten würde. Da mir niemand den tieferen Sinn dieser statischen Deklaration erklären kann, denke ich, daß es ein Bug ist, oder einfach nur wenig durchdacht. Immerhin muß es schon mal jemand gemerkt haben, da man diesen Unsinn in den Grundeinstellungen abschalten kann (aber eben nur statisch!) Daher habe ich das Template überschrieben und die Bedingung geändert: {block name='frontend\_listing\_box\_article\_actions\_buy\_now'} {\* Buy now button \*} {if !$sArticle.priceStartingFrom && !$sArticle.sConfigurator && !$sArticle.variants && !$sArticle.sVariantArticle && !$sArticle.laststock == 1 && $sArticle.instock \> 0} [{s name='ListingBoxLinkBuy'}{/s}]({url controller='checkout' action='addArticle' sAdd=$sArticle.ordernumber} "{s name='ListingBoxLinkBuy'}{/s}"){/if} {/block}
Nun funktioniert alles wie es soll. Wenn der Lagerbestand auf 0 geht, verschwindet der Button und man kann den Artikel nicht mehr bestellen. Der Lagerbestand wird korrekt auf ‘nicht lieferbar’ gesetzt und wenn die Email Benachrichtigung eingeschaltet ist, dann erscheint in der Detail-Ansicht auch die Registrierungs-Box. Man muß also nicht mehr die Benachrichtigungsfunktion manuell einschalten, wenn der Lagerbestand auf 0 steht und dann wieder zurück… Besser wäre es noch, wenn man den Lagerbestand gegen den Mindest-Lagerbestand anstatt gegen 0 testen würde, aber der ist im Template nicht verfügbar. Um das zu bewerkstelligen, müßte der Code angepasst werden: Klasse: /engine/core/class/sArticle.php Methode: sGetArticlesByCategory Zeile: 1061 Änderung: Erweiterung der Query IF(aDetails.instock\>aDetails.stockmin,1,0) as available,
Das würde die Variable $sArticle.available im Template bereitstellen, die direkt abgefragt werden kann. Nachteil dieser Änderung ist aber, daß der Artikel nicht mehr vorbestellt werden kann, also in einen negativer Lagerbestand hinein… Beste Grüße Jürgen
Ich habs so umgesetzt, damit es mir passt: {block name='frontend\_listing\_box\_article\_actions\_buy\_now'} {\* Buy now button \*} {if !$sArticle.priceStartingFrom &&!$sArticle.sConfigurator && !$sArticle.variants && !$sArticle.sVariantArticle && !($sArticle.laststock == 1 && $sArticle.instock == 0) && !($sArticle.notification == 1 && $sArticle.instock == 0)} [{s name='ListingBoxLinkBuy'}{/s}]({url controller='checkout' action='addArticle' sAdd=$sArticle.ordernumber} "{s name='ListingBoxLinkBuy'}{/s}"){/if} {/block}