Oto przykład, na który właśnie wpadłem. Próbuję umieścić HTML w etykiecie mojego pola.
$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)
Dlaczego są trzy wypełnione atrybuty #title, z których tylko jeden jest używany?
Odpowiedzi:
Widzisz, jak Drupal reprezentuje pola w formularzu. Rozkłada się w następujący sposób:
$form['field_back']['und']
('und'
dla'undefined'
) są różnymi językami, na które zostało przetłumaczone pole. W Drupal, zaleca się stosowaniaLANGUAGE_NONE
do'und'
w kodzie.$form['field_feedback']['und'][0]
, Reprezentują różne wpisy dla pola. Na przykład, jeśli pole ma nieograniczoną liczność, i istnieje kilka wpisów dla tej dziedzinie, będą one pokazać, jak$form['field_feedback']['und'][0]
,$form['field_feedback']['und'][1]
itp$form['field_feedback']['und'][0]['value']
. W tym przypadku nazwa kolumny tovalue
, dla typu pola odwołania do węzłanid
, i tak dalej. Jeśli pole ma wiele kolumn danych powiązanych z nim, zobaczysz także więcej dzieci. Są one reprezentowane przez pole tekstowe / pole wyboru / specjalny widget i ostatecznie podadzą wartość pola.Szczerze mówiąc, fakt, że tytuły zostały dodane do różnych elementów w całej hierarchii, jest przypadkowy. To, czy te tytuły są wyświetlane w formularzu, zależy od określonych ustawień tablicy renderowania, w której każdy
#title
jest zawarty.Aby zmienić tytuł w widżecie formularza, musisz się martwić o element formularza na samym dole tablicy: tj. O rzeczywiste elementy wejściowe (
$form['field_feedback']['und'][0]['value']
itp.).Prawdopodobnie warto zauważyć, że element / widżet użyty do określonego pola może być dość złożony. Jeśli jeszcze go nie masz, zainstaluj moduł Devel i użyj
dpm()
funkcji do sprawdzenia$form
tablicy; który pokaże dokładnie, gdzie w tablicy są elementy, na które próbujesz trafić.źródło