Question

J'ai ajouté quelques champs personnalisés au formulaire utilisateur de registre et je découvre qu'ils sont renvoyés, emballés dans un élément de forme de type « container ». Mon code doit gérer tous les types de différents champs de registre personnalisé.

Comment dois-je analyser ces objets et d'en extraire les champs d'eux? Dois-je regarder dans les tableaux et que puis-je espérer y trouver?

Je ne peux pas sembler trouver une bonne documentation sur ces objets.

Edit:

Un champs régulièrement reçus par l'enregistrement de l'utilisateur pourrait ressembler à ceci:

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

regards de conteneur de forme par exemple comme ceci:

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)
Était-ce utile?

La solution

Vous devez utiliser $form_state['values'] pour traiter les données de l'utilisateur, et non soumis $form.

Autres conseils

Il n'y a pas une bonne documentation sur cette forme parce qu'il est dynamique, un module peut mettre en œuvre hook_form_alter () et tourner complètement à l'envers. Dans votre exemple, le nom est ajouté directement par user.module tandis que field_birthday est un champ et les champs sont construits d'une manière qui leur permet d'être affiché plusieurs fois si nécessaire. Voilà pourquoi ils sont un conteneur et que l'intérieur d'eux est l'élément de forme réelle.

En supposant que vous voulez analyser la forme réelle, et non la réponse, vous devez passer par la forme récursive. La fonction element_children () peut vous aider avec ça. Il renvoie les clés de tous les éléments de formulaire ci-dessous celui que vous avez passé pour cette fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top