Aqui está um exemplo que acabei de encontrar. Estou tentando colocar um pouco de HTML no rótulo do meu campo.
$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)
Por que existem três atributos #title preenchidos com apenas um sendo usado?
Respostas:
O que você está vendo é como o Drupal representa os campos em um formulário. Ele se divide assim:
$form['field_back']['und']
('und'
for'undefined'
), são os diferentes idiomas para os quais o campo foi traduzido. Em Drupal, recomenda-se a utilizaçãoLANGUAGE_NONE
de'und'
no código.$form['field_feedback']['und'][0]
, representam as diferentes entradas para o campo. Por exemplo, se um campo tem cardinalidade ilimitada, e há várias entradas para esse campo, eles vão mostrar como$form['field_feedback']['und'][0]
,$form['field_feedback']['und'][1]
, etc.$form['field_feedback']['und'][0]['value']
. Nesse caso, o nome da coluna évalue
, para um tipo de campo de referência de nó, serianid
e assim por diante. Se um campo tiver várias colunas de dados associadas, você verá mais filhos também. Eles são representados por um campo de texto / caixa de seleção / widget especial e, finalmente, fornecerão o valor para o campo.O fato de os títulos terem sido adicionados aos vários elementos em toda a hierarquia é incidental para ser honesto. A exibição ou não desses títulos no formulário depende das configurações específicas da matriz de renderização na qual cada um
#title
está contido.Para alterar o título no widget de formulário real, você só precisa se preocupar com o elemento do formulário na parte inferior da matriz: ou seja, os elementos de entrada reais (
$form['field_feedback']['und'][0]['value']
, etc.).Provavelmente vale a pena notar que o elemento / widget usado para um campo específico pode ser bastante complexo. Se você ainda não o possui, instale o módulo Devel e use a
dpm()
função para inspecionar a$form
matriz; que mostrará exatamente onde estão os elementos que você está tentando segmentar na matriz.fonte