Veröffentlichungsdatum: 16. Dezember 2021
Änderungsdatum: 23. Oktober 2024
Projektgrundlage: BASE
Der Mini-Shop ist in aktueller Version mit dem Objekt-Wizard umgesetzt. Dies ermöglicht eine individuelle Anpassung auf die jeweiligen Bedürfnisse des Shop-Betreibers.
Die Ausgabe und Pflege der Shop-Produkte ist somit in vielen weiteren Bereichen direkt über Masken möglich und auch die Darstellung des Warenkorbs kann komfortabel über den Editor angepasst werden.
Diverse Bereiche werden nachfolgend genauer beschrieben.
Die Seitenansicht und die Pflegemaske der Produktdaten wurden auf den Objekt-Wizard
umgestellt. Dadurch kann der Entwickler die Produkte durch individuelle Darstellungsformen oder Lösungen ergänzen.
Seit April 2022 ist nun auch die Pflege der Listenansicht über den Objekt-Wizard möglich.
Um auf die Funktionen zugreifen zu können, muss die Objektmaske /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/objects/objectMasks/shopProduct.php aktualisiert werden. Des Weiteren muss die Liste unter /[IHR-INHALTS-PROJEKT]/shop/index.php auf die Darstellungsvariante 20100 "Darstellung über Objekt-Wizard" eingestellt werden.
Für die Verwaltung der Shop-Daten wird eine zentrale Klasse wMyShop.php eingesetzt.
Diese liegt unter /[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/wMyShop.php.
Die Klasse wird genutzt um zum Beispiel Produktdaten, Warenkorbdaten oder auch Kundendaten zu verwalten und auszulesen. In der Shop-Umsetzung wird sie in der Regel in den Strukturelementen "Objektdaten manipulieren" eingesetzt.
Die wichtigsten Funktionen sind:
Falls Sie für Ihre individuelle Lösung Anpassungen vornehmen möchten, können Sie das entweder in den Shop-Seiten direkt vornehmen, oder in der wMyShop.php. Beachten Sie in diesem Fall, daß ein Weblic® Update zu den individuell angepassten Dateien ggf. ein erneutes Nachziehen Ihrer Anpassungen erfordert.
Die Darstellung der Shopseiten, warenkorb.php, kundendaten.php und bestellung.php werden nun nicht mehr über das Template cart.wFilelist.php dargestellt, sondern über die Strukturelemente "Objekdaten Manipulieren" und "Objekdaten ausgeben". Dadurch haben Sie die Möglichkeit die Darstellung sowie auch die Funktionalität des Shops über den Objekt-Wizard zu verändern.
In der Seite warenkorb.php ist der gesamte Warenkob über das Strukturelment "Objekdaten ausgeben" als HTML-Struktur abgebildet. Darin werden die Platzhalter verwendet, die auf der aktuellen Seite über die Objekdaten zur Verfügung stehen.
Die Seite warenkorb.php ist vom Typ "default" und enthält daher keine Informationen über den Shop, somit auch keine Informationen über die Artikel, welche der Kunde in den Warenkorb gelegt hat. Wie diese Informationen trotzdem zur Verfügung stehen, wird nachfolgend erläutert.
Dazu wird das Strukturelement "Objekdaten manipulieren" eingesetzt. Hier werden über die neue globale Klasse wMyShop.php die Daten aus dem Warenkorb ausgelesen, weiterverarbeitet und temporär, also nur auf der aktuellen Seite, in die Objektdaten eingepflegt. Die Objekdaten werden also erweitert bzw. überlagert, stehen aber nicht im Quelltext.
Welche Objekdaten Ihnen in der Seite zur Verfügung stehen, können Sie sich, als Administrator angemeldet, über den Requestparameter debugObjectdata=1 anzeigen lassen.
Die Kundendaten in der kundendaten.php werden bei Neuladen der Seite aus der Session übernommen. Dadurch kann der Kunde seine angegebenen Daten während des Bestellvorgangs nochmals überarbeiten.
Wird die Bestellung abgeschickt, werden die Kundendaten (die sich nicht auf die Paypal-Bezahlung beziehen) sowie der gesamte Warenkorb gelöscht.
Die Zahlungsoptionen wurden in die Konfiguration ausgelagert. Dort kann das Selectfeld der Seite kundendaten.php ergänzt werden. Die Zahlungsoptionen sind beliebig erweiterbar. Systemseitig werden folgende Werte unterstützt:
Neben dem Selectfeld, werden die Zahlungsmöglichkeiten in der E-Mail der Konfiguration gesetzt.
Der Filter dazu wurde stark vereinfacht:
[!--extIfPayment_paypal--]Der Kunde hat die Bezahlung per Paypal gewählt[!--extIfPayment_paypal--]
[!--extIfPayment_prepayment--]Der Kunde hat die Bezahlung per Vorkasse gewählt[!--extIfPayment_prepayment--]
[!--extIfPayment_cod--]Der Kunde hat die Bezahlung per Nachnahme gewählt[!--extIfPayment_cod--]
[!--extIfPayment_invoice--]Der Kunde wünscht die Lieferung auf Rechnung[!--extIfPayment_invoice--]
[!--extIfPayment_onCollection--]Zahlung bei Abholung.[!--extIfPayment_onCollection--]
Die Daten innerhalb des Platzhaltes [!--extIfPayment_[Zahlungsmöglichkeit]--] werden entfernt, sollte die Zahlungsmöglichkeit mit der ausgewählten nicht übereinstimmen.
Möchten Sie einen weiteren Wert hinzufügen, können Sie gerne über das Supportformular mit dem Support Kontakt aufnehmen.
Bitte beachten Sie, dass die bestellung.php auf dem neusten Stand ist.
Sie können anstelle der bestehenden Bezahlmöglichkeiten auch das Zahlsystem Stripe einbinden. Stripe bietet als Anbieter zahlreiche Möglichkeiten an. Im Folgenden wurde Stripe-Checkout verwendet.
Die Anpassung ist in der Bestellseite (bestellung.php) einzufügen. Über Javascript Bibliotheken und PHP-Apis wird eine Stripe-Session erstellt über die der Käufer die Bezahlung abwickeln kann. Anschließend leitet die Session auf die Shop-Domain weiter. Je nach Rückgabestatus wird die die Bestellung abgeschickt.
Damit der Käufer bei der Eingabe seiner Kundendaten (kundendaten.php) "stripe" oder ggf. Zahlen via Kreditkarte als Zahlart auswählen kann, ergänzen Sie bitte die abgebildete Konfiguration des Mini-Shops.
Für den Verbindungsaufbau zu Stripe benötigen Sie:
Bitte beachten Sie, dass Sie beim Herunterladen der Api für Stripe-Checkout für das Backend PHP auswählen.
Wir empfehlen, die Script-Dateien wie auch die Stripe-Api im Layout-Verzeichnis unter /[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/stripe zu speichern.
Zunächst einmal muss nach Klick auf den "Zahlungspflichtig bestellen" - Button das Formular abgeschickt werden, so dass die Eingaben des Kunden validiert werden und in den Kundendaten gespeichert werden können. Anschließend wird dann die Stripe-Session erstellt.
Formular-Event
Dazu müssen Sie das Formular (Nach dem Absenden auszuführendes Skript) ergänzen.
if($customerData['payment'] == 'stripe'){
wResponse::redirect('/[Ihr-Projekt]/shop/bestellung.php#startStripeCheckout');
wMyShop::setCustomerData['message'] = $mailData;
exit;
}
Wir empfehlen das "Javascript-Quelltextelement "über den "Bedingten Container für Objektdaten" einzubinden.
Bitte beachten Sie, dass Sie das Quelltextelement entsprechend "Konfiguration JS" einstellen.
Das Quelltextbeispiel, können Sie aus dem Javascript-Quelltext kopieren. Bitte beachten Sie dabei, dass die Platzhalter [PUBLIC-KEY] und [SCRIPT-PATH], etc ersetzt werden.
/*
* Damit Sie auf das Stripe-Objekt zugreifen können,
* müssen Sie die https://js.stripe.com/v3/ einbinden (s. Screen)
* Diese Syntax wird nur ausgeführt wenn #startStripeCheckout in der URL enthalten ist
*/
var publicKey = '[PUBLIC-KEY]'; /*public-Key, entnehmen Sie aus den Einstellungen Ihres Stripe-Kontos*/
var scriptPath = '[SCRIPT-PATH]'; /*Pfad zu dem PHP-Script, das die Stripe-Session erstellt*/
if(typeof wEditor == 'undefined' && /#startStripeCheckout/.test(location.hash)){
/* Der EventListener stellt sicher, dass die Syntax erst ausgeführt wird,
wenn das Stripe-Objekt geladen ist
*/
document.addEventListener('DOMContentLoaded', function waitUntilContentLoaded(){
if(!window.Stripe){
return setTimeout(waitUntilContentLoaded, 100);
}
var stripe = Stripe(publicKey);
/* Erstellen der Session über button-Element await fetch */
buttonStripe = document.createElement("button");
buttonStripe.addEventListener('click', async function(e){
e.preventDefault();
e.stopPropagation();
const session = await fetch(scriptPath, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
}),
}).then(r => r.json());
stripe.redirectToCheckout({sessionId : session.id });
});
buttonStripe.click();
}, false);
}
Der Javascript-Code wird erst ausgeführt, wenn das Formular abgeschickt wurde. Die Anpassungen in dem Formularscript bewirken ein Redirect auf: bestellung.php#startStripeCheckout.
Erst jetzt wird die Session gestartet. Dabei verlässt der Browser die Domain. Nach der Session wird der Seitenbesucher entsprechend der Angaben in der create_session.php, zurückgeleitet.
Via PHP und dem privaten Stripe-Key wird die Session erstellt.
Als result_url definieren Sie die Seite, auf die der Seitenbesucher nach der Session weitergeleitet werden soll.
In diesem Beispiel ist es die bestellung.php, kombiniert mit passendem Request-Parameter.
Bitte prüfen Sie die Syntax des Quelltextbeispiels auf Anpassungen seitens Stripe. Wir empfehlen immer die aktuelle Syntax zu verwenden.
include_once($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
include_once($_SERVER['DOCUMENT_ROOT'].'/[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/stripe/[STRIPE-API]/init.php');
include_once($_SERVER['DOCUMENT_ROOT'].'/[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/wMyShop.php');
$shopConfData = wMyShop::prepareShopData('/[IHR-PROJECT]/shop/variables/default.wVariables.php');
$customerData = wMyShop::prepareCustomerData();
//$cartData = wMyShop::prepareCartData();
// Einstellungen
$privateKey = $shopConfData['stripe_private_key'];
$stripe = new \Stripe\StripeClient(
$privateKey
);
$stripe_session = $stripe->checkout->sessions->create([
'success_url' => 'https://www.domain.dd/[IHR-PROJEkT]/shop/bestellung.php?status=succeeded&stripe_sid={CHECKOUT_SESSION_ID}',
'cancel_url' => 'https://www.domain.dd/[IHR-PROJEkT]/shop/bestellung.php?status=cancelled#paymentError',
'line_items' => [
[
'price_data' => [
'currency' => $shopConfData['currency'],
'unit_amount' => $customerData['totalToPay'] * 100,
'product_data' => ['name' => "Ihre Bestellung"],
],
'quantity' => 1,
],
],
'customer_email' => $customerData['email'],
'mode' => 'payment',
'payment_method_types' => ['card']
]);
echo json_encode($stripe_session);
Bitte beachten Sie, dass in keinem Fall der private-key veröffentlicht werden darf.
Schließt der Kunde die Bezahlung ab, wird die Shop-Oberfläche wieder aktiv. Die URLs die beim Erstellen der Session definiert wurden, werden aufgerufen (success_url, cancel_url).
In Ziel-Seite das session_checkout-Script eingebunden werden.
Als Beispiel können Sie komfortabel über die bestellung.php die HTTP-Requestparameter auslesen und das Formular weiterverarbeiten.
include_once($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
include_once($_SERVER['DOCUMENT_ROOT'].'/[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/stripe/[STRIPE-API]/init.php');
include_once($_SERVER['DOCUMENT_ROOT'].'/[IHR-LAYOUT-PROJEKT]/wGlobal/scripts/php/wMyShop.php');
$shopConfData = wMyShop::prepareShopData('/[IHR-PROJECT]/shop/variables/default.wVariables.php');
$privateKey = [PRIVATE-KEY]; /*private-key ist aus Ihren Konteneinstellungen ersichtlich */
if($_GET['stripe_sid']) {
\Stripe\Stripe::setApiKey($privateKey);
$stripeSession = \Stripe\Checkout\Session::retrieve($_GET['stripe_sid']);
if($stripeSession->payment_status == "paid" && $_SESSION['customerData']) {
/*Falls das Script zurückkommt und die Bezahlung erfolgt ist, können Sie das Formular abschicken.*/
/*Initalisieren Sie davor die Kundendaten (message, gtc, gtd)*/
}
}
Bitte beachten Sie, dass in keinem Fall der private-key veröffentlicht werden darf.
In diesem Beispiel wird der Übersichtlichkeit auf weitere Bedingte Container verzichtet. Eine Abfrage der Objektdaten ist jedoch ratsam.
Die Syntax zum Erstellen der Stripe-Anbindung muss in der Regel angepasst werden. Bitte achten Sie darauf, dass aktuelle Skripte (entsprechend Veröffentlichung durch Stripe) zum Einsatz kommen. Weblication übernimmt keine Gewähr für die Sicherheit und Stabilität der Anbindung.
Sie können anstelle der bestehenden Bezahlmöglichkeiten auch das Zahlsystem PaypalCheckout einbinden. Paypal bietet als Anbieter zahlreiche Möglichkeiten an. Im Folgenden wurde PaypalCheckout verwendet.
Die Anpassung ist in der Bestellseite (bestellung.php) einzufügen. Über Javascript Bibliotheken wird eine Paypal-Session erstellt über die der Käufer die Bezahlung abwickeln kann. Anschließend leitet die Session auf die Shop-Domain zurück. Je nach Rückgabestatus wird die Bestellung abgeschickt.
Damit der Käufer bei der Eingabe seiner Kundendaten (kundendaten.php) "paypalCheckout" oder ggf. PayPal auswählen kann, ergänzen Sie bitte die abgebildete Konfiguration des Mini-Shops.
Falls noch vorhanden empfehlen wir Ihnen die rot markierten Werte aus der Konfiguration zu löschen. Die ursprüngliche paypal-Bezahlmöglichkeit entspricht nicht den Abwicklungen über PayPal Checkout.
Für den Verbindungsaufbau zu PayPal Checkout benötigen Sie:
Auf Ihrem eingeloggten Paypal-Account ist es auch möglich die aktuelle Syntax für die PayPal Checkout Buttons zu kopieren.
Es ist in jedem Fall ratsam diese immer direkt auf der Seite zu holen.
Der PayPal Code kann über einen bedingten Container ganz komfortabel in die Seite eingefügt werden. Da die Validierung der Formulareingaben allerdings nicht verhindert werden darf, muss die JS-Syntax noch ergänzt bzw/angepasst werden. PayPal erstellt die Session in einem Popup-Fenster. Im folgenden Besipiel wird nach erfolgreicher Bezahlung das Formular abgeschickt, so dass auch die Bestelldaten beim Shop-Betreiber wie beim Besteller ankommen.
Alle Informationen die an PayPal geschickt werden können durch individuelle Anpassungen ergänzt werden. Auch die Weiterverarbeitung verschiedener Fälle ist durch individuelle Anpassungen möglich.
Wir empfehlen das "Javascript-Quelltextelement" über den "Bedingten Container für Objektdaten" einzubinden.
Ein Quelltextbeispiel, können Sie aus dem Register "Quelltextbeispiel" entnehmen.
Da externe Anwendungen, in der Regel bestimmten Bedingungen
unterliegen, ist das Anpassen des Scriptes durchaus wahrscheinlich.
Sollten Sie Fragen zu der Schnittstelle haben, unterstützen wir Sie gerne im Rahmen einer Projektdienstleistung.
Durch den Einsatz von "Objektdaten als HTML ausgeben" können Sie in dem Javascript-Code Objektplatzhalter verwenden. Zum Erstellen einer purchase_unit müssen verschiedene Werte wie currency oder totalValue übergeben werden. Der Käufer bekommt diese dann in der PayPal Checkout Session angezeigt.
Die Konfiguration der Buttons entnehmen Sie dem Register "PayPal Session Lib"
<!-- Die nachfolgende Syntax basiert auf der PaypalCheckout - Syntax,
* die jeder Paypal-Händler aus der Oberfläche entnehmen kann.
* Bitte beachten Sie, dass die Syntax in der Regel angepasst werden muss.
*
* Über ein PaypalDeveloper-Konto, das jedem Paypal-Nutzer zur Verfügung steht,
* können Sie ganz konfortabel die Zahlungsmöglichkeiten simulieren.
-->
<!-- HTML Paypal-Button -->
<div id="smart-button-container" style="">
<div style="text-align: center;">
<div id="paypal-button-container"></div>
</div>
</div>
<!-- Einbinden des externen Paypal-Scriptes
* client-id: Händler-Id, können Sie aus den Einstellungen Ihres Paypal-Accounts entnehmen
* disable-funding: aktiviert bzw. deaktiviert weitere Buttons die angeboten werden
* buyer-country: Land des Käufers
* currency: Währung
-->
<script src="https://www.paypal.com/sdk/js?client-id=[!--ihreClientID--]&components=buttons&disable-funding=paylater,giropay,card,sepa,sofort¤cy=[!--currency--]" data-sdk-integration-source="button-factory"></script>
<script>
if(typeof wEditor == 'undefined'){
/* Der EventListener stellt sicher, dass die Syntax erst ausgeführt wird,
wenn das Stripe-Objekt geladen ist
*/
document.addEventListener('DOMContentLoaded', function waitUntilContentLoaded(){
if(!window.jQuery){
return setTimeout(waitUntilContentLoaded, 100);
}
/*Blendet den Zahlungspflichtig bestellen Button aus*/
jQuery('#order button').addClass('invisible');
/*Funktion legt den PayPal-Button an */
function initPayPalButton() {
paypal.Buttons({
style: {
shape: 'rect',
color: 'gold',
layout: 'vertical',
label: 'paypal',
},
/*
* @Created by Scholl Communciations AG
* Bevor Paypal aufgerufen wird, muss zunächst das Bestell-Formular validiert werden.
* Bitte beachten Sie, dass das für das Formular die ID auf "order" gesetzt ist.
*/
onClick: function(e){
var createOrder=true;
var currForm = jQuery('#order');
currForm.find('input, select, textarea').each(function(){
wglValidateElementInline(jQuery(this), {'clientside' : currForm.attr('action').indexOf('/weblication/grid5/tmpHTTP/wForm-') == -1, 'async' : false});
});
if(currForm.attr('data-hasinputsinvalid') == '1') createOrder = false;
return createOrder;
},
/* Beschreibung der Order-Informationen
* Die Bestellung wird als purchase_unit versendet.
* Sie können hier weitere Bestelldaten einfügen.
* Für eine Liste von Produkten können Sie die Platzhalter verwenden.
*/
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
"amount":{
"currency_code":"[!--currency--]",
"value":[!--totalValue--],
}
}]
});
},
/* Nach erfolgreicher Bezahlung wird das Bestellformular abgeschickt. */
onApprove: function(data, actions) {
return actions.order.capture().then(function(orderData) {
jQuery('.cart').closest('form').submit();
});
},
onError: function(err) {
}
}).render('#paypal-button-container');
}
initPayPalButton();
}, false);
}
</script>
Der Aufruf von paypal kann sich abhängig von den Händlerkonten unterscheiden. Wir empfehlen demnach den kontoabhängigen Quelltext des PaypalButtons aus der Paypal-Entwicklerumgebung zu beziehen, diese mit unserer Syntax zu vergleichen und ggf. zu ergänzen. Insbesondere geht es dabei um das Event onClick und onApprove.
In dem Quelltextbeispiel wird die Library eingebunden. Dabei werden für die Darstellung der Buttons verschiedne Requestparamter verwendet:
https://www.paypal.com/sdk/js
?client-id=sb
&components=buttons
&disable-funding=paylater,giropay,card,sepa,sofort
¤cy=[!--currency--]
Der Aufruf von paypal kann sich abhängig von den Händlerkonten unterscheiden. Wir empfehlen demnach den
kontoabhängigen Quelltext des PaypalButtons aus der
Paypal-Entwicklerumgebung zu beziehen, diese mit unserer Syntax zu vergleichen und ggf. zu
ergänzen.
Über Ihren PayPal-Developer Account haben Sie die Möglichkeit einen "Test" Händler Account und einen "Test" Käufer Account anzulegen. In der Testphase empfiehlt es sich diese einzusetzen. Um nur die Käufer zu testen genügt es, die client-id auf sb oder test zu setzen. PayPal Checkout öffnet dann die Accountmaske auf paypal.sandbox.com. Hier können Sie sich dann nur mit Ihren Test-Accounts einloggen. NICHT mit Ihrem Original-Account.
Möchten Sie prüfen ob die Zahlungen auch bei dem Händler ankommen, geben Sie dem Requestparamter die client-Id des "Test"-Händlers an.
Loggen Sie sich zunächst auf Ihrem Paypal-Account ein und rufen Sie anschließend https://developer.paypal.com
auf. Klicken Sie dann rechts oben auf "Go to Dashboard". Unter Sandbox -
Accounts finden Sie die vorbereiteten Test-Konten. Sie können ganz
rechts in der Liste die Konten öffnen und notwendige Informationen
auslesen.
Weitere Informationen dazu unter:
Die Syntax zum Erstellen der PayPal Checkout-Anbindung muss in der Regel angepasst werden. Bitte achten Sie darauf, dass aktuelle Skripte (entsprechend Veröffentlichung durch PayPal) zum Einsatz kommen. Da es sich um eine externe Anbindung handelt übernimmt Weblication keine Gewähr für die Sicherheit und Stabilität der Anbindung.
Sollten die Zahlungsmöglichkeiten sprachabhängig abgebildet werden, ergänzen Sie in der Shop-Textdatei (/[IHR-INHALTS-PROJEKT]/wGlobal/content/text/shop.wTexts.php) den gewünschten Textbaustein:
<text key="shop_payment_[payment_value]">[Ihre Übersetzung]</text>
Beispiel:
<text key="shop_payment_invoice">per invoice</text>
In der Konfiguration des Shops kann die Einstellung "Berücksichtigung des Lagerbestandes" auf "Ja" gesetzt werden. Sollte diese Einstellung in Ihrer Konfiguration noch nicht vorhanden sein, so können Sie diese manuell ergänzen:
<variable description="Lagerbestand berücksichtigen" key="consider_stock" type="char.yesno" inputStyle="width:auto">no</variable>
Bitte beachten Sie in diesem Fall, daß das Mini-Shop Weblic® auf neusten Stand ist und daß Sie die Maildaten entsprechend um die neuen Platzhalter für die Zahlungsmöglichkeiten ergänzen müssen.
Wurde die Funktion aktiviert, so wird beim Bestellvorgang geprüft, ob die ausgewählten Produkte ausreichend auf Lager sind.
Der Kunde bekommt eine Fehlermeldung, sollte die angegebene Anzahl den im Produkt hinterlegten Lagerbestand übersteigen. Schließt der Kunde den Bestellvorgang ab, wird die angegebene Bestandsmenge des Produktes bzw. der Variante entsprechend heruntergerechnet.
Damit die Anzeige vollständig unterstützt wird, muss die Text-Datei (/[IHR-INHALTS-PROJEKT]/wGlobal/content/text/shop.wTexts.php) folgende Einträge enthalten:
<text key="shop_in_stock">auf Lager</text>
<text key="shop_not_in_stock">nicht auf Lager</text>
<text key="shop_stock_input_validation_failed">Achtung, Ihre Auswahl übersteigt den tatsächlichen Lagerbestand.</text>
<text key="shop_variants_input_validation_required_failed">Bitte wählen Sie eine Variante aus.</text>
Da nicht alle Produkte (z.B. Gutscheine) zwingend einen Lagerbestand
haben, ist es möglich, für jedes Produkt separat in der Bearbeitung die Berücksichtigung des
Lagerbestandes zu deaktivieren.
Bitte beachten Sie, das bei zeitgleichen Zugriffen durch die Shop-Besucher, der angezeigte Lagerbestand der mit dem im Produkt eingetragenen variieren kann.
In der Konfiguration des Shops können mit der Einstellung "Weitere Mehrwersteuersätze in %" beliebig viele Mehrwertsteuersätze ergänzt werden.
Sollte diese Einstellung in Ihrer Konfiguration noch nicht vorhanden sein, können Sie diese manuell ergänzen:
<info>Weitere Mehrwersteuersätze in % </info>
<variable description="Mehrwertsteuer-Werte" key="additional_vat_values" type="char.default" inputStyle="">10|8</variable>
<variable description="Mehrwertsteuer-Texte" key="additional_vat_texts" type="char.default" inputStyle="">10%|8%</variable>
Bitte beachten Sie in diesem Fall, daß das Mini-Shop Weblic® auf neusten Stand ist.
Sollten die Lieferzeiten sprachabhängig abgebildet werden, so genügt es, dies in der Shop-Textdatei (/[IHR-INHALTS-PROJEKT]/wGlobal/content/text/shop.wTexts.php) wie folgt zu ergänzen:
<text key="shop_deliveryTime_[deliveryTime_value]">[Ihre Übersetzung]</text>
Beispiel:
<text key="shop_deliveryTime_5-10">5-10 days</text>
In der Konfiguration des Shops kann die Einstellung "Kleinunternehmer" auf "Ja" gesetzt werden. Sollte diese Einstellung in Ihrer Konfiguration noch nicht vorhanden sein, können Sie diese manuell ergänzen:
<variable description="Kleinunternehmer" key="small_business" type="char.yesno" inputStyle="width:auto">yes</variable>
Bitte beachten Sie in diesem Fall, daß das Mini-Shop Weblic® auf neusten Stand ist.
Kleinunternehmer dürfen in Deutschland keine Mehrwertsteuer ausweisen. In diesem Fall werden alle Informationen bezüglich der MwSt bzw. einer anderen Steuer ausgeblendet. Der Warenkorb sowie das Produkt erhalten einen entsprechenden Hinweis, soweit die Text-Datei (s. u.) diese enthält.
Damit die Anzeige vollständig unterstützt wird, muss die Text-Datei (/[IHR-INHALTS-PROJEKT]/wGlobal/content/text/shop.wTexts.php) folgende Einträge enthalten:
<text
key="shop_small_business_noVat_notice">Im Sinne der
Kleinunternehmerregelung nach §19 UStG enthält der ausgewiesene Betrag
keine Umsatzsteuer.</text>
<text key="shop_small_business_noVat">ohne MwSt. (§19 UStG), </text>
Die Lieferzeiten im Standard wurden um den Wert aufAnfrage ergänzt.
Im Allgemeinen können die Lieferzeiten simpel durch individuelle Angaben ergänzt werden. Dazu müssen Sie die Konfiguration um den entsprechenden Value und die zugehörige Caption ergänzen.
Die Lieferzeiten sind in den Objektdaten über den Platzhalter [!--stockInfo.disableOutputEscaping()--] auslesbar. Dieser Platzhalter wird zusammengebaut aus den Informationen in der shop.wTexts.php Datei und dem ausgewählten Wert.
Um für die Lieferzeit auf Anfrage einen Link anzugeben, ergänzen Sie die
shop.wTexts.php einfach durch shop_deliveryTime_aufAnfrage und den
jeweiligen Text.
verfügbar seit Dezember 2022
In der E-Mail soll in der Regel kein Link aufgeführt werden. Hier können Sie durch den Platzhalter shop_deliveryTime_mailStr_aufAnfrage für Mails eine andere Angabe einfügen.
Die Konfiguration "Bestellung erst nach Bezahlung absenden" (paypal_submitAfterPayment) wurde so angepasst, dass nach Absenden der Bestellung diese auf jeden Fall an den Händler wie auch den Kunden gesendet wird. Der Kunde wird bei aktivierter Funktion auf Paypal weitergeleitet und kann den Bezahlvorgang direkt einleiten. Erst wenn der Kunde die Zahlung abgeschlossen hat und er auf den Minishop zurückgeleitet wird (bezahlung-ok.php) wird die aktuelle Session mit den Bestelldaten und den Kundendaten gelöscht.
In der Konfiguration wurde der Text für entsprechend angepasst. Dieser
lautet nun "Kunde nach Bestellung auf Paypal weiterleiten".
Dezember 2022
Paypal kann während der Entwicklung in einem Testmodus ausgeführt werden. Die Konfiguration wurde um die Einstellung "Testmodus über Sandbox" ergänzt. Ist das aktiviert, wird PayPal über die https://sandbox.paypal.com aufgerufen. Um diese Funktion nutzen zu können, bedarf es eines Testhändler- bzw. auch Testkunden Konto, das über ein Paypal-Konto generiert werden kann.
verfügbar seit Dezember 2022
Der Warenkorb kann innerhalb der Produktliste angezeigt werden. Über die Listenvariante "über Objektwizard - 20100" werden die in dem Projekt verfügbaren Objekt-Varianten zur Auswahl angeboten.
Der aktuelle Shop liefert 3 Listenvarianten
Die Warenkorbdaten werden durch die Funktion wMyShop.php::prepareCartData() zurückgegeben.
Für individuelle Anpassungen, wie beispielsweise die Angabe von Versandkosten, die vom Gewicht abhängen, kann der Rückgabewert der oben genannten Funktion mithilfe von wMyProject::callbackShopPrepareCartData angepasst werden.
Im folgenden Beispiel wird angenommen, dass die Produkte um das Gewicht (weight) als zusätzliche Information ergänzt und gepflegt wurden.
verfügbar seit Oktober 2023
//*********************************************************************************/
/**
* @method Array callbackShopPrepareCart(Array $cartData)
*
* @description Callback Funktion, um die Daten die Warenkorbdaten zu manipulieren
*
* @param Array cartData - Aktuelle Warenkorbdaten
*
* @return Array
*
*/
//*********************************************************************************/
public static function callbackShopPrepareCartData($cartData){
/*Ermitteln des Bestellgewichtes, abhängig von den Gewichtsdaten der bestellten Produkte*/
$cartArticles = $cartData['cartEntries'] ?? array();
$weight = 0;
foreach ($cartArticles as $article) {
$weight += $article['weight'] ?? 0;
}
/*Ermitteln der Versandkosten abhängig vom Bestellgewicht */
$shippingCosts = $cartData['shippingCostsDefault'] ?? 5.00;
if($weight > 2000 && $weight < 5000){
$shippingCosts = 10.00;
}
else if($weight > 5000){
$shippingCosts = 15.00;
}
/*Überschreiben der Warenkorb-Daten, damit die Platzhalter in der Seite richtig ersetzt werden*/
$cartData['shippingCostsDefault'] = $shippingCosts;
$cartData['deliveryCosts'] = number_format($shippingCosts, 2, wMyShop::getShopData('decimal_mark'), wMyShop::getShopData('thousandsSeparator')).' '.wMyShop::getShopData('currency');
$cartData['total_value'] = $cartData['totalWithoutShipping_value'] + $cartData['shippingCostsDefault'];
$cartData['total'] = number_format(round($cartData['total_value'], 2), 2, wMyShop::getShopData('decimal_mark'), wMyShop::getShopData('thousandsSeparator')).' '.wMyShop::getShopData('currency');
return $cartData;
}
Die Produktdaten werden durch die Funktion wMyShop.php::prepareProductData() zurückgegeben.
Für individuelle Anpassungen, wie beispielsweise das Festlegen eines maximalen Bestellwertes für den Shopbesucher, kann der Rückgabewert der oben genannten Funktion mithilfe von wMyProject::callbackShopPrepareProductData angepasst werden.
Im folgenden Beispiel wird angenommen, dass die Pflegereferenz der Produkte um das Pflegefeld 'orderMax' ergänzt wurde. Wurde hier kein Wert angegeben, so wird für die maximale Bestellsumme der aktuelle Lagerbestand angenommen. In der Konfiguration des Shops wurde die Berücksichtigung des Lagerbestandes aktiviert.
verfügbar seit November 2023
//*********************************************************************************/
/**
* @method Array callbackShopPrepareProductData(Array $productData)
*
* @description Callback Funktion, um die Produktdaten zu manipulieren
*
* @param Array productData - Aktuelle Produktdaten
*
* @return Array
*
*/
//*********************************************************************************/
public static function callbackShopPrepareProductData($productData){
/*Maximale Bestellzahl für ein Produkt festlegen
Dazu genügt es den data-pattern-Wert des Inputfeldes des Produktes zu verändern
In diesem Beispiel ist der Bestellwert in den Objektdaten unter orderMax gepflegt
*/
foreach($productData['variants'] as $key => $value){
/*Zusammenbau des InputStrings*/
$input = '<input id="variant_'.$value['id'].'" '
.(!empty($value['checked']) && $value['checked'] ? 'checked="checked"' : '')
.' type="radio" name="variant" checked="checked" style="" value="'.$value['id'].'"'
.($value['consider_stock'] === 'yes' ? 'data-errormsg="Sie haben die maximale Bestellzahl überschritten"
data-pattern="'.($value['orderMax'] != '' ? 'maxvalue('.$value['orderMax'].')' : ($value['stock'] != '' ? 'maxvalue('.$value['stock'].')' : '')).'"' : '').'></input>';
/*Überlagern des bestehenden Strings*/
$productData['variants'][$key]['formInputVariant'] = $input;
}
/*Rückgabe der überlagerten Daten*/
return $productData;
}
verfügbar ab September 2024, Stand: Beta
Um Rabattcodes in Ihrem Shop zu verwenden, müssen Sie die Einstellung „Rabattcodes aktivieren“ in der Konfiguration des Shops auf „Ja“ setzen.
Falls diese Option in Ihrer Konfiguration noch nicht vorhanden ist, können Sie sie manuell wie folgt ergänzen:
<wVariables>
.....
<variable description="Rabattcodes aktivieren" key="discount_active" type="char.yesno" inputStyle="width:auto">yes</variable>
</wVariables>
Nach Aktivierung der Rabattcodes können diese über die Schaltfläche „Rabattcodes“ auf der Startseite des Shops verwaltet werden.
Die Rabattcodes lassen sich in folgende Kategorien unterteilen:
Zusätzlich kann der Rabattcode zeitlich begrenzt werden und entweder in Prozent oder als absoluter Betrag (z. B. x EUR) definiert werden.
Um die Funktion der Rabattcodes in einen bestehenden Shop einzubauen müssen folgende Dateien installiert, aktualisiert oder manuell angepasst werden.