Gutscheincode für Neukunden

Hallo

mehrere Gutscheine mit dem gleichen Gutscheincode habe ich drucken lassen. Der Gutschein(code) soll nur für Neukunden gültig sein, deshalb habe ich die Gutscheinserie der Benutzergruppe “Noch nicht gekauft” zugeordnet.

Wenn jetzt ein oder mehrere Artikel in den Warenkorb gelegt werden, ein Benutzer nicht angemeldet ist und im Warenkorb den Gutscheincode eingibt, wird folgende Meldung angezeigt: “…Ihre Benutzergruppe erlaubt diesen Gutschein nicht!”. Dies ist für die Benutzer natürlich nicht verständlich und müsste von der Logik etwas anders aussehen.

Folgendes möchte ich gerne erreichen:

1.) Die Kunden sollen nach Eingabe vom Gutscheincode automatisch vom Warenkorb zur Registrierung weitergeleitet werden
2.) Nach erfolgreicher Registrierung sollen die Kunden wieder automatisch zurück zum Warenkorb geleitet werden. Der Gutscheinwert soll dabei abgezogen und den Kunden entsprechend im Warenkorb angezeigt werden.
2.) Sind Kunden bereits Registriert und angemeldet, soll eine entsprechende Meldung angezeigt werden, wenn sie den Gutscheincode für Neukunden eingeben.

Dazu gibt es folgende Fragen:

1.) In welcher Datei und wie kann die Prüfung für die Weiterleitung zur Registrierung erfolgen?
2.) Wie können die Benutzer nach der Registrierung wieder zum Warenkorb geleitet werden?
3.) Wie kann der Warenkorb dann automatisch aktualisiert werden?

Für jeden Hinweis und Tipp bin ich dankbar!

Die folgenden Artikel habe ich bereits gelesen, wo es aber keine Lösungsvorschläge zu meinen Fragen gibt:
Neukunden Gutschein
Neukundenrabatt Benutzergruppe “noch nicht bestellt” wird bei Gastkonto immer zuerst gesetzt

P S
Auf den Gutscheinen gibt es einen entsprechenden Hinweis, dass diese nur für Neukunden und in Verbindung mit der Registrierung gültig sind.

Hallo,

der Punkt 1 wie Neukunden zur Registrierung weitergeleitet werden, ist fast gelöst und funktioniert so:

[{if !$oxcmp_user}]
    <script window.location="[{ oxgetseourl ident=$oViewConf->getSslSelfLink()|cat:"cl=register" }]"; </script 
[{/if}]

Den Code habe ich zum Testen in der Datei \application\views\azure\tpl\page\checkout\basket.tpl ab Zeile 53 eingefügt, wo das Formular zur Eingabe vom Gutschein-Code zu finden ist.

Hat jemand eine Idee, wie ich jetzt den Gutschein-Code noch prüfen kann?

Die Weiterleitung soll ja nur mit entsprechendem Gutschein-Code erfolgen!

Schon mal vielen Dank fürs lesen!

Die Weiterleitung erscheint mir in der Form sinnlos, weil sie vor der möglichen Eingabe der Gutscheinnummer erfolgt. Wenn es mit Weiterleitung sein soll, dann lass die Gutscheinnummer eingeben und regle den Login über das Absenden des Gutscheinbuttons.

Nachtrag: Man sollte Texte richtig lesen :blush: das hast ja bereits gemacht. Ich würde es aber nicht über Javascript machen.

Hallo foxido,

vielen dank für den Hinweis!

Das mit der Weiterleitung bekomme ich sicher hin. Wie kann die aber in der basket.tpl den aktuell gesendeten Gutschein-Code auslesen?

Du meinst das sicher so wie hier, oder?: http://4106.foxido.de/ Einfach mal einen Artikel in den Warenkorb legen und im WK irgendeine Gutscheinnummer eingeben.

Dazu musst den Wert entweder in der Session speichern oder jeweils über POST weiterleten.

Hallo Foxido,

vielen Dank für die Rückmeldung und den Denkanstoß!

Ja, so wie in dem von Dir gezeigten Beispiel funktioniert es mit meinem Code aktuell auch. Die prüfung der Gutscheinnummer zur Weiterleitung habe ich wie folgt eingebaut:

