ich möchte das Adressen Formular um die Eingabe einer Faxnummer erweitern. Dafür habe ich im Backend ein Zusatzfeld bei „Verwenden für“ für Adressen angelegt. Über ein CSV Import gelingt es auch das Feld richtig zu füllen. Im Backend bei einer Kundenadresse ist es auch möglich eine Faxnummer anzugeben.
Nun soll der Kunde aber bei der Registrierung, oder wenn eine Adresse hinzugefügt wird, die Möglichkeit bekommen seine Faxnummer einzugeben.
In meinem Theme, in der Datei address-form.html.twig habe ich den Block {% block component_address_form_address_fields %} bereits um ein zusätzliches Input Feld erweitert. Um die Kundeneingabe zu speichern, habe ich einen Subscriber mit Hilfe der Doku und dem Forum geschrieben. Damit ist es mir gelungen den Inhalt des neuen Input Feldes in der Tabelle customer , in der Spalte custom_fields zu speichern.
Wie kann ich die Faxnummer einer Adresse zuweisen und nicht dem Kunden?
Mit diesem Code wird die Kunden Eingabe bei der Registrierung in der Spalte custom_fields beim Kundendatensatz gespeichert:
Meine Vermutung ist use Shopware\Core\Framework\Event\DataMappingEvent; und die Methode $event->setOutput($outputData); auszutauschen. Aber leider habe ich in der Doku nichts dazu gefunden, wie man custom Fields bei der Adresse speichern kann.
Wie muss man denn vorgehen um Daten eines Zusatzfeldes für Adressen, bei der Registrierung zu speichern? Ich wollte die Faxnummer als Zusatzfeld einfügen und ähnlich behandeln wie eine Telefonnummer und somit dem Adressen Datensatz zuweisen. Leider habe ich noch keine Informationen gefunden, wie die Adressdaten gespeichert werden, bzw. wie man bei Speichern zusätzlichen Daten mit speichern kann.
ich wollte das Thema nochmal hervorholen und fragen, ob mir jemand einen Tipp geben kann, wie man das Adressen Formular um ein Custom Field für eine Faxnummer erweitern kann?
Mir ist es bisher nur gelungen die Faxnummer als Custom Field im Kundendatensatz zu speichern.
Die Faxnummer soll bei der Registrierung und beim Hinzufügen einer Adresse, im Adress-Datensatz, als Custom Field gespeichert werden.
Wie muss man vorgehen um Daten im Custom Field einer Adresse zu speichern?
Ich habe ein Custom Field beim Address-Formular ergänzt (das Set und Feld vorher natürlich erstellt und Adressen zugewiesen) und dem Input den Namen
„address[customFields][custom_field_name]“ gegeben.
Das scheint nicht zu reichen.
Ein Event beim erstellen/bearbeiten einer Adresse habe ich auch nicht gefunden, bei dem ich mit einem Subscriber arbeiten könnte.
Bei mir klappt es wenn ich auf das Event „CustomerEvents::MAPPING_ADDRESS_CREATE“ registriere.
Dann hole ich mir wie du die OutputData, weise noch mein CustomField aus den InputData zu und wenn ich die neuen OutputData dem Event zuweise wird das Feld mitgespeichert:
public function addCustomField(DataMappingEvent $event) {
$input = $event->getInput();
$output = $event->getOutput();
// check for custom Field
if($input->get('customFields') && $input->get('customFields')->get('custom_b2b_address_email')) {
$output['customFields'] = ['custom_feld_namel'=> $input->get('customFields')->get('custom_feld_namel')];
}
$event->setOutput($output);
}
Zu beachten ist jedoch noch der Prefix. Bei meinem Initialen Test hatte ich das Feld einfach mit dem Feldnamen aus dem Backend versehen und mir beim {{prefix}} nichts gedacht.
Ohne den Prefix wird das Feld nicht gefunden und eben mit keinem Wert befüllt.
Vielen Dank @ShopSurfingJupiter und @CRessl für den Input.
Dadurch ist es mir gelungen das Custom Field (Fax) im Adressdatensatz zu speichern, wenn ein angemeldeter Benutzer manuell eine neue Adresse hinzufügt.
@CRessl Du hast recht die Daten werden nur gespeichert, wenn {{prefix}} eingefügt ist.
@ShopSurfingJupiter Löst das Event MAPPING_ADDRESS_CREATE auch bei der Registrierung aus? In meinen Tests hat das Event nur ausgelöst, wenn ein bereits angemeldeter Benutzer eine neue Adresse hinzufügt. Obwohl bei der Registrierung ja auch ein neuer Adressdatensatz erzeugt wird.
public static function getSubscribedEvents(): array
{
return [
CustomerEvents::MAPPING_ADDRESS_CREATE => 'addAddressFax'
];
}
sorry für die späte Antwort. Du musst bei deinen Formularfeldern nur darauf achten, dass bei „name“ folgendes steht:
name="{% if prefix %}{{ prefix }}[feldname]{% else %}feldname{% endif %}"
Da bei der Registrierung und im Account das gleiche Template Element genutzt wird, setzt Showpare den Wert „prefix“ automatisch je nachdem auf welcher Seite du dich befindest. „feldname“ musst du dann natürlich durch den richtigen Feldnamen ersetzen.
es gibt noch die beiden Events hier:
CustomerEvents::MAPPING_REGISTER_ADDRESS_BILLING => ‚addCustomFieldsAddress‘,
CustomerEvents::MAPPING_REGISTER_ADDRESS_SHIPPING => ‚addCustomFieldsAddress‘
Die habe ich bei mir noch hinzu gefügt. Zur Sicherheit