Frontend: Mengeneingabe durch Textfeld statt Dropdown-Menü

Hallo, wie der Titel schon sagt suche ich nach einer Möglichkeit das Dropdown-Menü auf einer Artikeldetailseite bei der Mengenauswahl durch ein Textfeld zu ersetzen, so dass der Kunde seine gewünschte Anzahl eintippen kann. Hat so etwas schon jemand gemacht? Viele Grüße, Martin

Kleiner Push da ich zur Zeit auch auf der Suche danach bin.

Würde mich auch interessieren… Oder eine Art “Kalender”, wo der Kunde ein entsprechendes Datum ankicken kann… Jemand eine Idee?

Ich beschäftige mich auch gerade mit dem Thema. Bei meinen Versuchen die Shop-Performance zu verbessern bin ich auf das Mengenfeld gestoßen. Durch die Lösung mit dem DropDown-Feld wird der HTML-Code unglaublich aufgeblasen. Und das macht z.B. den Warenkorb sehr langsam. Für jede Artikelmenge werden 3 Zeilen Code generiert. Nehmen wir an die maximal wählbare Artikelmenge ist 1000. Dann werden für jeden Artikel im Warenkorb 3.000 Zeilen Code generiert. Das macht bei 10 Artikeln im Warenkorb 30.000 Zeilen HTML-Code. Ich musste für einen Kunden die maximal wählbare Artikelmenge auf 10.000 setzen. Die Shopkunden stellten sich häufig einen Warenkorb mit 30-40 Artikel zusammen. Das machte dann sagenhafte 900.000 bis 1.200.000 Zeilen Code. Die generierte HTML-Datei hat da gerne mal 12MB und mehr. Auch in der Artikel-Detailansicht wird dieser Ballast mitgeschleppt. Nur da wirkt es sich nicht so stark aus, da es ja immer nur ein Artikel ist. Dennoch kann man da auch Geschwindigkeit rausholen. Folgender Beitrag hat mich auf die Lösung gebracht das Pulldownfeld durch ein Texteingabefeld zu ersetzen: post21181.html?hilit=mengeneingabefeld#p21181 Für die Artikel-Detail-Seite habe ich folgende Änderungen in der \templates\mytemplate\frontend\detail\buy.tpl gemacht: {\* Grundgeruest vom Mastertemplate erben \*} {extends file="../\_default/frontend/detail/buy.tpl"} {block name='frontend\_detail\_buy\_quantity'} {if $sArticle.laststock && !$sArticle.sVariants && $sArticle.instock \< $sArticle.maxpurchase} {assign var=maxQuantity value=$sArticle.instock+1} {else} {assign var=maxQuantity value=$sArticle.maxpurchase+1} {/if}<label for="sQuantity">{s name="DetailBuyLabelQuantity"}{/s}:</label><input id="sQuantity" type="text" name="sQuantity" value="1" size="5" maxlength="30">{/block} Und für den Warenkorb musste ich die Datei \templates\mytemplate\frontend\checkout\cart_item.tpl wie folgt anlegen: [code]{* Grundgeruest vom Mastertemplate erben *} {extends file="…/_default/frontend/checkout/cart_item.tpl"} {* Article amount *} {block name=‘frontend_checkout_cart_item_quantity’}

{if $sBasketItem.modus == 0}{else}   {/if}
{/block} [/code] Der Wert maximal wählbare Artikelmenge ist aber auch bei dieser Variante relevant und muss entspr. definiert werden.

4 „Gefällt mir“

Ich habe beide Ordner nicht in meinem template Ordner. Was nun?

Die Ordner einfach anlegen.

1 „Gefällt mir“

Wunderbar. Funktioniert perfekt.

Hallo mbcontrol, und wie schaffe ich es, dass bei der Berechnung auch Kommazahlen akzeptiert werden? Wir bieten auch Rollenware an, dort benötigen wir Eingaben wie z.B. 1,7 m. Freue mich über Tipps! :slight_smile:

