hook_form_alter ()가 왜 그렇게 지저분합니까?


40

방금 마주 친 예가 있습니다. 내 필드의 레이블에 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 속성이 3 개있는 이유는 무엇입니까?


1
이 $ form 배열은 어디에 생성됩니까? 내가 알듯이 우리는 hook_form_alter에이 구조를 가진 $ form이 없다
Mohammad Ali Akbari

감사합니다. 나는 머리를 뽑고 있었다. 배열 구조는 말도 안됩니다.
JM01

답변:


72

당신이보고있는 것은 Drupal이 필드를 필드 형태로 나타내는 방법입니다. 다음과 같이 분류됩니다.

  • 외부 배열의 자식 $form['field_back']['und']( 'und'for 'undefined')은 필드가 번역 된 다른 언어입니다. 드루팔에서는 사용하는 것이 좋습니다 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어레이 를 검사해야합니다 . 배열에서 타겟팅하려는 요소의 위치를 ​​정확하게 보여줍니다.


3
간단히 말해서 Drupal이 양식 API 배열을 고려하지 않는 것에 #title 을 추가 해도 아무런 영향이 없습니다. 이 경우에도 Drupal이 구현하는 모든 양식 요소의 속성이 아니기 때문에 #title을 고려하지 않습니다. 필드 API는 양식 배열에 일반 배열을 추가하기 때문에 문제를 복잡하게하지만 양식 요소를 인식하기 위해 #type 을 찾는 Drupal을 혼동하지 않습니다 .
kiamlaluno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.