Zum Hauptinhalt springen

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-Code
  • false => 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 gesetzt
  • false => 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 umfasst
  • disc_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 Hauptkampagne
  • false: Code gehört nicht zur Hauptkampagne
  • undefined: 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_applies bedeutet, dass die Bedingung auf das Produkt passt.
  • Ein Eintrag in rule_applies bedeutet 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 Feldes multi_apply betrachtet werden. Ist multi_apply gleich "once", dann wird der Rabatt nur quant mal 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, falls base == "tags" (string[]).
  • ex_tags: Array von Ausschluss-Tags, falls base == "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, falls base == "prods" (number[]).
  • product_variant_items: Array von Varianten-Objekten, falls base == "vars". Dabei besitzt jedes Objekt zwei Properties: pid (Produkt-ID) und vids (Varianten-IDs).
  • multi_apply: "once", "multiply" oder "unlimited" (string).
  • cond_base: Bezieht sich auf die Produkte der Bedingung und kann analog zu base gleich "prods", "vars" oder "tags" sein (string).
  • cond_tags: Array von Tags, falls cond_base == "tags" (string[]).
  • cond_ex_tags: Array von Ausschluss-Tags, falls cond_base == "tags" (string[]).
  • cond_product_items: Array von Produkt-IDs, falls cond_base == "prods" (number[]).
  • cond_product_variant_items: Array von Varianten-Objekten, falls cond_base == "vars".
  • cond_minimum: Bringt zum Ausdruck, ob sich die Bedingung auf eine Mindestanzahl ("quant") oder einen Mindestbetrag ("threshold") bezieht (string).
  • cond_quant: Mindestanzahl, falls cond_minimum == "quant" (number). 0 sonst.
  • cond_threshold: Mindestbetrag, falls cond_minimum == "threshold" (number). 0 sonst.
  • cond_count: Anzahl von Produkten im Warenkorb, die die Bedingung erfüllen, falls cond_minimum == "quant" (number). 0 sonst.
  • cond_sub_total: Summe der rabattierten Preise der Produkte, die die Bedingung erfüllen, falls cond_minimum == "threshold" (number). 0 sonst.
  • cond_threshold_used: Falls cond_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 productItems die Handles der alternativ möglichen Produkte.
  • Bei "vars" ist das Array productVariantItems relevant. 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 von unredeemedFreeProducts zurü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

Deprecated

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.