CustomField als Checkbox in Frontend-Formular

Hallo,

ich möchte ein CustomField, welches am Kunden hängt, in den Profil-Einstellungen hinzufügen:

Dafür habe ich das Template …/storefront/component/address/address-personal.html.twig entsprechend erweitert. Mit einem Textfeld (custom_clients_test) funktioniert dass, wie in der Doku beschrieben problemlos:

<div class="form-group col-12">
     <label class="form-label" for="customFields[custom_clients_test]">
         {{ "customFields.custom_clients_test"|trans|sw_sanitize }}
     </label>
     <input type="text"
         class="form-control"
         name="customFields[custom_clients_test]"
         value="{{context.customer.customFields['custom_clients_test'] }}"
         id="customFields[custom_clients_test]">
</div>

Ich benötige das Ganze aber für eine Checkbox (custom_clients_name_on_invoice):

<div class="form-group col-12">
     <input type="checkbox" 
         class="form-check-input"
         name="customFields[custom_clients_name_on_invoice]"
         value="{{context.customer.customFields['custom_clients_name_on_invoice'] }}"
         id="customFields[custom_clients_name_on_invoice]">
     <label class="form-label" for="customFields[custom_clients_name_on_invoice]">
         {{ "customFields.custom_clients_name_on_invoice"|trans|sw_sanitize }}
     </label>
</div>

Die Datenanbindung der Checkbox an das CustomField wird komplett ignoriert.
Geht das prinzipiell nicht, oder mache ich mit eventuell mit den Klassen was falsch?

Hallo,

nach einigen Versuchen bin ich nun zu der Erkenntnis gekommen, dass die o.g. Methode nur bei Textfeldern funktioniert und leider nicht bei Checkboxen.

Habe es jetzt mittels folgendem Subscriber gelöst:

public static function getSubscribedEvents()
{
    return [
        CustomerEvents::MAPPING_CUSTOMER_PROFILE_SAVE => 'setCustomField'
    ];
}

public function setCustomField(DataMappingEvent $event): void
{
    $outputData = $event->getOutput();
    $this->register_name_on_invoice = ($event->getInput()->getBoolean('invoice') ? true : false);
    $outputData['customFields']['custom_clients_name_on_invoice'] = $this->register_name_on_invoice;
    $event->setOutput($outputData);
}

Im Twig-Template sieht das Ganze dann so aus:

<div class="form-check">
    <input type="checkbox"
        class="form-check-input"
        id="invoice"
        name="invoice"
        {% if context.customer.customFields['custom_clients_name_on_invoice'] %}checked="checked"{% endif %}>
                
    <label class="custom-control-label no-validation" for="invoice">
        {{ "account.noNameInvoiceCheckboxLabel"|trans|sw_sanitize }}
    </label>
 </div>

Ein wenig schade, da man den Subscriber sparen könnte, aber leider offenbar nicht, wenn Checkboxen zum Einsatz kommen :thinking:.

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.