Um die Menge eines im Warenkorb befindlichen Produktes zu ändern, muss normalerweise die Produktdetailansicht (ws_product.htm) aufgerufen werden. Dort kann der Käufer die gewünschte Änderung vornehmen und die Produktmenge aktualisieren.
Um diesen Prozess abzukürzen, kann die Änderung der Menge auch direkt auf der Warenkorbseite (ws_basket.htm) angeboten werden:
Integration
Achtung: |
|
Jede Änderung der Produktmenge mittels der Plus- und Minussymbole ist ein AJAX-Call, wodurch die verbrauchten Leistungseinheiten (LE) steigen. |
Schritt 1: Freischaltung/Aktivierung
Es ist keine Freischaltung oder Aktivierung seitens WEBSALE nötig.
Schritt 2: Menge-ändern-Funktion (JavaScripte) auf der Warenkorbseite (ws_basket.htm)
Ergänzen Sie auf der Warenkorbseite (ws_basket.htm) folgenden Code:
{WS-TplComment} <!-- Change quantity in Cart --> <!-- Falls noch nicht global eingebunden, wird das folgende Modul benötigt --> <!-- Die Modul-Datei kann auch über das WEBSALE PageSpeed-Tool eingebunden werden --> {/WS-TplComment} <script src="/$WS/ws_sysdata/js/ws-module-ajaxgeneric-1.8.5.js"></script> {WS-TplComment} <!-- Change quantity in Cart --> <!-- Für die Mengen-Änderung kann ein Skript-Datei eingebunden werden --> <!-- Das Script kann auch ausgelagert werden in eine externe Datei, z.B. ws-module-basket-change-quantity.js--> {/WS-TplComment} <script> // Versteckte Felder per Ajax Laden $(document).on('mousedown','.basket--quantity--change button,.basket--quantity--change input',function(){ var $quantityupdown = $(this).data('quantity'); var $basketprnumber = $(this).closest('.basket--quantity--change').data('basketprnumber'); var $basketchangelink = $(this).closest('.basket--quantity--change').data('basketchangelink'); if(!$('#productform--basket--quantity--'+$basketprnumber).length > 0 ){ ws_AJAXloadTemplate($basketchangelink+'&tpl=incl_basket_quantity_change.htm&otpproductnumber='+$basketprnumber, '~WS-Charset~', ws_AJAXBasketAjaxChangeQuantityStart, ws_AJAXBasketAjaxChangeQuantityError, 'ws_AJAXBasketAjaxChangeQuantityResponseSuccess()', 'ws_AJAXBasketAjaxChangeQuantityResponseError()'); } }); // Funktion um die Inputs zu spiegeln und den Change auszulösen function mirrorbasketinputs() { $('.basket--quantity--change').each(function(){ var $value = $(this).find('input[data-quantity="input"]').val(); var $basketprnumber = $(this).data('basketprnumber'); var $basketprnumberinput = $('#productform--basket--quantity--'+$basketprnumber).find('.ajax-quantity-hidden-change'); if($basketprnumberinput.length > 0 ){ if($basketprnumberinput.val() !== $value){ $basketprnumberinput.val($value); ws_AJAXsendForm('productform--basket--quantity--'+$basketprnumber, '~WS-Charset~', ws_AJAXBasketChangeQuantityStart, ws_AJAXBasketChangeQuantityError, 'ws_AJAXBasketChangeQuantityResponseSuccess()', 'ws_AJAXBasketChangeQuantityResponseError()'); } } }); } // Ändern der Menge (-) $(document).on('click','.basket--quantity--change button[data-quantity="down"]',function(){ var $this = $(this).siblings('input[data-quantity="input"]'); var inputValue = parseInt($this.val()); if(inputValue > "1"){ $this.val(inputValue-1); mirrorbasketinputs(); } }); // Ändern der Menge (+) $(document).on('click','.basket--quantity--change button[data-quantity="up"]',function(){ var $input = $(this).siblings('input[data-quantity="input"]'); var inputValue = parseInt($input.val()); $input.val(inputValue+1); mirrorbasketinputs(); }); // Ändern der Menge (Input) $(document).on('focusout','input[data-quantity="input"]',function(){ mirrorbasketinputs(); }); //Diese Funktion wird aufgerufen bevor die AJAX-Anfrage abgesetzt wird. //Mit dieser Funktion ist zum Beispiel eine Ladeanzeige realisierbar function ws_AJAXBasketChangeQuantityStart() { $('#ws--basket').addClass('ajaxreload'); } //Diese Funktion wird aufgerufen wenn die AJAX-Anfrage erfolgreich geladen werden konnte //Mit dieser Funktion ist die Erfolgsmeldung realisierbar function ws_AJAXBasketChangeQuantityResponseSuccess() { $('#ws--basket').removeClass('ajaxreload'); $('#basket--quantity--change--error').empty(); } //Diese Funktion wird aufgerufen wenn die AJAX-Anfrage NICHT geladen werden konnte //Mit dieser Funktion laesst sich die von WEBSALE V8s erzeugte Fehlermeldung ausgeben function ws_AJAXBasketChangeQuantityResponseError() { $('#ws--basket').removeClass('ajaxreload'); // Bei einem Fehler wird das Input Feld geleert, mit diesem Script wird es wieder mit dem richtigen Wert gefüllt. // Bei einem Fehler wird das Input Feld mit dem Zuletzt gesetzten Wert befüllt $('.basket--quantity--change').each(function(){ var $basketprnumber = $(this).data('basketprnumber'); var $currentval = $(this).find('[basket-pr-currentval]').attr('basket-pr-currentval'); var $thisinput = $(this).find('input[data-quantity="input"]'); $($thisinput).val($currentval); $('#productform--basket--quantity--'+$basketprnumber+' .ajax-quantity-hidden-change').val($currentval); }) } //Diese Funktion wird aufgerufen wenn die AJAX-Kommunikation fehlschlug //Mit dieser Funktion laesst sich ein allgemeiner Kommunikationsfehler (z.B. wenn die Internetverbindung unterbrochen wurde) anzeigen function ws_AJAXBasketChangeQuantityError() { $('#ws--basket').removeClass('ajaxreload'); console.log('Basket Quantity Change Error'); } // Funktionen für Hidden Inputs function ws_AJAXBasketAjaxChangeQuantityStart(){} function ws_AJAXBasketAjaxChangeQuantityResponseSuccess() { mirrorbasketinputs(); } function ws_AJAXBasketAjaxChangeQuantityResponseError(){} function ws_AJAXBasketAjaxChangeQuantityError(){} </script>
Schritt 3: Anzeigebereiche auf der Warenkorbseite (ws_basket.htm)
Fügen Sie auf der Warenkorbseite (ws_basket.htm) folgende Anzeigebereiche innerhalb des FORM-Elements hinzu:
<form action="~FORM-Basket~">
...
<!-- Anzeigebereich für die Fehlermeldung (Geladen aus der ws_basket_ajax_error.htm) -->
<div id="basket--quantity--change--error"></div>
<!-- Anzeigebereich für den Warenkorb (Include aus der incl_fast_includes.htm) -->
<div id="ws--basket">
~WS-Fast_Include(Incl-Basket)~
</div>
...
</form>
Fügen Sie auf der Warenkorbseite (ws_basket.htm) folgenden Anzeigebereich außerhalb des FORM-Elements hinzu:
<div style="display:none">
<!-- Anzeigebereich für Änderung der Menge im Warenkorb ## AJAX-Tag ist im Template "incl_basket_quantity_change.htm" -->
{@BASKET-PR-Data}
<div id="quantity--change--ajax--~BASKET-PR-Number~"></div>
{/@BASKET-PR-Data}
</div>
Schritt 4: Fast-Include-Template ergänzen
Ergänzen Sie auf dem Fast-Include-Template (z. B. incl_fast_includes.htm) im Bereich {Incl-Basket} folgenden Code:
{Incl-Basket}
...
{BASKET-PR-Data}
...
{@BASKET-PR-Data}
...
{!ST-BasketPage}~BASKET-PR-Quantity~{/!ST-BasketPage}
{ST-BasketPage}
<div class="basket--quantity--change" data-basketprnumber="~BASKET-PR-Number~" data-basketchangelink="~WS-EnsureNextLinkContainsURLParams~~BASKET-PR-ChangeLink~">
<input type="hidden" basket-pr-currentval="~BASKET-PR-Quantity~">
<div class="pr--button--input--container">
<button type="button" class="btn btn-outline-dark btn--down" data-quantity="down">
<i class="fas fa-minus"></i>
</button>
<input type="text" data-quantity="input" class="form-control text-center basket-quantity-input input--border" name="~PR-Quantity_Input~" value="~BASKET-PR-Quantity~" min="0">
<button type="button" class="btn btn-outline-dark btn--up" data-quantity="up">
<i class="fas fa-plus"></i>
</button>
</div>
</div>
{/ST-BasketPage}
{/@BASKET-PR-Data}
...
{/BASKET-PR-Data}
...
{/Incl-Basket}
Schritt 5: Neues Template anlegen
Legen Sie ein neues Template an und speichern Sie dieses in Ihrem Template-Verzeichnis (z. B. benutzer/templates/translation) unter dem Namen incl_basket_quantity_change.htm.
Fügen Sie folgenden Inhalt in das Template ein:
...
<WS-Ajax-quantity--change--ajax--~WS-OTPProductNumber~>
{PR-Data}
<form action="~FORM-Product~" method="Post" class="productform--basket--quantity" id="productform--basket--quantity--~PR-Number~">
{ST-PR_Change}
~PR-PrintHiddenDepVariations~
<!-- Inputfeld wird benötigt, um korrekte Response zu erhalten (~BT-ProductAddToBasket_Ajax~) -->
<input type="hidden" name="~BT-ProductAddToBasket_Ajax~" value="~PR-Number~">
<input type="hidden" id="num_~PR-Number~" data-basketprnumber="~PR-Number~" class="ajax-quantity-hidden-change"
name="~PR-Quantity_Input~" value="~PR-Quantity~" min="0">
{/ST-PR_Change}
</form>
{/PR-Data}
</WS-Ajax-quantity--change--ajax--~WS-OTPProductNumber~>
...
Schritt 6: Definition des AJAX-Bereiches ws_basket_ajax_error.htm
Ergänzen Sie auf ws_basket_ajax_error.htm folgenden Code:
<!-- Menge ändern im Warenkorb -->
<WS-Ajax-basket--quantity--change--error>
~MSG-Notify~
</WS-Ajax-basket--quantity--change--error>
Schritt 7: Definition des AJAX-Bereiches ws_basket_ajax_success.htm und Neu-Laden des kompletten Warenkorbes nach erfolgreicher Mengen-Änderung
Ergänzen Sie auf ws_basket_ajax_success.htm folgenden Code:
<WS-Ajax-ws--basket>
<!-- Warenkorb noch einmal laden, z. B. durch einen Include -->
~WS-Fast_Include(Incl-Basket)~
</WS-Ajax-ws--basket>
Haben Sie alle Schritte durchgeführt, ist die Funktion "Menge im Warenkorb ändern" vollständig integriert.