Frage

Ich habe dem Register -Benutzerformular einige benutzerdefinierte Felder hinzugefügt und ich bin festgestellt, dass sie zurückgesandt werden und in einem Formularelement vom Typ "Container" verpackt werden. Mein Code muss alle Arten von verschiedenen benutzerdefinierten Registerfeldern verarbeiten.

Wie soll ich diese Objekte analysieren und die Felder aus ihnen extrahieren? Sollte ich in die Arrays schauen und was kann ich dort erwarten?

Ich kann anscheinend keine gute Dokumentation zu diesen Objekten finden.

Bearbeiten:

Ein regelmäßiger Felder, der durch Benutzerregistrierung erhalten wird, könnte so aussehen:

name
... (Array, 10 elements)
#type (String, 9 characters ) textfield
#title (String, 10 characters ) Username
#maxlength (Integer) 60
#required (Boolean) TRUE
#attributes (Array, 1 element)
class (Array, 1 element)
0 (String, 8 characters ) username
#default_value (String, 0 characters )
#access (Boolean) TRUE
#weight (Integer) -10
#fb_registration_field (String, 4 characters ) name

Ein Formbehälter sieht so aus:

field_birtyday
... (Array, 6 elements)
#type (String, 9 characters ) container
#attributes (Array, 1 element)
#weight (String, 1 characters ) 7
#tree (Boolean) TRUE
#language (String, 3 characters ) und
und (Array, 13 elements)
0 (Array, 12 elements)
#entity_type (String, 4 characters ) user
#bundle (String, 4 characters ) user
#field_name (String, 14 characters ) field_birtyday
#language (String, 3 characters ) und
#field_parents (Array, 0 elements)
#columns (Array, 2 elements)
0 (String, 5 characters ) value
1 (String, 6 characters ) format
#title (String, 8 characters ) Birthday
#description (String, 0 characters )
#required (Boolean) FALSE
#delta (Integer) 0
#weight (Integer) 0
value (Array, 16 elements)
#entity_type (String, 4 characters ) user
#bundle (String, 4 characters ) user
#field_name (String, 14 characters ) field_birtyday
#language (String, 3 characters ) und
#field_parents (Array, 0 elements)
#columns (Array, 2 elements)
0 (String, 5 characters ) value
1 (String, 6 characters ) format
#title (String, 8 characters ) Birthday
#description (String, 0 characters )
#required (Boolean) FALSE
#delta (Integer) 0
#weight (Integer) 0
#type (String, 9 characters ) textfield
#default_value (NULL)
#size (String, 2 characters ) 60
#maxlength (String, 3 characters ) 255
#attributes (Array, 1 element)
#theme (String, 25 characters ) field_multiple_value_form | (Callback) field_multiple_value_form();
#field_name (String, 14 characters ) field_birtyday
#cardinality (String, 1 characters ) 1
#title (String, 8 characters ) Birthday
#required (Integer) 0
#description (String, 0 characters )
#prefix (String, 42 characters ) <div id="field-birtyday-add-more-wrapper">
#suffix (String, 6 characters ) </div>
#max_delta (Integer) 0
#after_build (Array, 1 element)
0 (String, 30 characters ) field_form_element_after_build | (Callback) field_form_element_after_build();
#language (String, 3 characters ) und
#field_parents (Array, 0 elements)
War es hilfreich?

Lösung

Du solltest benutzen $form_state['values'] Um über einstellte Benutzerdaten zu verarbeiten, nicht $form.

Andere Tipps

Es gibt keine gute Dokumentation in diesem Formular, da es dynamisch ist. Jedes Modul kann Hook_form_alter () implementieren und es vollständig auf den Kopf stellen. In Ihrem Beispiel wird der Name direkt von user.module hinzugefügt, während field_birthday ein Feld ist und Felder auf eine Weise erstellt werden, die es ermöglicht, bei Bedarf mehrmals angezeigt zu werden. Deshalb sind sie ein Behälter und nur in ihnen ist das tatsächliche Formelement.

Angenommen, Sie möchten die tatsächliche Form analysieren und nicht die Antwort, müssen Sie das Formular rekursiv durchgehen. Die Funktion element_children () Kann Ihnen dabei helfen. Es gibt die Schlüssel aller Formelemente unter dem zurück, in dem Sie diese Funktion übergeben haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top