Почему hook_form_alter () так запутан?
Вот пример, с которым я столкнулся. Я пытаюсь поместить некоторый HTML в метку моего поля.
$form['field_feedback']['und']['#title'] <- has the title
$form['field_feedback']['und'][0]['#title'] <- has the title
$form['field_feedback']['und'][0]['value']['#title'] <- has the title. (Works)
Почему существуют три заселенных атрибута #title с использованием только одного?
1 ответ
Что вы видите, так это то, как Drupal представляет поля в форме. Он ломается следующим образом:
- Дети внешнего массива,
$form['field_back']['und']
('und'
для'undefined'
), - это разные языки, на которые было переведено поле. В Drupal вам рекомендуется использоватьLANGUAGE_NONE
для'und'
в коде. - Дети внутри каждого языкового массива, например.
$form['field_feedback']['und'][0]
, представляют разные записи для поля. Например, если поле имеет неограниченную мощность и есть несколько записей для этого поля, они будут отображаться как$form['field_feedback']['und'][0]
,$form['field_feedback']['und'][1]
и т. д. - Наконец, у вас есть элемент (ы) ввода формы, для самих значений поля, например.
$form['field_feedback']['und'][0]['value']
. В этом случае имя столбцаvalue
, для типа ссылочного типа узла это будетnid
и т. Д. Если в поле есть несколько столбцов данных, связанных с ним, вы увидите больше детей. Они представлены текстовым полем /полем выбора /специальным виджетам и в конечном итоге предоставляют значение для поля.
Тот факт, что заголовки были добавлены к различным элементам всей иерархии, случайно является честным. Независимо от того, отображаются ли эти заголовки в форме до тех или иных параметров массива рендеринга, в котором содержится каждый #title
.
Чтобы изменить заголовок виджета реальной формы, вам нужно только беспокоиться о элементе формы в самой нижней части массива: то есть фактические элементы ввода ($form['field_feedback']['und'][0]['value']
и т. Д.).
Вероятно, стоит отметить, что элемент /виджет, используемый для конкретного поля, может быть довольно сложным. Если у вас его еще нет, вы должны установить модуль Devel и использовать dpm()
для проверки массива $form
; который покажет вам, где именно в массиве находятся элементы, которые вы пытаетесь настроить.