Da muss ja sowieso ein zusätzliches Feld her. Was ist, wenn ich zwei „Rollenware“(was auch immer das ist) je 1,7 m brauche? Und wenn hier ein neue Feld ins Spiel kommt, kann man das ohne Plugin kaum machen (meiner Meinung nach). Ich glaube im Store gibt es ein Plugin, welches die gewünschte Funktionalität realisiert.

Danke für den Tipp! Habe gerade die ganze Zeit noch solch einem Plugin gesucht, ohne Erfolg. Wie heißt denn das Plugin? Lieben Gruß

Da hat aber einer nicht richtig geschaut. Flächenberechnung

Hallo, der Beitrag ist zwar schon etwas älter aber kann mir jemand dort hilfestellung bei der aktuellen 4.1.3 Version?? Am besten wäre es für mich neuling genau zu beschreiben in welcher datei ich welchen codeschnipsel wie ersetzen muss.

Und mit ein wenig HTML5, so der Browser es denn kann, wird das gleich noch ein Stück angenehmer. <input id="sQuantity" type="number" min="1" name="sQuantity" value="1" size="5" maxlength="30">

Ich habe schon vor einiger Zeit ein Plugin für die Eingabe programmiert. Damit kann man auch große Mengen realisieren, ohne das der Browser oder Server stribt. Darstellung Artikelmenge Gruß Marco

Hi, habe die Ordner angelegt und den Quelltext eingefügt. Nun erhalte ich folgenden Fehler: Hatte versucht 10x einen Arikel in den Warenkorb zu legen. [code]Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. Syntax Error in template “/var/www/vhosts/grow-da.de/httpdocs/templates/emotion_green/frontend/checkout/cart_item.tpl” on line 2 “{extends file=…_defaultfrontendcheckoutcart_item.tpl}” - Unexpected “.”, expected one of: INTEGER in Smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 657 Stack trace: #0 Smarty/sysplugins/smarty_internal_templateparser.php(3144): Smarty_Internal_TemplateCompilerBase->trigger_template_error() #1 Smarty/sysplugins/smarty_internal_templateparser.php(3209): Smarty_Internal_Templateparser->yy_syntax_error(59, ‘.’) #2 Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse(59, ‘.’) #3 Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile(’{ Grundgeruest …’) #4 Smarty/sysplugins/smarty_internal_compile_include.php(146): Smarty_Internal_TemplateCompilerBase->compileTemplate(Object(Enlight_Template_Default)) #5 Smarty/sysplugins/smarty_internal_templatecompilerbase.php(475): Smarty_Internal_Compile_Include->compile(Array, Object(Smarty_Internal_SmartyTemplateCompiler), Array, NULL, NULL) #6 Smarty/sysplugins/smarty_internal_templatecompilerbase.php(249): Smarty_Internal_TemplateCompilerBase->callTagCompiler(‘include’, Array, Array) #7 Smarty/sysplugins/smarty_internal_templateparser.php(2388): Smarty_Internal_TemplateCompilerBase->compileTag(‘include’, Array) #8 Smarty/sysplugins/smarty_internal_templateparser.php(3101): Smarty_Internal_Templateparser->yy_r36() #9 Smarty/sysplugins/smarty_internal_templateparser.php(3201): Smarty_Internal_Templateparser->yy_reduce(36) #10 Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse(10, ‘? …’) #11 Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile(’?

[quote=“Grow-da”]Hat jemand eine Idee?[/quote] Der meckert weil da {extends file=..\_defaultfrontendcheckoutcart\_item.tpl} statt{extends file="../\_default/frontend/checkout/cart\_item.tpl"} im Template geschrieben steht … hastes falsch copy/paste?

