Der angekündigte Pre-Release sollte Ihnen per E-Mail bereits gesendet worden sein. Hier erhalten Sie nun noch ein paar Hinweise zur Verwendung.
Bitte ersetzen Sie zunächst Ihren Modulordner "\system\modules\zzz_merconis" durch das neue Verzeichnis "zzz_merconis". Zunächst sollte damit alles so funktionieren, wie bisher.
Legen Sie nun ein neues Frontend-Modul an:
- Frontend-Modul "Ajax"
- fe_modul_ajax.JPG (38.44 KiB) 31922 mal betrachtet
...und binden Sie es an erster Stelle im Ajax-Layout ein:
- Layout "Ajax"
- layout_ajax.JPG (62.09 KiB) 31922 mal betrachtet
Ersetzen Sie nun die Datei "\files\shopfiles\merconisTheme_basic\jsConfiguration\jsConfiguration.js" durch das Verzeichnis "\system\modules\zzz_merconis\installerRessources\shopfiles\merconisTheme_basic\jsConfiguration". Sollten Sie ein anderes Theme verwenden, weicht der Pfad entsprechend ab.
Bitte beachten Sie: Falls Sie Anpassungen an der Datei "jsConfiguration.js" vorgenommen haben, nehmen Sie aus der neuen Datei einfach den entsprechend kommentierten Code-Block am Ende der Datei und fügen Sie ihn in Ihre eigene "jsConfiguration.js" ein.
Dieser Javascript-Code hinterlegt allen regulären "in den Warenkorb"-Buttons in den Standard-Templates die Ajax-Funktionalität. Im genannten Code wird pro Ajax-Request genau ein Produkt mit der im Mengenfeld angegebenen Menge in den Warenkorb gelegt.
Für Ihren Anwendungszweck haben wir nun auch das gleichzeitige Hinzufügen mehrerer Produkte/Varianten in einem Ajax-Request ermöglicht. Der folgende Beispielcode zeigt, wie das funktioniert:
Code: Alles auswählen
/*
* Dieser Code kann in die Datei jsConfiguration.js eingefügt werden.
*
* Wenn ein Element mit der ID 'putAllVariantsToCart' existiert, so wird die Ajax-Funktion, die bei Klick auf das Element alle Varianten
* auf einmal in den Warenkorb legt, initialisiert.
*
* Hinweis: Die Identifikation verschiedener Elemente funktioniert mit diesem Beispielcode im Zusammenhang mit dem standardmäßigen
* Produktdetails-Template Nr. 2 und muss angepasst werden, wenn das Template verändert wird.
*/
var elPutAllVariantsToCartButton = $('putAllVariantsToCart');
if (elPutAllVariantsToCartButton != undefined && elPutAllVariantsToCartButton != null) {
/*
* Alle Submit-Buttons der Varianten-Mengeneingabefelder werden entfernt.
*/
Array.each($$('.variantsContainer input.submit'), function(el) {
el.dispose();
});
/*
* Der Button, der alle Varianten in den Warenkorb legen soll, wird mit einem click-Event versehen.
*/
elPutAllVariantsToCartButton.addEvent('click', function() {
/*
* Alle Varianten-IDs und die jeweiligen Mengen in den Mengeneingabefeldern werden ausgelesen
* und in mehreren Objekten innerhalb eines Arrays hinterlegt.
*/
var arrProductVariantIDsToPutInCart = [];
Array.each($$('.variantsContainer input[name="quantity"]'), function(el) {
var quantity = el.getProperty('value');
var productVariantID = el.getParent().getParent().getElement('input[name="productVariantID"]').getProperty('value');
arrProductVariantIDsToPutInCart.push({'productVariantID': productVariantID, 'quantity': quantity});
});
/*
* Starten des JSON-Requests, der die Varianten in den Warenkorb legt.
* Zu beachten sind die Parameter im "data"-Attribut.
*/
new Request.JSON({
url: MERCONIS_AJAX_URL,
noCache: true,
data: 'REQUEST_TOKEN=' + REQUEST_TOKEN + '&isAjax=1&action=putInCart&requestedClass=ls_shop_ModuleAjaxGeneral&productVariantIDsToPutInCart=' + encodeURIComponent(JSON.encode(arrProductVariantIDsToPutInCart)),
onComplete: function(objResponse) {
/*
* Ist der Request beendet, muss der Mini-Warenkorb aktualisiert werden.
* Sofern der Quickview verwendet wird, muss er gesondert berücksichtigt werden,
* da der Mini-Warenkorb sich dann in der übergeordneten window-Instanz befindet.
*/
if ($$('body')[0].hasClass('merconisThemeLayoutQuickview')) {
window.parent.ls_shop_feController.reloadCartMini();
} else {
ls_shop_feController.reloadCartMini();
}
/*
* objResponse enthält alle Informationen, die zur Ausgabe von Fehler- und Erfolgsmeldungen
* nötig sind. Hier wird objResponse in der Konsole ausgegeben.
*/
console.log(objResponse);
}.bind(this)
}).send();
return false;
})
}
Bitte lassen Sie uns wissen, ob Sie mit diesen Informationen ihr gewünschtes Shopverhalten realisieren können, und fragen Sie, wenn noch etwas unklar sein sollte.