Как обращаться с элементами формы контейнера?

Я добавил некоторые пользовательские поля в регистрационную форму регистра, и я обнаружил, что они отправлены обратно, упакованные в элемент формы типа «контейнер». Мой код должен обрабатывать все виды настраиваемых полей регистра.

Как я должен разбирать эти объекты и извлекать из них поля? Должен ли я заглядывать в массивы и что я могу ожидать там найти?

Я не могу найти хорошую документацию по этим объектам.

Изменить:

Регулярные поля, полученные через регистрацию пользователя, могут выглядеть так:

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

Контейнер формы выглядит, например. например:

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)
6 голосов | спросил grm 9 MarpmWed, 09 Mar 2011 17:21:31 +03002011-03-09T17:21:31+03:0005 2011, 17:21:31

2 ответа


4

Вы должны использовать $form_state['values'] для обработки представленных пользовательских данных, а не $form.

ответил sun 17 MarpmThu, 17 Mar 2011 23:17:08 +03002011-03-17T23:17:08+03:0011 2011, 23:17:08
0

В этой форме нет хорошей документации, поскольку она динамична, любой модуль может реализовать hook_form_alter () и полностью перевернуть ее вверх дном. В вашем примере имя добавляется непосредственно пользователем.module, а field_birthday - поле, а поля создаются таким образом, чтобы их можно было отображать несколько раз, если это необходимо. Вот почему они являются контейнером, и только внутри них находится фактический элемент формы.

Предполагая, что вы хотите проанализировать действительную форму, а не ответ, вам нужно пройти рекурсивно. Функция element_children () может помочь вам с этим. Он возвращает ключи всех элементов формы ниже того, который вы передали этой функции.

ответил Berdir 10 MaramThu, 10 Mar 2011 11:08:56 +03002011-03-10T11:08:56+03:0011 2011, 11:08:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132