Checkout - Erweiterung um Inputfeld - Versand per E-Mail

Hallo zusammen,

gerade in den ersten Schritten der Plugin-Entwicklung. Unser Plugin soll den Checkout/Confirm um ein weiteres Feld erweitern und hängt sich auch schon wunderbar in den View so ein, wie wir uns das wünschen. Beim Versenden der Bestellung soll nun noch der Inhalt des neuen Feldes in der sORDER-Mail verschickt werden.

Folgendes Snippet von @codiverse‍ hat uns bereits gut weitergeholfen.
https://forum.shopware.com/discussion/18916/sorder-erweitern-um-variablen

Wie bekommen wir den Inhalt des Feldes? Ein kleines Codesnippet wäre Ideal. :slight_smile:

public function meineFunktion(Enlight_Hook_HookArgs $args) {
		$variables = $args->getReturn();
		
		$variables["sOrderDetails"]['meineVariable'] = 'passender Wert des Inputfeldes?!';
		
		return $variables;
}

 

@eldan schrieb:

Hallo zusammen,

gerade in den ersten Schritten der Plugin-Entwicklung. Unser Plugin soll den Checkout/Confirm um ein weiteres Feld erweitern und hängt sich auch schon wunderbar in den View so ein, wie wir uns das wünschen. Beim Versenden der Bestellung soll nun noch der Inhalt des neuen Feldes in der sORDER-Mail verschickt werden.

Folgendes Snippet von @codiverse‍ hat uns bereits gut weitergeholfen.
https://forum.shopware.com/discussion/18916/sorder-erweitern-um-variablen

Wie bekommen wir den Inhalt des Feldes? Ein kleines Codesnippet wäre Ideal. :)

public function meineFunktion(Enlight_Hook_HookArgs $args) {
$variables = $args->getReturn();

$variables[„sOrderDetails“][‚meineVariable‘] = ‚passender Wert des Inputfeldes?!‘;

return $variables;
}

 

Hallo,

und warum wollt ihr die Welt neu erfinden: Bis zu 4 zusätzliche Felder für die Bestellabschluss-Seite | Shopware Store ? Das Plugin bietet doch ansich schon alles, was der Kunde brauchen könnte.

Zum Thema: einfach den Wert in einer Shopware Session speichern und dann später wieder an der entsprechenden Stelle auslesen.

Beste Grüße

Sebastian

Hallo Sebastian,

gerne würden wir auf euer Plugin zurückgreifen. Hatten wir auch bereits auf dem Testserver im Einsatz.
Bisher bekommen wir es mittels JavaScript aber nicht hin in eines der ersten Felder zu schreiben.
Das erstellte JavaScript liest unser Cookie bereits aus und schreibt die Partner-ID in ein „Test-Input“, aber leider nicht in das erste Input eures Plugins.

Gibt es da irgendeine Möglichkeit das umzusetzen?

VG
 

@eldan schrieb:

Hallo Sebastian,

gerne würden wir auf euer Plugin zurückgreifen. Hatten wir auch bereits auf dem Testserver im Einsatz.
Bisher bekommen wir es mittels JavaScript aber nicht hin in eines der ersten Felder zu schreiben.
Das erstellte JavaScript liest unser Cookie bereits aus und schreibt die Partner-ID in ein „Test-Input“, aber leider nicht in das erste Input eures Plugins.

Gibt es da irgendeine Möglichkeit das umzusetzen?

VG
 

Hallo,

wie wäre es mit:

    window.addEventListener("load", myOnloadEvent, false);

    function myOnloadEvent(){
         document.getElementById("attribute_orderfield1_value").value = meinCookieWert;
    }

oder:

    $( document ).ready(function() {
         $("#attribute_orderfield1_value").val(meinCookieWert);
    });

Beides sollte natürlich auch nach dem Shopware Block frontend_checkout_confirm_agb hinzugefügt werden (damit das Skript nicht vor den anderen ausgeführt wird). Ebenso sollte man auch vorher prüfen, ob das Feld bereits vorhanden ist.

Beste Grüße

Sebastian

Danke dafür. :slight_smile:
So was in der Art hatten wir auch vor. In unserem Theme unter “themes/Frontend/UNSERTHEME/frontend/custom/confirm.tpl” nimmt er die Änderung aber leider nicht an. Müssen wir es an eine andere Stelle packen?

VG und Danke im Voraus.

@eldan schrieb:

Danke dafür. :)
So was in der Art hatten wir auch vor. In unserem Theme unter „themes/Frontend/UNSERTHEME/frontend/custom/confirm.tpl“ nimmt er die Änderung aber leider nicht an. Müssen wir es an eine andere Stelle packen?

