Storefront-Library
Hintergrund, Motivation und Anforderungen
Die Storefront-Library wurde im Rahmen des Checkout 2.0 Projekts entwickelt.
Hintergrund: Mit Checkout 2.0 wurden die Möglichkeiten zur Rabattierung deutlich erweitert und damit auch komplexer. Unterschiede gegenüber der alten Rabattierung mit Hilfe von Shopify Scripts sind unter anderem:
-
Rabatte können auch auf Basis von Varianten gegeben werden.
-
Für Gratisprodukte sind beliebig viele Freigrenzen möglich. Genauso können an einer Freigrenze mehrere verschiedene Produkte per "und" oder "oder" verknüpft werden.
-
Mit den "conditional Discounts" wurde eine neue Art von Rabatten eingeführt, mit denen z.B. folgende Fälle abgedeckt werden können:
- Staffelpreise
- BOGO (Buy one get one free)
- Zwei Produkte kaufen, eins gratis erhalten.
- Ein Produkt kaufen, x % Rabatt auf ein anders Produkt erhalten.
- Produkt A für 50 € kaufen, 70 % Rabatt auf Produkt B erhalten.
- 40 % Rabatt auf die ersten drei Einheiten eines Produkts, beginnend mit der vierten Einheit aber nur noch den Standard-Rabatt von 10 %.
- Vier für drei: Vier Produkte kaufen, das günstigste davon gratis erhalten.
Um nach Eingabe eines Discount-Codes Streichpreise in den Kategorien und an den Produkten anzuzeigen, wurde ein Tool benötigt, das auch die Streichpreise zu den neuen Rabattarten korrekt und zuverlässig ermitteln kann. Dabei muss alles berücksichtigt werden, das auch im Checkout Berücksichtigung findet.
Aufgrund der neuen Komplexität sollte von Anfang an vermieden werden, dass ein Storefront-Entwickler sich in den Bereich Rabattierung einarbeiten muss, wenn er eine Funktionalität schaffen soll, die irgendwie mit Rabatten zu tun hat. Daher wurde beschlossen eine Library zu entwickeln, die von jedem wie eine Blackbox genutzt werden kann. D.h.: Der Entwickler kann die Funktionen der Library aufrufen, ohne dass er sich über die Details der Berechnungen Gedanken machen muss. Dadurch befinden sich alle im Kontext Rabattierung benötigten Funktionen an einer Stelle, und es wird ein Patchwork vermieden, das schwer zu überschauen und zu warten ist.
Konkret wurden die folgenden Funktionen im Zusammenhang mit der Rabattierung benötigt:
- Setzen, Ändern und Entfernen von Discount-Codes.
- Berechnung des rabattierten Produktpreises zur Darstellung des Streichpreises.
- Separate Abfrage der conditional Discounts für ein Produkt.
- Informationen für den Vergabeprozess von Gratisprodukten:
- Ermittlung der Freigrenzen.
- Zu jeder Freigrenze die Info ermitteln, ob verfügbare Produkte existieren.
- Ermittlung der Produkte, die gratis sein sollen aber noch nicht vergeben wurden.
- Ermittlung der Gratisprodukte für die jeweils nächste Freigrenze.
- Ermittlung aller bisher vergebenen Gratisprodukte.
- Ermittlung der Infos für die Versandkosten-Leiste auf Basis Standardversand und Shipping Discounts:
- Standardversandkosten
- Standard-Freigrenze
- Info, ob Freigrenze erreicht.
- Bundle-Preise (zur Darstellung in den Collections).
- Ermittlung des Standard-Discount-Codes (in DE meist "aktion", in NL meist "promo").
- Ermittlung des Standard-Discounts (Prozentsatz oder Betrag).
Methoden
Die Storefront-Library liefert ein Objekt namens co2 zurück, mit dem die folgenden Methoden zur Verfügung gestellt werden.
getDiscountCode
Zweck:
Ermittlung des aktuell gesetzten Discount-Codes.
Aufrufbeispiel:
await co2.getDiscountCode();
Parameter:
Keine
Rückgabewert:
Discount-Code (string) oder false (boolean). false kommt zurück, falls kein Discount-Code gesetzt ist.
getDiscountType
Zweck:
Ermittlung, ob der aktuell gesetzt Discount-Code ein Influencer-Code ist.
Aufrufbeispiel:
await co2.getDiscountType();
Parameter:
Keine
Rückgabewert:
"infl", "pub" (string) oder false (boolean). Bedeutungen:
"infl"=> Influencer-Code"pub"=> kein Influencer-Codefalse=> kein Code gesetzt
setDiscountCode
Zweck:
Setzen eines Discount-Codes. Z.B. nach Eingabe durch den Benutzer in einem Input-Feld.
Aufrufbeispiel:
await co2.setDiscountCode("aktion");
Parameter:
Discount-Code (string)
Rückgabewert:
true oder false (boolean). Bedeutungen:
true=> Discount-Code gesetztfalse=> Discount-Code unbekannt oder ungültig
removeDiscountCode
Zweck:
Entfernen des aktuell gesetzten Discount-Codes.
Aufrufbeispiel:
await co2.removeDiscountCode();
Parameter:
Keine
Rückgabewert:
true (boolean). Bedeutung: Discount-Code erfolgreich entfernt.
standardDiscountCode
Zweck:
Ermittlung des Rabatt-Codes der Hauptkampagne des aktuellen Marktes.
Aufrufbeispiel:
await co2.standardDiscountCode();
Parameter:
Keine
Rückgabewert:
Discount-Code (string) oder false (boolean). false kommt zurück, falls es aktuell keine Hauptkampagne gibt.
currentCampaignCodes
Zweck:
Ermittlung der Rabatt-Codes der Hauptkampagne des aktuellen Marktes sowie der Info, ob Influencer-Codes zu dieser Kampagne gehören.
Aufrufbeispiel:
await co2.currentCampaignCodes();
Parameter:
Keine
Rückgabewert:
Objekt mit zwei Properties:
infl_codes(boolean): Ob die Hauptkampagne Influencer-Codes umfasstdisc_codes(string[]): Rabatt-Codes der Hauptkampagne
Beispiel:
{
disc_codes: ["aktion", "htfit"],
infl_codes: true
}
isCurrentCampaignCode
Zweck:
Ermittlung, ob der aktuell gesetzte Rabatt-Code zur Hauptkampagne des aktuellen Marktes gehört.
Aufrufbeispiel:
await co2.isCurrentCampaignCode();
Parameter:
Keine
Rückgabewert:
true: Code gehört zur Hauptkampagnefalse: Code gehört nicht zur Hauptkampagneundefined: Es ist aktuell kein Discount-Code gesetzt
getDiscountTokens
Zweck:
Gibt die Discount Tokens als Array zurück, die aktuell im Cart Attribute "disc_tokens" gesetzt sind. Mit einem Discount Token kann auf einfache Art ein Zusatzrabatt freigeschaltet werden, da nur ein Cart Attribute gesetzt werden muss. Der entsprechende Discount muss in der Kampagne angelegt und mit dem Token gekennzeichnet sein. Gedacht sind sie für Anwendungen wie Glücksrad oder Ostereiersuche.
Aufrufbeispiel:
await co2.getDiscountTokens();
Parameter:
Keine.
Rückgabewert:
Array mit den aktuell gesetzten Discount Tokens oder false (falls keine Discount Tokens gesetzt sind). Beispiel:
["wheel"]
setDiscountTokens
Zweck:
Setzen von einem oder mehreren Discount Tokens.
Aufrufbeispiel:
await co2.setDiscountTokens(["wheel"]);
Parameter:
Array aus Strings.
Rückgabewert:
false, falls Input ungültig oder leeres Array. true sonst (Erfolg).
removeDiscountTokens
Zweck:
Entfernen der aktuell gesetzten Discount Tokens.
Aufrufbeispiel:
await co2.removeDiscountTokens();
Parameter:
Keine.
Rückgabewert
true
itemDiscountFull
Zweck:
Berechnung des Rabattes auf eine Produktvariante zur Anzeige des Streichpreises in den Collections und auf der Produktseite. Dabei finden alle Rabattarten Berücksichtigung.
Aufrufbeispiel:
await co2.itemDiscountFull(
123456789,
987654321,
[
"category-a",
"category-b",
"sale",
"featured",
"tag-1",
"tag-2"
],
2999,
1
);
Parameter:
Es werden die Produkteigenschaften übergeben, die zum Berechnen des Discounts erforderlich sind:
product_id(number, erforderlich),variant_id(number, erforderlich),tags(string[], erforderlich),sub_total(number, unrabattierter Preis in Cents, erforderlich),quantity(number, optional, Default: 1),subscription(boolean, Verkauf mit Selling Plan, optional, Default: false)
Rückgabewert:
Objekt mit den Informationen zur Darstellung des Streichpreises. Beispiel:
{
"calc": "perc",
"discPerc": 25,
"discAmt": 0,
"discPrice": 2249,
"condPerc": 30
}
Bedeutung der Properties:
calc: Kann gleich "perc" (prozentualer Rabatt) oder "amt" (Amount-Rabatt) sein.discPerc: Prozentsatz, falls prozentualer Rabatt, 0 sonst,discAmt: Rabatt in Cents, falls Amount-Rabatt, 0 sonst.discPrice: Rabattierter Preis in Cents.condPerc: Maximal möglicher prozentualer Rabatt über conditional Discounts.
itemDiscount
Zweck:
Berechnung des Rabattes auf eine Produktvariante ohne Berücksichtigung von conditional Discounts. D.h.: Die Property discPrice wird nur auf Basis der Standard-Discount-Gruppen berechnet. Zu den conditional Discounts wird aber der maximal mögliche prozentuale Rabatt zurückgegeben.
Aufrufbeispiel:
await co2.itemDiscount(
123456789,
987654321,
[
"category-a",
"category-b",
"sale",
"featured",
"tag-1",
"tag-2"
],
2999,
1
);
Parameter:
Es werden die Produkteigenschaften übergeben, die zum Berechnen des Discounts erforderlich sind:
product_id(number, erforderlich),variant_id(number, erforderlich),tags(string[], erforderlich),sub_total(number, unrabattierter Preis in Cents, erforderlich),quantity(number, optional, Default: 1),subscription(boolean, Verkauf mit Selling Plan, optional, Default: false)
Rückgabewert:
Objekt mit den Informationen zur Darstellung des Streichpreises. Wird kein Rabatt gefunden, dann sind discPerc und discAmt gleich 0, und discPrice entspricht dem Parameter sub_total. Beispiel:
{
"calc": "perc",
"discPerc": 20,
"discAmt": 0,
"discPrice": 2399,
"condPerc": 30
}
Bedeutung der Properties:
calc: Kann gleich "perc" (prozentualer Rabatt) oder "amt" (Amount-Rabatt) sein.discPerc: Prozentsatz, falls prozentualer Rabatt, 0 sonst,discAmt: Rabatt in Cents, falls Amount-Rabatt, 0 sonst.discPrice: Rabattierter Preis in Cents.condPerc: Maximal möglicher prozentualer Rabatt über conditional Discounts.
standardDiscount
Zweck:
Berechnung des Rabattes auf eine Produktvariante mit dem Discount-Code der Hauptkampagne. Dient der Anzeige am Produkt, wenn der Benutzer keinen Discount-Code im Warenkorb hat.
Aufrufbeispiel:
await co2.standardDiscount(
123456789,
987654321,
[
"category-a",
"category-b",
"sale",
"featured",
"tag-1",
"tag-2"
],
2999,
1
);
Parameter:
Es werden die Produkteigenschaften übergeben, die zum Berechnen des Discounts erforderlich sind:
product_id(number, erforderlich),variant_id(number, erforderlich),tags(string[], erforderlich),sub_total(number, unrabattierter Preis in Cents, erforderlich),quantity(number, optional, Default: 1),subscription(boolean, Verkauf mit Selling Plan, optional, Default: false)
Rückgabewert:
Objekt mit den Informationen zum Rabatt auf ein Produkt bei Anwendung des Standard-Discounts. Wird kein Rabatt gefunden, dann sind discPerc und discAmt gleich 0, und discPrice entspricht dem Parameter sub_total. Beispiel:
{
"calc": "perc",
"discPerc": 20,
"discAmt": 0,
"discPrice": 2399
}
Bedeutung der Properties:
calc: Kann gleich "perc" (prozentualer Rabatt) oder "amt" (Amount-Rabatt) sein.discPerc: Prozentsatz, falls prozentualer Rabatt, 0 sonst,discAmt: Rabatt in Cents, falls Amount-Rabatt, 0 sonst.discPrice: Rabattierter Preis in Cents.
conditionalDiscounts
Zweck:
Liefert die conditional Discounts zurück, bei denen sich die Condition Settings oder die Discount Settings (oder beides) auf das Produkt/die Produktvariante beziehen.
Aufrufbeispiel:
await co2.conditionalDiscounts(
123456789,
987654321,
[
"category-a",
"category-b",
"sale",
"featured"
]
);
Parameter:
product_id(number, erforderlich)variant_id(number, erforderlich)tags(string[], erforderlich)
Rückgabewert:
Liefert ein Objekt mit den Properties rule_applies und condition_applies zurück. Werden keine conditional Discounts gefunden, dann sind die beiden Arrays leer. Bedeutung der Arrays:
- Ein Eintrag in
condition_appliesbedeutet, dass die Bedingung auf das Produkt passt. - Ein Eintrag in
rule_appliesbedeutet dagegen, dass der Discount auf das Produkt anwendbar ist.
Im Beispiel ist definiert, dass man einen Rabatt von 50 % auf Produkt A erhält (Produkt-ID 111111111), wenn man Produkt B kauft (Produkt-ID 222222222):
{
"rule_applies": [],
"condition_applies": [
{
"quant": 1,
"count": 0,
"disc_perc": 50,
"base": "prods",
"tags": [],
"ex_tags": [],
"product_items": [
111111111
],
"product_variant_items": [],
"multi_apply": "multiply",
"cond_base": "prods",
"cond_tags": [],
"cond_ex_tags": [],
"cond_product_items": [
222222222
],
"cond_product_variant_items": [],
"cond_minimum": "quant",
"cond_quant": 1,
"cond_threshold": 0,
"cond_count": 1,
"cond_sub_total": 0,
"cond_threshold_used": 0,
"cond_text": ""
}
]
}
Ein Eintrag im Array rule_applies oder condition_applies hat die folgenden Properties. Man beachte dabei, dass alle Felder, die mit "cond_" beginnen, zum Bedingungsteil gehören, während über die anderen Felder der Rabatt definiert wird.
quant: Anzahl Produkte, für die der Rabatt gilt (number). Dieser Wert muss zusammen mit dem des Feldesmulti_applybetrachtet werden. Istmulti_applygleich "once", dann wird der Rabatt nurquantmal angewendet. Im Beispiel würde das bedeuten, dass der Kunde nur einmal 50 % auf Produkt A erhält, egal wie viele Einheiten von Produkt B er kauft. Hier ist die Einstellung dagegen "mulitply". D.h.: Kauft der Kunde n mal Produkt B, dann erhält er auch n mal den Rabatt auf Produkt A. Es gibt noch die Einstellung "unlimited", die z.B. bei Staffelrabatten zur Anwendung kommt, bei denen der Rabatt unbegrenzt oft gilt.count: Anzahl der Produkte im Warenkorb, auf die der Rabatt angewendet worden ist (number).disc_perc: Rabatt in % (number).base: Die zu rabattierenden Produkte können durch Angabe von Produkten ("prods"), Varianten ("vars") oder Tags ("tags") definiert werden (string).tags: Array von Tags, fallsbase == "tags"(string[]).ex_tags: Array von Ausschluss-Tags, fallsbase == "tags"(string[]).kind: Wird bei Conditional Discounts gesetzt, die Staffelrabatte sind. Hat dann den Wert "tiered_pricing". Ansonsten gibt es die Property nicht.product_items: Array von Produkt-IDs, fallsbase == "prods"(number[]).product_variant_items: Array von Varianten-Objekten, fallsbase == "vars". Dabei besitzt jedes Objekt zwei Properties:pid(Produkt-ID) undvids(Varianten-IDs).multi_apply: "once", "multiply" oder "unlimited" (string).cond_base: Bezieht sich auf die Produkte der Bedingung und kann analog zubasegleich "prods", "vars" oder "tags" sein (string).cond_tags: Array von Tags, fallscond_base == "tags"(string[]).cond_ex_tags: Array von Ausschluss-Tags, fallscond_base == "tags"(string[]).cond_product_items: Array von Produkt-IDs, fallscond_base == "prods"(number[]).cond_product_variant_items: Array von Varianten-Objekten, fallscond_base == "vars".cond_minimum: Bringt zum Ausdruck, ob sich die Bedingung auf eine Mindestanzahl ("quant") oder einen Mindestbetrag ("threshold") bezieht (string).cond_quant: Mindestanzahl, fallscond_minimum == "quant"(number). 0 sonst.cond_threshold: Mindestbetrag, fallscond_minimum == "threshold"(number). 0 sonst.cond_count: Anzahl von Produkten im Warenkorb, die die Bedingung erfüllen, fallscond_minimum == "quant"(number). 0 sonst.cond_sub_total: Summe der rabattierten Preise der Produkte, die die Bedingung erfüllen, fallscond_minimum == "threshold"(number). 0 sonst.cond_threshold_used: Fallscond_minimum == "threshold"und die Regel angewendet werden konnte, dann der threshold, der bei Anwendung verwendet wurde (number).cond_text: Info-Text zur Ausgabe am Produkt (string).
freeProductThresholds
Zweck:
Ermittlung der Gratisprodukt-Freigrenzen zur Darstellung im Warenkorb.
Aufrufbeispiel:
await co2.freeProductThresholds();
Parameter:
Keine
Rückgabewert:
Array mit den Gratisprodukt-Freigrenzen in Cents (number[]). Das Array ist leer, falls es keine Gratisprodukte gibt. Beispiel:
[5000, 7500, 10000]
Bedeutung: Freigrenzen in Cents.
thresholdAvailabilities
Zweck:
Ermittlung der Produktverfügbarkeit zu den Gratisprodukt-Freigrenzen. Dient der Darstellung im Warenkorb.
Aufrufbeispiel:
await co2.thresholdAvailabilities();
Parameter:
Keine
Rückgabewert:
Array von Objekten mit Gratisproduktfreigrenze und Produktverfügbarkeit. Beispiel:
[
{
"thresh": 5000,
"available": true
},
{
"thresh": 7500,
"available": true
},
{
"thresh": 10000,
"available": true
}
]
Bedeutung:
thresh: Gratisproduktfreigrenze (number).available: Verfügbare Produkte vorhanden (boolean).
freeProductKeys
Zweck:
Ermittlung der Item-Keys der Gratisprodukte im Warenkorb.
Aufrufbeispiel:
await co2.freeProductKeys();
Parameter:
Keine
Rückgabewert:
Array mit den Item-Keys der Gratisprodukte (string[]). Das Array ist leer, falls es keine Gratisprodukte gibt. Beispiel:
[
"111111111:abc123def456ghi789",
"222222222:jkl012mno345pqr678",
"333333333:stu901vwx234yz567"
]
Bedeutung: Item-Keys, mit denen die Gratisprodukte im Warenkorb identifiziert werden können.
unredeemedFreeProducts
Zweck:
Ermittlung der Gratisprodukte, die dem Kunden zustehen, sich aber noch nicht im Warenkorb befinden. Ausverkaufte Produkte werden nicht zurück geliefert.
Aufrufbeispiel:
await co2.unredeemedFreeProducts();
Parameter:
Keine
Rückgabewert:
Array mit Gratisproduktobjekten. Das Array ist leer, falls es keine Gratisprodukte gibt. Beispiel:
[
{
"threshold": 5000,
"sub_total": 7553,
"unredeemedQty": 1,
"base": "prods",
"productItems": [
"product-a",
"product-b"
],
"productVariantItems": [],
"addAutomatically": false
},
{
"threshold": 5000,
"sub_total": 7553,
"unredeemedQty": 2,
"base": "vars",
"productItems": [],
"productVariantItems": [
{
"handle": "product-c",
"variant_ids": [
111111111
]
},
{
"handle": "product-d",
"variant_ids": [
222222222,
333333333,
444444444
]
}
],
"addAutomatically": false
},
{
"threshold": 7500,
"sub_total": 7553,
"unredeemedQty": 1,
"base": "prods",
"productItems": [
"product-e"
],
"productVariantItems": [],
"addAutomatically": true
}
]
Bedeutung:
Die Objekte haben jeweils die folgenden Properties:
threshold: Freigrenze in Cents (number),sub_total: Aktuelle Warenkorbsumme in Cents (number),unredeemedQty: Menge, die der Kunde erhalten soll (number),base: Kann "prods" (Produkte) oder "vars" (Varianten) sein.- Bei "prods" findet man im Array
productItemsdie Handles der alternativ möglichen Produkte. - Bei "vars" ist das Array
productVariantItemsrelevant. Es enthält dann je alternativ möglichem Produkt ein Objekt mit "handle" (Produkt-Handle) und "variant_ids" (erlaubte Varianten-IDs). addAutomatically: Ob das Produkt automatisch zum Warenkorb hinzugefügt werden soll (boolean).
nextFreeProducts
Zweck:
Ermittlung der Gratisprodukte, die der Kunde bei der nächsten, noch nicht erreichten Freigrenze erhält.
Aufrufbeispiel:
await co2.nextFreeProducts();
Parameter:
Keine
Rückgabewert:
Objekt, mit den Informationen zur nächsten, noch nicht erreichten Freigrenze. Falls es keine Freigrenze (mehr) gibt, dann wird false zurück gegeben. Beispiel:
{
"threshold": 10000,
"sub_total": 7553,
"items": [
{
"threshold": 10000,
"sub_total": 7553,
"unredeemedQty": 1,
"base": "prods",
"productItems": [
"product-f"
],
"productVariantItems": [],
"addAutomatically": true
}
]
}
Bedeutung:
Die Objekt-Properties haben die folgende Bedeutung:
threshold: Nächste Freigrenze in Cents (number),sub_total: Aktuelle Warenkorbsumme in Cents (number),items: Array mit Gratisproduktobjekten. Die Struktur ist identisch zum Array, das vonunredeemedFreeProductszurückgegeben wird.
freeProductData
Zweck:
Ermittlung der Daten aller Produkte, die für die aktuelle Kampagne als Gratisprodukte definiert sind. Dabei werden je Produkt alle verfügbaren Varianten zurück geliefert,
Aufrufbeispiel:
await co2.freeProductData();
Parameter:
Keine
Rückgabewert:
Array mit Gratisprodukten. Das Array ist leer, falls es keine Gratisprodukte gibt. Beispiel (gekürzt):
[
{
"id": 123456789,
"title": "Sample Product",
"handle": "sample-product",
"productType": "Product Type",
"image": "https://cdn.example.com/image.png",
"variants": [
{
"id": 987654321,
"title": "Default Title",
"price": 1990,
"image": "https://cdn.example.com/image.png"
}
]
}
]
Bedeutung:
Die Produkt-Objekte haben jeweils die folgenden Properties:
id: Produkt-ID (number)title: Produkt-Titel (string)handle: Produkt-Handle (string)productType: Produkt-Typ (string)image: Url Featured Image (string)variants: Array mit allen verfügbaren Variantenobjekten. Properties sind jeweils:id: Varianten-ID (number)title: Varianten-Titel (string)price: Variantenpreis in Cents (number)image: Url Variantenbild (string)
shippingData
Zweck:
Ermittlung der Infos zu den Versandkosten, die für die Darstellung im Warenkorb relevant sind.
Aufrufbeispiel:
await co2.shippingData("DE", []);
Parameter:
country(string, erforderlich): Länderkürzel, z.B.: "DE".customerTags(string[], erforderlich): Tags des Kunden, falls eingeloggt, leeres Array sonst.
Rückgabewert:
Objekt mit Infos zu den Versandkosten. Ist Basis für eine grafische Darstellung im Warenkorb. Beispiel:
{
"standardPrice": 490,
"standardThreshold": 5500,
"campaignThreshold": 2500,
"sub_total": 12950,
"freeShipping": true
}
Bedeutung:
standardPrice: Standard-Versandkosten für das übergebene Land (number).standardThreshold: Standard-Freigrenze für das übergebene Land (number).campaignThreshold: Versandkosten-Freigrenze der aktuellen Kampagne, u.a. abhängig von Land und Kunden-Tags (number).sub_total: Zwischensumme im Warenkorb ohne Ausschluss-Produkte (number).freeShipping: Ob der Versand gratis ist (boolean).
bundleDataForCollection
Diese Methode wurde durch bundleDataForCollectionProduct ersetzt.
Zweck:
Ermittlung der Preise mehrerer Bundles, wenn diese in einer Collection dargestellt werden.
Aufrufbeispiel:
await co2.bundleDataForCollection([
123456789,
234567890,
345678901,
456789012,
567890123,
678901234
]);
Parameter:
bundleIds(number[], erforderlich): Array von Bundle-Produkt-IDs.
Rückgabewert:
Zu jedem per ID referenziertem Bundle werden Informationen zu Preis und Verfügbarkeit zurück gegeben. Beispiel:
[
{
"id": 123456789,
"available": true,
"price": 2990,
"bundleDiscPrice": 2990
},
{
"id": 234567890,
"available": true,
"price": 2990,
"bundleDiscPrice": 2990
}
]
Bedeutung:
Zurück kommt ein Array von Bundle-Objekten mit jeweils vier Properties:
id: Produkt-ID des Bundle-Parents (number).available: Ob das Bundle verfügbar ist (boolean). Also: Ob keines der Produkte aus dem Bundle ausverkauft ist.price: Preissumme der im Bundle enthaltenen Produkte (number).bundleDiscPrice: Ist am Bundle ein Preisabschlag definiert, dann ist dies der entsprechend verminderte Preis (number). Zusätzlich kann es auf das Bundle noch einen Aktionsrabatt geben, der hier nicht berücksichtigt ist.
bundleDataForCollectionProduct
Zweck:
Ermittlung der Preise und Availability mehrerer Bundles, wenn diese in einer Collection dargestellt werden. Durch die Komponentenbasierte Struktur werden die Bundle Informationen pro Produkt angefragt, intern lädt die Storefront Library beim ersten Aufruf alle potenziellen Bundles einmalig und liefert dann die entsprechenden Daten zurück.
Aufrufbeispiel:
await co2.bundleDataForCollectionProduct(123456789);
Parameter:
bundleId(number, erforderlich): Bundle-Produkt-ID.
Rückgabewert:
Zu jedem per ID referenziertem Bundle werden Informationen zu Preis und Verfügbarkeit zurück gegeben. Zusätzlich werden Informationen über die Art des bundle discounts zurückgeliefert, die für die Darstellung der entsprechenden Badge benötigt werden. Beispiel:
{
"id": 123456789,
"available": true,
"calc": "perc",
"discountAmount": 0,
"discountPercent": 10,
"price": 2990,
"bundleDiscPrice": 2990
}
Bedeutung:
Zurück kommt ein Bundle-Objekt mit den folgenden Properties:
id: Produkt-ID des Bundle-Parents (number).available: Ob das Bundle verfügbar ist (boolean). Also: Ob keines der Produkte aus dem Bundle ausverkauft ist.calc: Ist der Rabatt absolut oder prozentual ("perc" oder "amt").discountAmount: Betrag des absoluten Discounts, wird von der Storefront library schon in der aktuell gesetzten Shop-Währung ausgeliefert (number).discountPercent: Betrag des prozentualen Discounts (number).price: Preissumme der im Bundle enthaltenen Produkte (number).bundleDiscPrice: Ist am Bundle ein Preisabschlag definiert, dann ist dies der entsprechend verminderte Preis (number). Zusätzlich kann es auf das Bundle noch einen Aktionsrabatt geben, der hier nicht berücksichtigt ist.