[{if !$oxcmp_user and $smarty.post.voucherNr=="neukunde" }]
    <script window.location="[{ oxgetseourl ident=$oViewConf->getSslSelfLink()|cat:"cl=register" }]";</script
[{/if}]

Jetzt bleibt nur noch die Frage wie kommen die Benutzer nach der Registrierung zurück zum Warenkorb?

Ich habe folgendes in einem ähnliche Beitrag gesehen:

$sUrl = $_SERVER['HTTP_REFERER'];
oxRegistry::getUtils()->redirect($sUrl, false);

Wie kann ich das aber in die register.tpl unter \application\views\azure\tpl\form einbauen?

In der Form kannst das nicht bewerkstelligen, weil der Kunde sich ja einloggen soll und dann erst umgeleitet wird. Erweitere oxuser->login(…). Und setze etwas in der Art ein:

$oConfig = $this->getConfig();
oxRegistry::getUtils()->redirect($oConfig->getShopHomeURL() . ‘cl=basket’, false);

Hallo Foxido,

vielen Dank für den Tipp!

Sorry, im letzten Beitrag meinte ich eigentlich die “user_billing.tpl” unter \application\views\azure\tpl\form\fieldset. Sobald ein Kunde die entsprechende Gutscheinnummer eingetragen hat wird er zur Registrierung geleitet. Sind dort alle Eingaben korrekt, erfolgt anscheinend nach dem Speichern in der “user_billing.tpl” die Weiterleitung auf die Bestätigungsseite. Somit ist der Kunde erfolgreich registriert und sollte einen Hinweis erhalten und wieder zum Warenkorb gelangen.

1.) Wie kommt der Kunde jetzt wieder sinnvoll zurück in den Warenkorb?
2.) Wie kann dann die Gutscheinnummer an den Warenkorb weitergegeben werden?

Sollte die Gutscheinnummer dazu evtl. in [{$smarty.session.???}] gespeichert werden oder ist tatsächlich das Erweitern von oxuser->login(…) die Lösung?

Vielen Dank und allen schon mal ein schönes Wochenende!

Steht in #7, musst Dich halt bei der Lösung mit Modulen beschäftigen. Es geht aber sicher auch wieder mit JS & “window.location” => basket.

Per POST geht die Gutscheinnummer an basket->addVoucher(); Hier schreibst den Wert in eine Session-Variable und rufst diesen im Basket wieder ab. Bei Erfolg der Gutscheinnummer wird der Wert in der Session wieder gelöscht. Mehr macht es in der Demo auch nicht.

Ebenfalls ein schönes WE.

Hallo Foxido,

vielen Dank für die Rückmeldung!

Ich habe es jetzt wie folgt gelöst. Gibt der User den Gutschein-Code ein und ist nicht angemeldet, dann erhält er einen Hinweis und kann weiter zur Anmeldung oder Registrierung.

[{foreach from=$Errors.basket item=oEr key=key}]
    [{if $oEr->getErrorClassType() == 'oxVoucherException'}]
        <div class="alert alert-danger inlineError">
            [{ oxmultilang ident="COUPON_NOT_ACCEPTED" args=$oEr->getValue('voucherNr') }]
            [{if !$oxcmp_user && $smarty.post.voucherNr|upper=="NK-15" }]
                <br /><strong>[{ oxmultilang ident="REASON" suffix="COLON" }]</strong>
                Die Anmeldung mit einem Benutzerkonto ist erforderlich. Sie k&ouml;nnen ein neues <a id="registerLink" href="[{ oxgetseourl ident=$oViewConf->getSslSelfLink()|cat:"cl=register" }]" title="[{oxmultilang ident="OPEN_ACCOUNT"}]">[{oxmultilang ident="OPEN_ACCOUNT"}]</a> oder sich mit einem bestehenden <a id="loginLink" href="[{ oxgetseourl ident=$oViewConf->getSslSelfLink()|cat:"cl=user" }]" title="[{oxmultilang ident="LOGIN"}]">[{oxmultilang ident="LOGIN"}]</a>.
            [{else}]
                <strong>[{ oxmultilang ident="REASON" suffix="COLON" }]</strong>
                [{ $oEr->getOxMessage() }]
            [{/if}]
        </div>
    [{/if}]
[{/foreach}]

Auf der Bestätigungsseite hat er dann wieder die Möglichkeit zurück zum Warenkorb zu kommen. So ist dem User hoffentlich auch klar was passiert und er wird nicht einfach irgendwo hin geleitet.

