it-swarm.com.de

Abrufen ausgewählter Werte aus Kontrollkästchen und Optionsfeldern über den Haken gform_after_submission von Gravity Forms

Gravity Forms bietet eine einigermaßen gute Dokumentation und natürlich bietet Google mehr Einblicke, wie Entwickler andere Herausforderungen im Zusammenhang mit diesem Plugin gelöst haben. Wir müssen jedoch eine scheinbar relativ einfache Aufgabe erfüllen, können jedoch keine dokumentierte Methode finden, um dies zu tun.

Wir verwenden den Hook "gform_after_submission", um eine Transaktion zu einem SOAP Webservice zu öffnen und einige der übermittelten Formularwerte zu übertragen.

Der Punkt, an dem wir feststecken, ist jetzt, den ausgewählten Wert (oder die ausgewählten Werte) von Radio und Kontrollkästchen (und vermutlich auch von <select>) abzurufen.

Gravity Forms verwendet ein System, um die Felder nach ID zu übergeben, und verwendet Dezimalpunkte, um Werte von Radios zu übergeben - zum Beispiel:

Feldname: Präfix - Feld-ID: 1 - Feldwerte: 1.1 "Mr.", 1.2 "Mrs."

Gravity Forms übergibt ein Array der Werte an den Hook - wenn der "Mr." Option ausgewählt ist, sind dies:

array(..) {
    ["1.1"]=> string(0) "Mr."
    ["1.2"]=> string(0) ""
}

Das Array hat jedoch keinen Hinweis darauf, welcher Wert ausgewählt wurde - es übergibt einfach eine Zeichenfolge für beide.

Kein Problem, wenn nur zwei Werte behandelt werden. Die Felder können jedoch Hunderte von Werten enthalten. Diese Werte können vom Client über die Administrationsoberfläche aktualisiert werden.

Das Durchsuchen der Gravity Forms-Codebasis bietet einige Möglichkeiten:

$value         = RGFormsModel::get_lead_field_value( $lead, $field );
$display_value = GFCommon::get_lead_field_display( $field, $value, $lead['currency'] );

Dies setzt voraus, dass das $ lead-Objekt - das auch als $ entry-Objekt bezeichnet wird - verfügbar ist, aber die Methode gibt unter Berufung auf fehlende Daten nicht den richtigen Wert zurück

Eine andere Option ist:

GFFormsModel::get_lead_field_value( $lead, $field );

Dies erfordert jedoch, dass wir ein korrekt formatiertes $ field-Objekt übergeben, das Teil des $ form-Objekts ist, aber wiederum nicht die sauberste Route.

Eine Idee ist, das $ _POST-Objekt nach den übergebenen Werten zu durchsuchen - dies schließt nur die eingestellten Werte und nicht die leeren ein - also im Fall von Prefix:

["input_1_1"]=> string(3) "Mr."

Eine solide Lösung würde sich auf Informationen über das in Gravity Forms gespeicherte Feld stützen, z. B. die Anzahl der Werte, über die jedes Feld eine Schleife hat, und prüfen, ob für jedes Feld ein Wert festgelegt ist, bevor eine formatierte Zeichenfolge mit jedem ausgewählten Wert durch Komma getrennt zurückgegeben wird .

Möglicherweise hat Gravity Forms bereits eine Lösung für dieses Problem - es ist jedoch nichts in der Dokumentation enthalten.

2
Q Studio

Wenn Sie über ein Formular-/Feldobjekt verfügen, können Sie mithilfe der in Gravity Forms 1.9.13 hinzugefügten Methode GF_Field :: get_value_export () eine durch Kommas getrennte Zeichenfolge mit den ausgewählten Feldern abrufen.

Wenn Sie es nur für ein oder zwei Felder verwenden möchten, können Sie Folgendes tun:

$field_id    = 4;
$field       = GFFormsModel::get_field( $form, $field_id );
$field_value = is_object( $field ) ? $field->get_value_export( $entry ) : '';

Das Obige würde die Werte für die ausgewählten Auswahlen zurückgeben. Wenn Sie den Auswahltext zurückgeben möchten, würden Sie den dritten Parameter von get_value_export () auf true setzen, z.

$field_value = is_object( $field ) ? $field->get_value_export( $entry, $field_id, true ) : '';

Wenn Sie auf alle Feldwerte im Eintrag zugreifen müssen, die relevanten Feldtypen jedoch formatiert werden sollen, um den ausgewählten Text zu verwenden, können Sie Folgendes tun:

add_action( 'gform_after_submission', function ( $entry, $form ) {

    foreach ( $form['fields'] as $field ) {
        $field_value = $field->get_value_export( $entry, $field->id, true );
        // do something with the field value.
    }

}, 10, 2 );
6
richardW8k