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.