Hallo, ich suche die Möglichkeit den Warenkorb per Link zu reloaden, sprich zu aktualisieren. Das Ganze benötige ich, um die Artikelanzahl (bei mir ist es ein Textfeld und nicht das standartmäßige Pull-Down Menü) zu übergeben. Ich könnte es natürlich über einen Link mit Javascript-Inhalt machen, jedoch erachte ich das als nicht die sauberste Lösung. Gibt es eine interne Variable um die Seite neu zu laden? Bzw wenn ich mir das so überlege müsste man das Formular über den Link abschicken können damit die Änderung wirksam wird. €dit: Hab schon einen hinweis gefunden: /sViewport,checkout/sAction,changeQuantity/sTargetAction,cart
Diese Adresse benötige ich als Smarty Link
Hab nun mit dieser Anweisung die gewünschte URL generiert:{url action='changeQuantity' sTargetAction=$sTargetAction}
Aber das Ergebnis ist noch unbefriedigend…es passiert nämlich garnichts Ich denke mir es muss am Ende eher in diese Richtung gehen:{url action='changeQuantity' sChange=$sBasketItem.id sTargetAction=$sTargetAction}
Bin über jeden Hinweis dankbar!!
Hat denn niemand eine Idee??
Ich habe leider keine Lösung, aber was spricht dagegen, es mit JavaScript zu lösen? Der Shop benutzt sowieso JS und ich denke die Anzahl an Usern, die JS deaktiviert haben ist doch verschwindent gering… Ich würde eine JS Funktion schreiben, die bei Verlassen des Textfeldes überprüft ob es eine Änderung gab und falls ja, die Seite refresht.
Ich bin leider was JS angeht nicht besonders fit. Könntest du mir bitte solch eine Funktion mal beispielhaft schreiben?
Hallo Chaos, probiere es mal damit. /\*\* Anonymous function to get new scope \*/ (function($) { /\*\* Check if the DOM is ready \*/ $(document).ready(function() { /\*\* Add a event listener to submit the form \*/ $('#basket input.sQuantity').bind('blur', function() { $(this).parents('form').submit(); }); }); })(jQuery);
Ich bin jetzt einfach davon ausgegangen, dass das Textfeld die Klasse sQuantity hat. Viele Grüße, Stephan Pohl :shopware:
Steinigt mich nicht gleich aber: Ich weiß noch nicht an welcher stelle ich den Code einbinden muss bzw. wie mein Hyperlink dann auszusehen hat! 1. Ich würde den JS-Code mit in die Templatedatei vom Warenkorb legen. 2. Wie gestalte ich den Link zum aktualisieren dann?
[quote=“Chaos”]Steinigt mich nicht gleich aber: Ich weiß noch nicht an welcher stelle ich den Code einbinden muss bzw. wie mein Hyperlink dann auszusehen hat! 1. Ich würde den JS-Code mit in die Templatedatei vom Warenkorb legen. 2. Wie gestalte ich den Link zum aktualisieren dann?[/quote] Guten Morgen Chaos, du musst den Block “frontend_checkout_cart_item_quantity” im Template “checkout/cart_item.tpl” ersetzen. Als Inhalt verwendest du folgendes Code-Snippet: [code] {block name=‘frontend_checkout_cart_item_quantity’}
{if $sBasketItem.modus == 0} {else} {/if}
{/block} [/code] Wichtig hierbei ist dass die Funktion Minimale- und Maximale Abnahmemenge sowie die Artikelstaffelung nicht mehr greift. Dies müsste in die Javascript-Funktion mit aufgenommen werden. Der Javascript-Code sollte am besten in eine eigene Templatespezifische Javascript-Datei ausgelagert werden z.B. “jquery.my-template.js” und in der Template-Datei “index/header.tpl” im Block “frontend_index_header_javascript_jquery” inkludiert werden. Viele Grüße, Stephan Pohl :shopware:
Vielen Dank Stephan!! Nun funktioniert es super :thumbup: Ich habe den Code noch etwas umgewandelt, damit auch die aktuelle Artikelanzahl in dem Textfeld ausgegeben wird: [code]{block name=‘frontend_checkout_cart_item_quantity’}
{if $sBasketItem.modus == 0} {else} {/if}
{/block}[/code] Aus optischen Gründen habe ich per CSS Befehl noch die obere Select-Box unsichtbar gemacht. [quote]Wichtig hierbei ist dass die Funktion Minimale- und Maximale Abnahmemenge sowie die Artikelstaffelung nicht mehr greift. Dies müsste in die Javascript-Funktion mit aufgenommen werden.[/quote] Damit bin ich wieder überfordert aber in meinem Fall benutzen wir keine Mindestabnahmemengen. Zum Test habe ich mal probiert die Artikelanzahl auf “0” zu setzen, was einen Reload mit der vorherigen Artikelanzahl zur Folge hat. Das ist für mich völlig okay so. Nach oben hin begrenzt die im Shop eingestellte Maximalanzahl (in meinem Fall “99999”) die Eingabe. Nochmals vielen Dank für die Hilfe!!