VG und Danke im Voraus.

Hallo,

das ist ja auch richtig so, da das Verzeichnis auch falsch ist, siehe:

Der richtige Pfad wäre eher: theme/UNSER_THEME/frontend/checkout/confirm.tpl

Beste Grüße

Sebastian

Hallo Sebastian,

auch hier nochmal vielen Dank.

Es hängt nun unter dem Block {frontend_checkout_confirm_confirm_table_actions} befüllt aber das Input-Feld nicht. 
Die Google-Console zeigt uns die passenden Daten an und sonst keine Fehler. Kann ja dann nur an unserem JS-Code liegen oder?

    // function to get cookie information with additional getter and setter
    Cookie = {
      get: function(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i = 0; i <ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length,c.length);
            }
        }
        return "";
      },
     set: function(name, value) {
        document.cookie = name + "=" + value;
      }
    };

    Cookie.set("VPID", "78234234234"); // test data
    document.getElementById("attribute_orderfield1_value").value = Cookie.get("VPID"); // test
    // check if we are in the confirm view - not really smooth yet....
    /*if(document.getElementsByClassName("is--act-confirm").length > 0 ) {
      if(Cookie.get("VPID") != null) { // if the partner-id is not empty set the partner-id into the comment field
        document.getElementById("attribute_orderfield1_value").value = "Partner-ID: " + Cookie.get("VPID");
      }*/
    }

VG

@eldan schrieb:

Hallo Sebastian,

auch hier nochmal vielen Dank.

Es hängt nun unter dem Block {frontend_checkout_confirm_confirm_table_actions} befüllt aber das Input-Feld nicht. 
Die Google-Console zeigt uns die passenden Daten an und sonst keine Fehler. Kann ja dann nur an unserem JS-Code liegen oder?

// function to get cookie information with additional getter and setter
Cookie = {
get: function(cname) {
var name = cname + „=“;
var ca = document.cookie.split(‚;‘);
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==’ ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length,c.length);
}
}
return „“;
},
set: function(name, value) {
document.cookie = name + „=“ + value;
}
};

Cookie.set(„VPID“, „78234234234“); // test data
document.getElementById(„attribute_orderfield1_value“).value = Cookie.get(„VPID“); // test
// check if we are in the confirm view - not really smooth yet…
/if(document.getElementsByClassName(„is–act-confirm“).length > 0 ) {
if(Cookie.get(„VPID“) != null) { // if the partner-id is not empty set the partner-id into the comment field
document.getElementById(„attribute_orderfield1_value“).value = "Partner-ID: " + Cookie.get(„VPID“);
}
/
}

VG

Hallo,

euer Code wird ja aber sofort ausgeführt. Habt ihr es einmal mit der oben genannten onLoad - Prüfung probiert? Oder es mal testweise mit einer JavaScript-Zeitverzögerung probiert (vielleicht wird das Feld ja erst nach eurem Code dargestellt)?

Beste Grüße

Sebastian

Hallo Sebastian,

danke dir. Werden wir gleich mal versuchen.

VG

@sschreier schrieb:

@eldan schrieb:

Hallo Sebastian,

auch hier nochmal vielen Dank.

Es hängt nun unter dem Block {frontend_checkout_confirm_confirm_table_actions} befüllt aber das Input-Feld nicht. 
Die Google-Console zeigt uns die passenden Daten an und sonst keine Fehler. Kann ja dann nur an unserem JS-Code liegen oder?

// function to get cookie information with additional getter and setter
Cookie = {
get: function(cname) {
var name = cname + „=“;
var ca = document.cookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length,c.length);
}
}
return „“;
},
set: function(name, value) {
document.cookie = name + „=“ + value;
}
};

Cookie.set(„VPID“, „78234234234“); // test data
document.getElementById(„attribute_orderfield1_value“).value = Cookie.get(„VPID“); // test
// check if we are in the confirm view - not really smooth yet…
/if(document.getElementsByClassName(„is–act-confirm“).length > 0 ) {
if(Cookie.get(„VPID“) != null) { // if the partner-id is not empty set the partner-id into the comment field
document.getElementById(„attribute_orderfield1_value“).value = "Partner-ID: " + Cookie.get(„VPID“);
}
/
}

VG

Hallo,

euer Code wird ja aber sofort ausgeführt. Habt ihr es einmal mit der oben genannten onLoad - Prüfung probiert? Oder es mal testweise mit einer JavaScript-Zeitverzögerung probiert (vielleicht wird das Feld ja erst nach eurem Code dargestellt)?

Beste Grüße

Sebastian

Vielen vielen Dank, das brachte das gewünschte Ergebnis.