Ein Problem habe ich jetzt aber noch der Text ist direkt in das Template geschrieben. Ich hätte ihn aber gerne in der cust_lang.php

'NEW_CUSTOMER_VOUCHER'  => 'Die Anmeldung mit einem Benutzerkonto ist erforderlich. Sie können ein neues %s oder mit einem bestehenden %s.',

Wie kann ich dann aber im Template die Links an den Text übergeben?

Viele Grüße an alle und ein schönes Wochenende!

Warum einfach, wenn es auch kompliziert geht? :grinning:

Trenne die Texte und mach 2 Übersetzungen draus:

'NEW_CUSTOMER_VOUCHER1'                                        => 'Die Anmeldung mit einem Benutzerkonto ist erforderlich. Sie können ein neues ',

'NEW_CUSTOMER_VOUCHER2'                                        => 'oder mit einem bestehenden.'

Hallo Rubbercut,

danke für den Tipp. Natürlich könnte ich es so machen, wie von Dir vorgeschlagen oder auch alles direkt in das Template schreiben. Das ist aber nicht das übliche Vorgehen. In der Original lang.php hat Oxid ja auch Argumente in den Strings definiert, die wie in meinem Beispiel verwendet werden:

'COUPON_NOT_ACCEPTED'  => 'Der Gutschein "%s" kann nicht akzeptiert werden.',

[{ oxmultilang ident="COUPON_NOT_ACCEPTED" args=$oEr-&gt;getValue('voucherNr') }]

Bei mir gibt es anscheinend nur Probleme mit der Syntax (Argumente), wenn ich folgendes versuche:

[{ oxmultilang ident="NEW_CUSTOMER_VOUCHER" args='<a id="registerLink" href="[{ oxgetseourl ident=$oViewConf->getSslSelfLink()|cat:"cl=register" }]" title="[{oxmultilang ident="OPEN_ACCOUNT"}]">[{oxmultilang ident="OPEN_ACCOUNT"}]</a>' }]

Ist das was ich versuche korrekt? Falls ja, wie kann ich eins bzw. zwei Argumente dieser Art auf einmal richtig übergeben?

Du machst das aber echt kompliziert. Muss der Kunde wenigstens die Gutscheinnummer nicht doppelt eingeben, sprich wird zwischengespeichert?

[{assign_adv var="deine_infos" value="array
    (
     '0' => '$info1',
     '1' => '$info2'
    )"}]
[{oxmultilang ident="COUPON_NOT_ACCEPTED" args=$deine_infos}]

Hallo Foxido,

vielen Dank für die hilfreiche Antwort, das mit dem array funktioniert!

Traue es mich gar nicht zusagen aber ich habe es nach vielen vielen Stunden immer noch nicht gut hin bekommen :frowning:

Doch der bzw die Kunden müssen dann leider die Gutscheinnummer doppelt eingeben :frowning: Die Gutscheine werden schon am Samstag verteilt und dann funktioniert es zumindest halbwegs Verständlich…

Ist es möglich, dass ich erfahre, welchen Dateien wie in der Demo geändert wurden?

In der basket.tpl habe ich versucht die Gutscheinnummer in der session zu speichern

[{ if isset($smarty.post.voucherNr) }]
    [{$smarty.session.voucherNr = $smarty.post.voucherNr}]
[{/if}]

In der register_success.tpl wollte ich dann die Gutscheinnummer auslesen, was aber leider nicht funktioniert hat:

[{ if isset($smarty.session.voucherNr) }]
     Alles OK???
[{/if}]

Kannst Du mir noch ein paar Tipps geben, wie das Problem gelöst werden kann?

Wünsche allen noch einen schönen Abend!

Es muss nicht alles im Template geschehen. Die Methoden, die ich genannt habe, werden einfach erweitert. Wie das funktioniert, steht hier wirklich einige Dutzend mal drin.
Schreib mich morgen mal an.

Hallo zusammen,

nochmals vielen Dank an alle für die tolle Hilfe. Abschließend konnte ich das Problem mit etwas persönlicher Nachhilfe von Foxido und dem folgenden Beispiel lösen FOXIDO FRONTEND EXT CLASS DEMO

Ich hoffe das Beispiel hilft weiteren interessierten mit diesem Problem und der Modulerstellung!

Wünsche allen ein schönes Wochenende!