1. Start
  2. Warenkorb Workflows für J...
  3. Beispiele
  4. Garantieerweiterungen im Warenkorb anbieten

Garantieerweiterungen im Warenkorb anbieten

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

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 = 763 und kArtikel = 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

WorkflowNameAufgabe
Workflow 1Garantieerweiterungen darstellenZeigt im Warenkorb eine Auswahlbox für die Garantielaufzeit an.
Workflow 2Ausgewählte Garantieerweiterung in den Warenkorb legenLiest 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.

JSON
{
    "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.

MARKUP
<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 = 1
  • kArtikel = 763 oder kArtikel = 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.

JSON
{
    "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

JSON
{
    "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

DatenquelleNameBedeutung
POSTguarantee_checkedSignalisiert, dass der Kunde gerade das Garantieformular abgeschickt hat.
POSTkArtikelDie vom Kunden gewählte Garantie-Artikel-ID.
Sessionguarantee_kArtikelDie zuletzt gewählte Garantie-Artikel-ID, die über Seitenaufrufe hinweg erhalten bleibt.
Internwf_vars.guarantee_kArtikelWird innerhalb eines Workflow-Durchlaufs von einer Aktion zur nächsten weitergegeben.

Schritt-für-Schritt-Anleitung

  1. Garantieartikel anlegen
  • Lege zwei Artikel an (z. B. „1 Jahr Garantieerweiterung“ und „3 Jahre Garantieerweiterung“).
  • Notiere dir deren kArtikel-IDs.
  1. Kategorie notieren
  • Notiere die kKategorie-ID der Produkte, für die die Garantie angeboten werden soll (z. B. Smartphones).
  1. Workflow 1 anlegen: „Garantieerweiterungen darstellen“
  • Bedingung: Produkteigenschaften → kKategorie ist in [Kategorie-ID]
  • Aktion: phpquery_html
  • Selektor: form#cart-form
  • Methode: after
  • HTML: siehe Vorlage oben
  • Speichern.
  1. Workflow 2 anlegen: „Ausgewählte Garantieerweiterung in den Warenkorb legen“
  • Bedingung:
  • Verknüpfung: beliebige Bedingung wahr
  • Bedingung 1: Requests → POST guarantee_checked gleich 1
  • Bedingung 2: Gruppe
  • Requests → SESSION guarantee_kArtikel beliebig
  • Warenkorb-Workflows → Anzeige-Workflow ist wahr
  • Aktionen (in dieser Reihenfolge):
  1. Variables → Typ Interne Variable, Name guarantee_kArtikel, Wert {if isset($smarty.post.kArtikel)}{$smarty.post.kArtikel}{else}{$smarty.session.guarantee_kArtikel}{/if}
  2. Warenkorb Artikel → Artikelquelle Variable, kArtikel-Variable {$wf_vars.guarantee_kArtikel}, Menge 1, deletable Ja
  3. Variables → Typ Session, Name guarantee_kArtikel, Wert {$wf_vars.guarantee_kArtikel}, Löschen bei Nichterfüllung aktiv
  • Speichern.
  1. 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:

IDBedeutungEigener Wert
55Kategorie-ID der Produkte, für die die Garantie angeboten wird__KATEGORIE_ID__
7631-Jahres-Garantieartikel__GARANTIE_1Y_ID__
7643-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.

Wie können wir helfen?