Voraussetzungen:
Dieses Beispiel zeigt, wie man mit dem Plugin eine optionale Garantieerweiterung direkt im Warenkorb anbieten kann. Der Kunde wählt eine Garantielaufzeit aus, und das passende Garantie-Artikel wird automatisch in den Warenkorb gelegt.
Inhalt
- Anwendungsfall
- Voraussetzungen
- Überblick der beiden Workflows
- Workflow 1: Garantieerweiterungen darstellen
- Workflow 2: Garantieartikel in den Warenkorb legen
- Datenaustausch zwischen den Workflows
- Schritt-für-Schritt-Anleitung
- Anpassung der IDs
- Tipps & Hinweise
Anwendungsfall
Im Shop werden Smartphones der Kategorie Smartphones verkauft. Zu diesen Produkten soll im Warenkorb eine optionale Garantieverlängerung angeboten werden:
- 1 Jahr Garantieerweiterung
- 3 Jahre Garantieerweiterung
Wählt der Kunde eine Option aus, wird der entsprechende Garantie-Artikel automatisch dem Warenkorb hinzugefügt. Die Auswahl wird in der Session gespeichert, damit sie auch bei späteren Warenkorb-Aktualisierungen erhalten bleibt.
Voraussetzungen
- Plugin xvbasketworkflows in Version 5.3.0 oder höher
Folgende Erweiterungen des Plugins müssen installiert sein:
product_properties(Bedingung)requests(Bedingung)basket_workflows(Bedingung)phpquery_html(Aktion)variables(Aktion)product(Aktion)
Zusätzlich benötigt man:
- Eine Warenkorbkategorie/-seite mit dem Formular-Selektor
form#cart-form. - Zwei Garantie-Artikel im JTL-Shop (z. B.
kArtikel = 763undkArtikel = 764). - Eine Kategorie, für die die Garantie angeboten werden soll (z. B.
kKategorie = 55).
Hinweis: Die IDs in diesem Beispiel stammen aus einer konkreten Installation. Sie müssen an den eigenen Shop angepasst werden.
Überblick der beiden Workflows
| Workflow | Name | Aufgabe |
|---|---|---|
| Workflow 1 | Garantieerweiterungen darstellen | Zeigt im Warenkorb eine Auswahlbox für die Garantielaufzeit an. |
| Workflow 2 | Ausgewählte Garantieerweiterung in den Warenkorb legen | Liest die Auswahl aus und legt den passenden Garantieartikel in den Warenkorb. |
Workflow 1: Garantieerweiterungen darstellen
Bedingung
Die Bedingung prüft, ob sich im Warenkorb ein Artikel aus der Kategorie Smartphones befindet.
{
"disabled": "",
"set": "all",
"set_value": "1",
"conditions": {
"1": {
"disabled": "0",
"condition": "Plugin\\xv_basket_workflows\\extensions\\conditions\\product_properties\\product_properties",
"properties": {
"kKategorie989": {
"operator": "in",
"property": "kKategorie",
"value": [
"55"
]
}
}
}
}
}Aktion
Die Aktion phpquery_html fügt hinter dem Warenkorbformular (form#cart-form) einen HTML-Block ein.
<div class="card guarantee-extension mb-3">
<div class="card-body">
<h5 class="card-title">Garantieerweiterung</h5>
<p class="card-text text-muted">
Schützen Sie Ihren Einkauf mit einer optionalen Garantieverlängerung.
</p>
<form method="post" action="" class="guarantee-form">
<input type="hidden" name="guarantee_checked" value="1">
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="kArtikel" id="guarantee-1y" value="763" required {if $smarty.session.guarantee_kArtikel == '763'}checked{/if}>
<label class="form-check-label" for="guarantee-1y">
<strong>1 Jahr Garantieerweiterung</strong>
</label>
</div>
<div class="form-check mb-3">
<input class="form-check-input" type="radio" name="kArtikel" id="guarantee-3y" value="764" required {if $smarty.session.guarantee_kArtikel == '764'}checked{/if}>
<label class="form-check-label" for="guarantee-3y">
<strong>3 Jahre Garantieerweiterung</strong>
</label>
</div>
<button type="submit" class="btn btn-outline-primary btn-sm">
Garantie auswählen
</button>
</form>
</div>
</div>Was passiert hier?
- Sobald ein Smartphone im Warenkorb liegt, wird die Garantiebox eingeblendet.
- Der Kunde wählt eine Laufzeit und klickt auf Garantie auswählen.
- Beim Absenden werden zwei Werte per
POSTübergeben: guarantee_checked = 1kArtikel = 763oderkArtikel = 764- Über
{$smarty.session.guarantee_kArtikel}wird eine bereits getroffene Auswahl wieder vorausgewählt.
Workflow 2: Garantieartikel in den Warenkorb legen
Bedingung
Der Workflow soll auslösen, wenn entweder gerade eine Garantie ausgewählt wurde oder bereits eine Garantie in der Session gespeichert ist und der Anzeige-Workflow weiterhin aktiv ist.
{
"disabled": "",
"set": "any",
"set_value": "1",
"conditions": [
{
"disabled": "0",
"condition": "Plugin\\xv_basket_workflows\\extensions\\conditions\\requests\\requests",
"properties": {
"post538": {
"operator": "eq",
"property": "post",
"key": "guarantee_checked",
"value": "1"
}
}
},
{
"disabled": "",
"set": "all",
"set_value": "1",
"conditions": [
{
"disabled": "0",
"condition": "Plugin\\xv_basket_workflows\\extensions\\conditions\\requests\\requests",
"properties": {
"session21": {
"operator": "any",
"property": "session",
"key": "guarantee_kArtikel",
"value": ""
}
}
},
{
"disabled": "0",
"operator": "eq",
"condition": "Plugin\\xv_basket_workflows\\extensions\\conditions\\basket_workflows\\basket_workflows",
"value": [
"__WORKFLOW_1_ID__"
]
}
]
}
]
}Aktionen
{
"3": {
"disabled": "0",
"action": "Plugin\\xv_basket_workflows\\extensions\\actions\\variables\\variables",
"value": {
"type": "internal",
"value": "{if isset($smarty.post.kArtikel)}{$smarty.post.kArtikel}{else}{$smarty.session.guarantee_kArtikel}{/if}"
},
"name": "guarantee_kArtikel"
},
"1": {
"disabled": "0",
"action": "Plugin\\xv_basket_workflows\\extensions\\actions\\product\\product",
"value": {
"kArtikel_select": "variable",
"quantity_select": "fixedValue",
"quantity": "1"
},
"kArtikel": "{$wf_vars.guarantee_kArtikel};",
"deletable": "Y"
},
"2": {
"disabled": "0",
"action": "Plugin\\xv_basket_workflows\\extensions\\actions\\variables\\variables",
"value": {
"type": "session",
"value": "{$wf_vars.guarantee_kArtikel}",
"clearOnFailure": "Y"
},
"name": "guarantee_kArtikel"
}
}Aktion 1: Variable aus POST oder Session auflösen
- Typ:
Interne Variable - Name:
guarantee_kArtikel - Wert:
{if isset($smarty.post.kArtikel)}{$smarty.post.kArtikel}{else}{$smarty.session.guarantee_kArtikel}{/if}
Diese Aktion liest die gewählte kArtikel-ID aus dem soeben abgesendeten Formular. Falls gerade nichts abgesendet wurde, greift sie auf die Session zurück.
Aktion 2: Garantieartikel in den Warenkorb legen
- Aktion:
Warenkorb Artikel - Artikelquelle:
Variable - kArtikel-Variable:
{$wf_vars.guarantee_kArtikel} - Menge:
1 - Darf gelöscht werden:
Ja
Der Artikel wird dynamisch anhand der internen Variable in den Warenkorb gelegt.
Aktion 3: Auswahl in Session speichern
- Typ:
Session - Name:
guarantee_kArtikel - Wert:
{$wf_vars.guarantee_kArtikel} - Löschen bei Nichterfüllung:
aktiv
Damit bleibt die Auswahl auch nach einem Seitenreload oder einer Mengenänderung im Warenkorb erhalten. Wenn der Workflow später nicht mehr auslöst (z. B. weil das Smartphone entfernt wurde), wird die Session-Variable automatisch gelöscht.
Datenaustausch zwischen den Workflows
| Datenquelle | Name | Bedeutung |
|---|---|---|
POST | guarantee_checked | Signalisiert, dass der Kunde gerade das Garantieformular abgeschickt hat. |
POST | kArtikel | Die vom Kunden gewählte Garantie-Artikel-ID. |
Session | guarantee_kArtikel | Die zuletzt gewählte Garantie-Artikel-ID, die über Seitenaufrufe hinweg erhalten bleibt. |
| Intern | wf_vars.guarantee_kArtikel | Wird innerhalb eines Workflow-Durchlaufs von einer Aktion zur nächsten weitergegeben. |
Schritt-für-Schritt-Anleitung
- Garantieartikel anlegen
- Lege zwei Artikel an (z. B. „1 Jahr Garantieerweiterung“ und „3 Jahre Garantieerweiterung“).
- Notiere dir deren
kArtikel-IDs.
- Kategorie notieren
- Notiere die
kKategorie-ID der Produkte, für die die Garantie angeboten werden soll (z. B. Smartphones).
- Workflow 1 anlegen: „Garantieerweiterungen darstellen“
- Bedingung:
Produkteigenschaften→kKategorieist in[Kategorie-ID] - Aktion:
phpquery_html - Selektor:
form#cart-form - Methode:
after - HTML: siehe Vorlage oben
- Speichern.
- Workflow 2 anlegen: „Ausgewählte Garantieerweiterung in den Warenkorb legen“
- Bedingung:
- Verknüpfung:
beliebigeBedingung wahr - Bedingung 1:
Requests→ POSTguarantee_checkedgleich1 - Bedingung 2: Gruppe
Requests→ SESSIONguarantee_kArtikelbeliebigWarenkorb-Workflows→ Anzeige-Workflow ist wahr- Aktionen (in dieser Reihenfolge):
Variables→ TypInterne Variable, Nameguarantee_kArtikel, Wert{if isset($smarty.post.kArtikel)}{$smarty.post.kArtikel}{else}{$smarty.session.guarantee_kArtikel}{/if}Warenkorb Artikel→ ArtikelquelleVariable, kArtikel-Variable{$wf_vars.guarantee_kArtikel}, Menge1, deletableJaVariables→ TypSession, Nameguarantee_kArtikel, Wert{$wf_vars.guarantee_kArtikel}, Löschen bei Nichterfüllung aktiv
- Speichern.
- Testen
- Lege ein Smartphone in den Warenkorb.
- Die Garantiebox sollte erscheinen.
- Wähle eine Garantie und klicke auf Garantie auswählen.
- Der gewählte Garantieartikel sollte im Warenkorb erscheinen.
- Entferne das Smartphone aus dem Warenkorb: Die Garantie sollte automatisch wieder verschwinden.
Anpassung der IDs
In den Beispielen werden folgende IDs verwendet:
| ID | Bedeutung | Eigener Wert |
|---|---|---|
55 | Kategorie-ID der Produkte, für die die Garantie angeboten wird | __KATEGORIE_ID__ |
763 | 1-Jahres-Garantieartikel | __GARANTIE_1Y_ID__ |
764 | 3-Jahres-Garantieartikel | __GARANTIE_3Y_ID__ |
__WORKFLOW_1_ID__ | ID des Anzeige-Workflows | __WORKFLOW_1_ID__ |
Ersetze diese Werte in Bedingungen, HTML und Aktionen durch die IDs deines Shops.
Tipps & Hinweise
- Reihenfolge der Aktionen in Workflow 2 ist wichtig: Zuerst die interne Variable setzen, dann den Artikel hinzufügen, anschließend die Session aktualisieren.
- Deletable aktivieren: Der Garantieartikel sollte vom Kunden löschbar sein. Wenn nicht, bleibt er hartnäckig im Warenkorb hängen.
- Session aufräumen: Die Option Löschen bei Nichterfüllung in der Session-Variable stellt sicher, dass die Garantieauswahl nicht ewig in der Session verbleibt, wenn der zugehörige Hauptartikel entfernt wird.
- Smarty-Vorauswahl: Über
{$smarty.session.guarantee_kArtikel}im HTML-Block wird die bereits gewählte Option beim Neuladen der Seite wieder angehakt.