Habe die Zeile angepasst. Nun erhalte ich einen weiteren Fehler. Klar nach dem „if“ steht keine Anweisung (missing if condition), aber ich habe auch leider keine Ahnung, was ich dort eintagen müsste -.-" Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. Syntax Error in template "/var/www/vhosts/grow-da.de/httpdocs/templates/emotion\_green/frontend/checkout/cart\_item.tpl" on line 12 "{if}" missing if condition in Smarty/sysplugins/smarty\_internal\_templatecompilerbase.php on line 657 Stack trace: Mal von vorne: ich habe in emotion_green/frontend zwei ordner angelegt Namens checkout und detail. In jedem Ordner jeweils eine Datei angelegt. In Checkout cart_item.tpl und in detail buy.tpl Inhalt buy.tpl {\* Grundgeruest vom Mastertemplate erben \*} {extends file="../\_default/frontend/detail/buy.tpl"} {block name='frontend\_detail\_buy\_quantity'} {if $sArticle.laststock && !$sArticle.sVariants && $sArticle.instock \< $sArticle.maxpurchase} {assign var=maxQuantity value=$sArticle.instock+1} {else} {assign var=maxQuantity value=$sArticle.maxpurchase+1} {/if}<label for="sQuantity">{s name="DetailBuyLabelQuantity"}{/s}:</label><input id="sQuantity" type="text" name="sQuantity" value="1" size="5" maxlength="30">{/block} Inhalt cart_item.tpl { Grundgeruest vom Mastertemplate erben } {extends file="../\_default/frontend/checkout/cart\_item.tpl} { Article amount } {block name='frontend\_checkout\_cart\_item\_quantity'} div class=grid\_1 {if $sBasketItem.modus == 0} input id=sQuantity type=text name=sQuantity value={$sBasketItem.quantity} class=auto\_submit size=5 maxlength=30input input type=hidden name=sArticle value={$sBasketItem.id} {else} &nbsp; {if} div {block} edit: was mir gerade auffällt, dass das Suchfeld und der Rest im Header fehlt sobalt ich im Warenkorb bin… http://grow-da.de/ edit2: wo finde ich Smarty/sysplugins/smarty_internal_templatecompilerbase.php ? – found in /engine/Library/Smarty/sysplugins edit3: Inhalt line 657 throw new SmartyCompilerException($error\_text); was sagt mir das?

So, ich habe es hinbekommen :slight_smile: Inhalt cart_item.tpl [code]{ Grundgeruest vom Mastertemplate erben } {extends file="…/_default/frontend/checkout/cart_item.tpl"} {* Article amount *} {block name=‘frontend_checkout_cart_item_quantity’}

{if $sBasketItem.modus == 0} {else}   {/if}
{/block}[/code] Inhalt buy.tpl [code]{* Grundgeruest vom Mastertemplate erben *} {extends file="…/_default/frontend/detail/buy.tpl"} {if !$sArticle.laststock || $sArticle.sVariants || $sArticle.instock>0}
{block name=‘frontend_detail_buy_quantity’} {if $sArticle.laststock && !$sArticle.sVariants && $sArticle.instock < $sArticle.maxpurchase} {assign var=maxQuantity value=$sArticle.instock+1} {else} {assign var=maxQuantity value=$sArticle.maxpurchase+1} {/if} {s name=“DetailBuyLabelQuantity”}{/s}:<!–


→ {/block}[/code] Damit funktioniert es jetzt perfekt :slight_smile:

Hallo, vielen Dank für die Lösung. Ich habe allerdings ein kleines Problem, wenn ich im Artikel eine Mindestmenge mit oder ohne Stafflung eingebe, funktioniert das mit dem Text-Feld nicht mehr. Heißt, Artikel A hat eine Mindestmenge von 3, der Kunde gibt in das Feld aber nur 2 ein. Hier wird der Inhalt dann nicht in den Warenkorb übermittelt, nur wenn man die Korrekten Möglichkeiten eingibt! Könnte man bestimmt mit einer {if} in den 2 Datein regeln. Weiß aber nur nicht mit welchen Variablen… Kann mir hierzu jemand helfen?